Elasticsearch集群搭建手册及配置详情(基于elasticsearch-8.5.2版本)

Elasticsearch集群搭建手册及配置详情(基于elasticsearch-8.5.2版本)

0 安装前准备工作

0.1 安装包下载

组件 安装包 下载地址
es elasticsearch-8.5.2-linux-x86_64.tar.gz elastic官网:https://www.elastic.co/cn/downloads/past-releases#elasticsearch elastic中文社区:https://elasticsearch.cn/download/
java openjdk-17.0.1_linux-x64_bin.tar.gz https://www.injdk.cn/

0.2 自定义部署标准

自定义部署标准 标准描述
es elasticsearch不允许使用root账号启动服务,如果你当前账号是root,则需要创建一个专有账户。本文档使用es作为专有用户。
/home/es/software 用于解压安装elasticsearch和java的软件安装包和相关配置文件
/data00,/data01,/data02 1、raid0数据盘,用于存放节点、分片、索引、文档的所有数据。2、目前elastic社区计划删除MDP多数据路径方案,在8.x权威指南已经警告 在 7.13.0 中弃用(https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#path-settings)。可能是因为遭受到用户的强烈反对,issues从最初的弃用调整到了最后的告警(https://github.com/elastic/elasticsearch/issues/71205)。如果你配置了MDP多路径方案,可能会像我一样在*_server.json日志中收到如下WAIN内容“Configuring [path.data] with a list is deprecated. Instead specify as a string value.”。不过我还是建议用户放弃多数据库路径,在文件系统层面使用raid方案。
/home/es/logs 用于存放elasticsearch输出的日志,有条件的建议目录单独挂盘使用。
/home/es/software/elasticsearch elasticsearch-8.5.2的软连接
/home/es/software/java jdk-17.0.1的软连接
/home/es/.bashrc 用于存放elasticsearch、java和logs相关的用户环境变量

0.3 节点角色划分

IP node.name cluster.initial_master_nodes
192.168.168.1 node-1 true
192.168.168.2 node-2 true
192.168.168.3 node-3 true
192.168.168.4 node-4 false
192.168.168.5 node-5 false

0.4 elasticsearch目录介绍

elasticsearch目录 描述
bin 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等。
config 配置文件目录,如elasticsearch配置、角色配置、jvm配置等。
jdk elasticsearch7.x 以后特有,自带的 java 环境,8.x版本自带 jdk17或jdk19
lib elasticsearch所依赖的java库。
modules 包含所有的Elasticsearch模块,如Cluster、Discovery、Indices等。
plugins 插件安装后会自动解压安装在此目录下

0.5 系统重要配置介绍

文件 配置 描述
/etc/security/limits.d/90-nproc.conf(或/etc/security/limits.conf) es - nproc 4096 确保 es 用户可以创建的线程数至少为 4096
同上 es - nofile 65535 Elasticsearch 使用大量文件描述符或文件句柄。 用完文件描述符可能是灾难性的,很可能会导致数据丢失。 确保将运行 es 的用户的打开文件描述符数量限制增加到 65536 或更高。
同上 es soft memlock unlimited allow user ‘elasticsearch’ mlockall
同上 es hard memlock unlimited 同上
/etc/sysctl.conf vm.max_map_count=262144 限制虚拟内存
同上 vm.swappiness=0 1、Linux系统上可用的另一个选项是确保sysctl值vm.swappiness设置为1。这减少了内核的交换倾向,在正常情况下不会导致交换,同时仍允许整个系统在紧急情况下交换。2、以上是elsatic官网的建议,但是我们一般都是禁止使用swappiness,所以直接将vm.swappiness设置为0。
同上 vm.overcommit_memory=1 内存分配控制
同上 vm.zone_reclaim_mode=0 这个参数可以取值0/1/3/4。其中0表示在local内存不够用的情况下可以去其他的内存区域分配内存;1表示在local内存不够用的情况下本地先回收再分配;3表示本地回收尽可能先回收文件缓存对象;4表示本地回收优先使用swap回收匿名内存。由此可见,将其设为0可以降低swap发生的概率。
同上 net.ipv4.tcp_retries2=5 TCP重传超时。(此设置适用于所有TCP连接,也会影响与Elasticsearch集群以外的系统的通信可靠性。如果集群通过低质量网络与外部系统通信,则可能需要为net.ipv4.tcp_retrys2选择更高的值。)

0.6 elasticsearch重要配置项介绍

文件 配置项 配置内容样例 描述
elasticsearch.yml cluster.name: es-v8.5.2 集群名称。一个节点只有在与集群中的所有其他节点共享其 cluster.name 时才能加入集群。 默认名称是 elasticsearch,但您应该将其更改为描述集群用途的适当名称。
同上 node.name: node-1 节点名称。Elasticsearch使用node.name作为集群特定实例的可读标识符。该名称包含在许多API的响应中。当Elasticsearch启动时,节点名默认为机器的主机名,但可以在elasticsearch.yml中显式配置为指定的名称。节点名称之前应该有一定的规则,且唯一。
同上 node.roles: [ master, data ] node.roles您可以通过在 中设置来定义节点的角色elasticsearch.yml。如果设置node.roles,则仅向节点分配您指定的角色。如果您不设置node.roles,节点将分配以下角色:master,data,data_content,data_hot,data_warm,data_cold,data_frozen,ingest,ml,remote_cluster_client,transform。本文档暂不做解释,后面会单独写一篇介绍node.roles,需要了解的可以阅读如下链接内容(https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles)
同上 path.data: /data00/es-v8.5.2,/data01/es-v8.5.2,/data02/es-v8.5.2 数据路径,包含节点、分片、索引、文档的所有数据。
同上 path.logs: /home/es/logs 日志路径
同上 bootstrap.memory_lock: true linux在使用内存锁时仍会交换堆外内存。要防止堆外内存交换,请禁用所有交换文件。
同上 network.host: 192.168.168.1 (静态,字符串)为 HTTP 和传输流量设置此节点的地址。 该节点将绑定到该地址,并将其用作其发布地址。 接受 IP 地址、主机名或特殊值。默认为 local。例如127.0.0.1。需要搭建集群,此处需要修改为本机ip或hostname。
同上 http.port: 默认值为:9200-9300,使用默认值,不需要再配置。 (静态,整数)为 HTTP 客户端通信绑定的端口。接受单个值或范围。如果指定了一个范围,节点将绑定到该范围内的第一个可用端口。
同上 transport.port: 默认值为:9300-9400,使用默认值,不需要再配置。 静态,整数)为节点之间的通信绑定的端口。接受单个值或范围。如果指定了一个范围,节点将绑定到该范围内的第一个可用端口。在每个符合主节点条件的节点上将此设置设置为单个端口,而不是一个范围。
同上 discovery.seed_hosts: [“192.168.168.1”,“192.168.168.2”,“192.168.168.3”] 要将新节点添加到现有集群中,请配置 discovery.seed_hosts 或其他相关发现设置,以便新节点可以发现集群中现有的 master-eligible 节点。 要引导新的多节点集群,请按照集群引导部分中的描述配置 cluster.initial_master_nodes 以及 discovery.seed_hosts 或其他相关发现设置。
同上 cluster.initial_master_nodes: [“192.168.168.1”,“192.168.168.2”,“192.168.168.3”] 当您启动符合主节点资格的节点时,您可以在命令行或 elasticsearch.yml 文件中提供此设置。 集群形成后,从每个节点的配置中删除此设置。
同上 xpack.security.enabled: false elasticsearch-8.x默认是开启Security的,内网搭建集群的话,此处建议关闭Security。如果是在公网使用,则建议打开,使用可以阅读官网文档。
jvm.options -Xms -Xms4g 建议设置为机器内存大小的1/4~1/2范围内,最大不超过32G。默认情况下,Elasticsearch 根据节点的 角色和总内存自动设置 JVM 堆大小。对于大多数生产环境,建议使用默认大小。
同上 -Xmx -Xmx4g 同上

