原文地址: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 jdk Java开发工具包位置,用于运行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