热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch安装配置

原文地址:https:www.cpweb.top1176一、介绍  Elasticsearch是一个分布式、高扩展、高实时的全文搜索和数据分析引擎,基于RESTfulweb接口,使




原文地址:https://www.cpweb.top/1176

一、介绍

  Elasticsearch 是一个分布式、高扩展、高实时的全文搜索和数据分析引擎,基于RESTful web接口,使用Java语言开发的,是一款开源软件。
  Elasticsearch、Logstash(数据收集日志解析引擎)和Kibana(分析和可视化平台)一起被设计成一个集成解决方案,称为Elastic Stack(ELK),它能够安全可靠地获取各种类型格式的数据,并且实时地对数据进行搜索、分析和可视化。
  官方文档(7.10):https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html


二、配置文件

相关配置文件


类型描述默认位置
home主目录/usr/share/elasticsearch
bin二进制脚本,包括elasticsearch启动一个节点和elasticsearch-plugin来安装插件等。/usr/share/elasticsearch/bin
conf配置文件,包括主配置文件elasticsearch.yml等。/etc/elasticsearch
conf环境变量,包括堆大小、文件描述符等。/etc/sysconfig/elasticsearch
data节点上分配的每个索引/分片的数据文件的位置,可以保存多个位置。可通过主配置文件的path.data自定义。/var/lib/elasticsearch
jdkJava开发工具包位置,用于运行Elasticsearch,可以通过在Java环境中设置JAVA_HOME环境变量来覆盖 /etc/sysconfig/elasticsearch 中设定的变量。/usr/share/elasticsearch/jdk
logs日志文件位置,可通过主配置文件的path.logs自定义。/var/log/elasticsearch
plugins插件文件位置,每个插件都将包含在一个子目录中。/usr/share/elasticsearch/plugins

其他配置文件:

[root@es01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml # 主配置文件
/etc/elasticsearch/jvm.options # JVM配置文件(主要是内存设置)
/etc/elasticsearch/log4j2.properties # 日志配置文件
/etc/elasticsearch/role_mapping.yml # 索引的规则文件
/etc/elasticsearch/roles.yml # 规则文件
/etc/init.d/elasticsearch # 启动脚本
/etc/sysconfig/elasticsearch # 环境变量,包括堆大小、文件描述符。
/usr/lib/sysctl.d/elasticsearch.conf # 库文件的配置
/usr/lib/systemd/system/elasticsearch.service # systemd管理启动程序


三、安装

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html

(1)安装JAVA环境
需要到官方网站下载,无法在服务器直接wget,还需要登录。
JDK下载地址:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html
[root@es01 ~]# rpm -vih jdk-8u181-linux-x64.rpm
[root@es01 ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
(2)下载安装Elasticsearch
[root@es01 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-x86_64.rpm
[root@es01 ~]# rpm -vih elasticsearch-7.10.0-x86_64.rpm
(3)启动验证
[root@es01 ~]# systemctl start elasticsearch
[root@es01 ~]# netstat -ntlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 8568/java
tcp6 0 0 ::1:9200 :::* LISTEN 8568/java
tcp6 0 0 127.0.0.1:9300 :::* LISTEN 8568/java
tcp6 0 0 ::1:9300 :::* LISTEN 8568/java
[root@es01 ~]# curl 127.0.0.1:9200
{
"name" : "es01",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "RvOKQG-xTjSh5KYT4haRdQ",
"version" : {
"number" : "7.10.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96",
"build_date" : "2020-11-09T21:30:33.964949Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}


四、基本配置

  前面安装只是基本安装,都是默认配置,我们还要根据自身情况对Elasticsearch(以下简称ES)进行配置。当然如果是生产环境,就必须考虑更多的事项。

[root@es01 ~]# vim /etc/elasticsearch/elasticsearch.yml
#集群名称(设置集群名称,想要其他节点加入同一个集群必须集群名称相同,单节点可以不配置)
cluster.name: es-cluster
#节点名字(通过此配置项来区分集群中的所有节点)
node.name: es-1
#数据目录
path.data: /data/es/data
#日志目录
path.logs: /data/es/log
#开启内存锁(在CentOS7中支持内存锁并且要修改systemd管理ES的配置文件)
bootstrap.memory_lock: true
#监听地址
network.host: 10.0.0.5
#监听端口
http.port: 9200
#配置集群节点IP
discovery.seed_hosts: ["10.0.0.5"]

修改systemd管理ES的配置文件。

[root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service # 添加以下配置
LimitMEMLOCK=infinity
[root@es01 ~]# systemctl daemon-reload

创建目录并授权

[root@es01 ~]# mkdir -p /data/es/{data,log}
[root@es01 ~]# chown -R elasticsearch.elasticsearch /data/es

启动测试

[root@es01 ~]# systemctl restart elasticsearch
[root@es01 ~]# curl 10.0.0.5:9200
{
"name" : "es-1",
"cluster_name" : "es-cluster",
"cluster_uuid" : "mBrkZUAuSfit1JYjrKRwig",
"version" : {
"number" : "7.10.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96",
"build_date" : "2020-11-09T21:30:33.964949Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}


五、重要配置详解

  官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
  Elasticsearch只需很少的配置即可上手,但是在生产环境中使用集群之前,就必须考虑更多的事项。以下只详解以上配置用到的部分,其它请阅读官方文档。


1、集群名字设置

当节点与集群中的所有其它节点共享集群名称时,该节点只能加入此集群,集群默认名称是elasticsearch。

cluster.name: es-cluster


2、节点名字设置

ES使用节点名称作为ES特定实例的可读标识符,当ES启动时,节点名称默认为计算机的主机名。

node.name: es-1

  可以从单个节点上用相同的ES主目录启动多个节点,此设置对于测试ES形成集群的能力很有用,但不建议用于生产环境。


3、内存锁

  为了防止ES堆内存被换出,开启内存锁使用 mlockall 将进程地址空间锁定在RAM中。需要注意的是使用内存锁时,某些平台仍会交换堆外内存,为防止堆外内存交换,请禁用所有交换文件。

bootstrap.memory_lock: true

如果 mlockall 尝试分配的内存超过可用内存,则可能导致JVM或Shell会话退出,如下:

[ 128.909028] Out of memory: Kill process 7545 (java) score 279 or sacrifice child
[ 128.989845] Killed process 7787(controller) total-m:37948kB, anon-rss:8kB, file-rss:600kB, shme m-rss:0kB
[ 121.838354] Out of memory: Kill process 7545(java) score 279 or sacrifice child
[ 121.830373] Killed process 7545(java) total-m:2772612kB, anon-rss:642348kB, file-rss:228532kB, shmem-rss:0kB [ 121.831867] Out of memory: Kill process 7684 (java) score 279 or sacrifice child
[ 121.831883] Killed process 7684 (java) total-um:2772612kB, anon-rss:642736kB, file-rss:228688kB, shmem-rss:8kB

如果出现以下报错

[root@es01 ~]# tailf /data/es/log/es-cluster.log
......
[2020-12-01T11:33:38,875][ERROR][o.e.b.Bootstrap ] [es-1] node validation exception
[2] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
......

  最可能的原因是运行ES的用户无权锁定内存,对于RPM包安装使用systemd管理ES的,可以通过修改systemd管理ES的配置文件解决。

[root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service # 添加以下配置
LimitMEMLOCK=infinity
[root@es01 ~]# systemctl daemon-reload


4、网络主机设置

  默认情况下,ES仅绑定到环回地址,例如127.0.0.1和[:: 1],此绑定足以在服务器上运行单节点。要与其它服务器上的节点形成集群,节点需要绑定到非环回地址。

network.host: 10.0.0.5


5、发现和集群形成设置

发现和集群形成设置,主要是两个重要的配置,以便集群中的节点可以彼此发现并选举一个主节点。

(1)discovery.seed_hosts
  不做任何配置,ES将绑定到可用的环回地址,并扫描本地端口9300至9305以连接在同一服务器上运行的其它节点,此行为无需进行任何配置即可提供自动集群体验,可以用于测试ES形成集群的能力。
  如果要与其他主机上的节点形成集群,就需要对此配置进行设置。此配置提供了集群中其它符合主机资格的节点的列表,这些节点可能处于活动状态且可与之联系以传播发现过程。此配置接受YAML序列或群集中所有符合主机资格的节点的地址数组,每个地址可以是IP地址,也可以是通过DNS解析为一个或多个IP地址的主机名。如:

discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
端口是可选的,默认为9300,可以被覆盖。
如果主机名解析为多个IP地址,则该节点将尝试在所有解析的地址处发现它。
IPv6地址必须放在方括号中。

(2)cluster.initial_master_nodes
  当首次启动ES集群时,集群引导步骤将确定符合主节点资格的节点集中确定,节点集的票数将在第一次选举中进行计数。未配置发现设置,此步骤由节点自身自动执行。
  由于自动引导本质上是不安全的,因此在生产模式下启动新集群时,必须明确列出符合资格的主机,这些节点的票数会在首次选举中进行计数,然后选择票数最多的为主节点,使用“cluster.initial_master_nodes”来设置列表。

cluster.initial_master_nodes:
- es-1
- es-2
- es-3

  此配置通过“node.name”来标识初始主节点,确保 “cluster.initial_master_nodes” 中的值与“node.name”完全匹配。


6、堆大小设置

  默认情况下,ES告诉JVM使用最小和最大的堆大小为1GB。 ES可用的堆越多,它可用于其内部缓存的内存就越多,但可供操作系统用于文件系统缓存的内存就越少。因此根据服务器自身情况设置合理的堆大小是非常重要。
  ES将为JVM分配指定堆大小。通过Xms(最小堆大小)和Xmx(最大堆大小)设置进行设置,这两个设置必须彼此相等。
  这些设置的值取决于服务器上可用的RAM大小。将Xmx和Xms设置为不超过物理RAM的50%, ES会出于JVM堆以外的目的而需要内存,因此为此留出内存空间是很重要。
  例如,ES使用堆外缓冲区来进行网络通信,依靠操作系统的文件系统缓存来访问文件,而JVM本身也需要一些内存。如果观察ES进程使用的内存多于Xmx设置配置的限制,这是正常的。
  我们可以通过jvm.options配置文件(位于/etc/elasticsearch下)来设定堆大小,单位可以是g可以是m。

[root@es01 ~]# vim /etc/elasticsearch/jvm.options
-Xms512m
-Xmx512m


推荐阅读
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • MyBatis入门指南:环境搭建与基础配置详解
    本文详细介绍了MyBatis的基础配置流程,包括在Maven项目中添加MyBatis依赖、IDEA中配置数据库连接、导入SQL脚本以及编写mybatis-config.xml配置文件等关键步骤。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 使用 Jupyter Notebook 实现 Markdown 编写与代码运行
    Jupyter Notebook 是一个开源的基于网页的应用程序,允许用户在同一文档中编写 Markdown 文本和运行多种编程语言的代码,并实时查看运行结果。 ... [详细]
  • 本文整理了关于Sia去中心化存储平台的重要网址和资源,旨在为研究者和用户提供全面的信息支持。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
author-avatar
手机用户2502921663
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有