0.7 elasticsearch产品兼容性

与elasticsearch兼容性 参考地址
操作系统 https://www.elastic.co/cn/support/matrix#matrix_os
JVM https://www.elastic.co/cn/support/matrix#matrix_jvm
浏览器 https://www.elastic.co/cn/support/matrix#matrix_browsers
插件等 https://www.elastic.co/cn/support/matrix#matrix_browsers
Logstash 插件 https://www.elastic.co/cn/support/matrix#matrix_browsers

1 修改系统重要配置

1.1 线程数,句柄数和锁定内存

修改es用户创建的最小线程数,可打开的最小文件描述符和文件句柄,锁定内存

文件:/etc/security/limits.d/90-nproc.conf(或/etc/security/limits.conf)

echo 'es  -  nproc   4096' >> /etc/security/limits.d/90-nproc.conf
echo 'es  -  nofile  65535' >> /etc/security/limits.d/90-nproc.conf
echo 'es soft memlock unlimited' >> /etc/security/limits.d/90-nproc.conf
echo 'es hard memlock unlimited' >> /etc/security/limits.d/90-nproc.conf

1.2 修改内核参数

文件:/etc/sysctl.conf

echo 'vm.max_map_count=262144'	>> /etc/sysctl.conf
echo 'vm.swappiness=0'			>> /etc/sysctl.conf
echo 'vm.overcommit_memory=1'	>> /etc/sysctl.conf
echo 'vm.zone_reclaim_mode=0'	>> /etc/sysctl.conf
echo 'net.ipv4.tcp_retries2=5'	>> /etc/sysctl.conf

#执行命令生效
sysctl -p

2 软件部署

2.1 创建es用户及用户组

root用户操作

groupadd es -g 750 && useradd -g es -u 750 es

2.2 配置用户环境变量

cd /home/es
echo 'export ES_HOME=/home/es/software/elasticsearch' >> .bashrc
echo 'export ES_TMPDIR=/home/es/logs/tmp' >> .bashrc
echo 'export JAVA_HOME=/home/es/software/java' >> .bashrc
echo 'export PATH=$JAVA_HOME/bin:$ES_HOME/bin:$PATH' >> .bashrc

2.3 创建相关目录

软件目录

su - es -c "mkdir /home/es/software"  

日志目录

su - es -c "mkdir -p /home/es/logs;mkdir -p /home/es/logs/tmp"  

数据目录

elastic官网提示在 7.13.0 中弃用多个数据路径,每个节点(或进程服务)只能配置一个数据路径。

mkdir /data00/es-v8.5.2;mkdir /data01/es-v8.5.2;mkdir /data02/es-v8.5.2

chown es:es /data*/es-v8.5.2

2.4 上传软件包

上传软件包到/home/es/software目录下

scp elasticsearch-8.5.2-linux-x86_64.tar.gz $ip:/home/es/software

scp openjdk-17.0.1_linux-x64_bin.tar.gz $ip:/home/es/software

解压软件包,为elasticsearch和jdk创建软连接,和环境变量路径保持一致

cd /home/es/software
tar -zxvf elasticsearch-8.5.2-linux-x86_64.tar.gz
rm -f elasticsearch-8.5.2-linux-x86_64.tar.gz
ln -s elasticsearch-8.5.2 elasticsearch
tar -zxvf openjdk-17.0.1_linux-x64_bin.tar.gz
rm -f openjdk-17.0.1_linux-x64_bin.tar.gz
ln -s jdk-17.0.1 java
chown -R es:es /home/es

3 修改elasticsearch重要配置项

切换到es用户下执行

su - es

cd /home/es/software/elasticsearch/config/

3.1 node-1节点elasticsearch.yml

cluster.name: es-v8.5.2
node.name: node-1
path.data: /data00/es-v8.5.2,/data01/es-v8.5.2,/data02/es-v8.5.2
path.logs: /home/es/logs
bootstrap.memory_lock: true
network.host: 192.168.168.1
discovery.seed_hosts: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
cluster.initial_master_nodes: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
xpack.security.enabled: false

3.2 node-2节点修改elasticsearch.yml

cluster.name: es-v8.5.2
node.name: node-2
path.data: /data00/es-v8.5.2,/data01/es-v8.5.2,/data02/es-v8.5.2
path.logs: /home/es/logs
bootstrap.memory_lock: true
network.host: 192.168.168.2
discovery.seed_hosts: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
cluster.initial_master_nodes: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
xpack.security.enabled: false

3.3 node-3节点修改elasticsearch.yml

cluster.name: es-v8.5.2
node.name: node-3
path.data: /data00/es-v8.5.2,/data01/es-v8.5.2,/data02/es-v8.5.2
path.logs: /home/es/logs
bootstrap.memory_lock: true
network.host: 192.168.168.3
discovery.seed_hosts: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
cluster.initial_master_nodes: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
xpack.security.enabled: false

3.4 node-4节点修改elasticsearch.yml

cluster.name: es-v8.5.2
node.name: node-4
path.data: /data00/es-v8.5.2,/data01/es-v8.5.2,/data02/es-v8.5.2
path.logs: /home/es/logs
bootstrap.memory_lock: true
network.host: 192.168.168.4
discovery.seed_hosts: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
xpack.security.enabled: false

3.5 node-5节点修改elasticsearch.yml

cluster.name: es-v8.5.2
node.name: node-5
path.data: /data00/es-v8.5.2,/data01/es-v8.5.2,/data02/es-v8.5.2
path.logs: /home/es/logs
bootstrap.memory_lock: true
network.host: 192.168.168.5
discovery.seed_hosts: ["192.168.168.1", "192.168.168.2" , "192.168.168.3"]
xpack.security.enabled: false

4 依次启动Elasticsearch服务

切换到es用户下执行

su - es

cd /home/es/software/elasticsearch/bin/

./elasticsearch -d

#es用户下jps -ml查看Elasticsearch服务是否存在
jps -ml

5 验证集群服务

#查看集群监控状态
$ curl -XGET 'http://192.168.168.1:9200/_cat/health?v'
epoch      timestamp cluster   status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1669797905 08:45:05  es-v8.5.2 green           5         5      0   0    0    0        0             0                  -                100.0%

#查看节点状态
$ curl -XGET 'http://192.168.168.1:9200/_cat/nodes?v&s=name'
ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
192.168.168.1           11          49   0    0.00    0.01     0.05 cdfhilmrstw -      node-1
192.168.168.2            6          98   0    0.00    0.01     0.05 cdfhilmrstw -      node-2
192.168.168.3            4          99   0    0.00    0.01     0.05 cdfhilmrstw *      node-3
192.168.168.4            2          99   0    0.00    0.05     0.09 cdfhilmrstw -      node-4
192.168.168.5            2          99   7    0.61    0.21     0.11 cdfhilmrstw -      node-5

6 删除cluster.initial_master_nodes配置项

删除master节点中cluster.initial_master_nodes: [“192.168.168.1”, “192.168.168.2” , “192.168.168.3”]配置项。

附录

附1 Elasticsearch和JDK兼容性对应关系表

Elasticsearch 和 JVM 版本对应关系见如下链接 Oracle/OpenJDK**/AdoptOpenJDK Oracle/OpenJDK** Oracle/OpenJDK** Oracle/OpenJDK** AdoptOpenJDK Oracle/OpenJDK** Oracle/OpenJDK**/AdoptOpenJDK Oracle/OpenJDK**/AdoptOpenJDK Oracle/OpenJDK**/AdoptOpenJDK Oracle/OpenJDK**/AdoptOpenJDK/Temurin Oracle/OpenJDK**/Temurin Oracle/OpenJDK**/Temurin Oracle/OpenJDK**/Temurin Azul Zing IBM
https://www.elastic.co/cn/support/matrix#matrix_jvm 1.8.0 9 10 11 11 12 13 14 15 16 17 18 19 16.01.9.0+ J9 (any version)
Elasticsearch 5.0.x X X X X X X X X X X X X X
Elasticsearch 5.1.x X X X X X X X X X X X X X
Elasticsearch 5.2.x X X X X X X X X X X X X X
Elasticsearch 5.3.x X X X X X X X X X X X X X
Elasticsearch 5.4.x X X X X X X X X X X X X X
Elasticsearch 5.5.x X X X X X X X X X X X X X
Elasticsearch 5.6.x X X X X X X X X X X X X X
Elasticsearch 6.0.x X X X X X X X X X X X X X X
Elasticsearch 6.1.x X X X X X X X X X X X X X X
Elasticsearch 6.2.x X X X X X X X X X X X X X
Elasticsearch 6.3.x X X X X X X X X X X X X X
Elasticsearch 6.4.x X X X X X X X X X X X X X
Elasticsearch 6.5.x X X X X X X X X X X X X X
Elasticsearch 6.6.x X X X X X X X X X X X X X
Elasticsearch 6.7.x X X X X X X X X X X X X
Elasticsearch 6.8.x X X X X X
Elasticsearch 7.0.x X X X X X X X X X X X X
Elasticsearch 7.1.x X X X X X X X X X X X X
Elasticsearch 7.2.x X X X X X X X X X X X X
Elasticsearch 7.3.x X X X X X X X X X X X X
Elasticsearch 7.4.x X X X X X X X X X X X
Elasticsearch 7.5.x X X X X X X X X X X X
Elasticsearch 7.6.x X X X X X X X X X X X
Elasticsearch 7.7.x X X X X X X X X X X X
Elasticsearch 7.8.x X X X X X X X X X X X
Elasticsearch 7.9.x X X X X X X X X X X
Elasticsearch 7.10.x X X X X X X X X X X
Elasticsearch 7.11.x X X X X X X X X X X X
Elasticsearch 7.12.x X X X X X X X X X X
Elasticsearch 7.13.x X X X X X X X X X X X
Elasticsearch 7.14.x X X X X X X X X X X X
Elasticsearch 7.15.x X X X X X X X X X X
Elasticsearch 7.16.x X X X X X X X X X X X
Elasticsearch 7.17.x X X X X X X X X X
Elasticsearch 8.0.x X X X X X X X X X X X X X X
Elasticsearch 8.1.x X X X X X X X X X X X X X
Elasticsearch 8.2.x X X X X X X X X X X X X X
Elasticsearch 8.3.x X X X X X X X X X X X X X
Elasticsearch 8.4.x X X X X X X X X X X X X X
Elasticsearch 8.5.x X X X X X X X X X X X X

欢迎各位朋友关注公众号交流

你可能感兴趣的:(elasticsearch,大数据)