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

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

0 安装前准备工作

0.1 安装包下载

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

0.2 自定义部署标准

自定义部署标准标准描述
eselasticsearch不允许使用root账号启动服务,如果你当前账号是root,则需要创建一个专有账户。本文档使用es作为专有用户。
/home/es/software用于解压安装elasticsearch和java的软件安装包和相关配置文件
/data00,/data01,/data021、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/elasticsearchelasticsearch-8.5.2的软连接
/home/es/software/javajdk-17.0.1的软连接
/home/es/.bashrc用于存放elasticsearch、java和logs相关的用户环境变量

0.3 节点角色划分

IPnode.namecluster.initial_master_nodes
192.168.168.1node-1true
192.168.168.2node-2true
192.168.168.3node-3true
192.168.168.4node-4false
192.168.168.5node-5false

0.4 elasticsearch目录介绍

elasticsearch目录描述
bin可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等。
config配置文件目录,如elasticsearch配置、角色配置、jvm配置等。
jdkelasticsearch7.x 以后特有,自带的 java 环境,8.x版本自带 jdk17或jdk19
libelasticsearch所依赖的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 65535Elasticsearch 使用大量文件描述符或文件句柄。 用完文件描述符可能是灾难性的,很可能会导致数据丢失。 确保将运行 es 的用户的打开文件描述符数量限制增加到 65536 或更高。
同上es soft memlock unlimitedallow user ‘elasticsearch’ mlockall
同上es hard memlock unlimited同上
/etc/sysctl.confvm.max_map_count=262144限制虚拟内存
同上vm.swappiness=01、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=5TCP重传超时。(此设置适用于所有TCP连接,也会影响与Elasticsearch集群以外的系统的通信可靠性。如果集群通过低质量网络与外部系统通信,则可能需要为net.ipv4.tcp_retrys2选择更高的值。)

0.6 elasticsearch重要配置项介绍

文件配置项配置内容样例描述
elasticsearch.ymlcluster.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:truelinux在使用内存锁时仍会交换堆外内存。要防止堆外内存交换,请禁用所有交换文件。
同上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:falseelasticsearch-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
JVMhttps://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**/AdoptOpenJDKOracle/OpenJDK**Oracle/OpenJDK**Oracle/OpenJDK**AdoptOpenJDKOracle/OpenJDK**Oracle/OpenJDK**/AdoptOpenJDKOracle/OpenJDK**/AdoptOpenJDKOracle/OpenJDK**/AdoptOpenJDKOracle/OpenJDK**/AdoptOpenJDK/TemurinOracle/OpenJDK**/TemurinOracle/OpenJDK**/TemurinOracle/OpenJDK**/TemurinAzul ZingIBM
https://www.elastic.co/cn/support/matrix#matrix_jvm1.8.09101111121314151617181916.01.9.0+J9 (any version)
Elasticsearch 5.0.xXXXXXXXXXXXXX
Elasticsearch 5.1.xXXXXXXXXXXXXX
Elasticsearch 5.2.xXXXXXXXXXXXXX
Elasticsearch 5.3.xXXXXXXXXXXXXX
Elasticsearch 5.4.xXXXXXXXXXXXXX
Elasticsearch 5.5.xXXXXXXXXXXXXX
Elasticsearch 5.6.xXXXXXXXXXXXXX
Elasticsearch 6.0.xXXXXXXXXXXXXXX
Elasticsearch 6.1.xXXXXXXXXXXXXXX
Elasticsearch 6.2.xXXXXXXXXXXXXX
Elasticsearch 6.3.xXXXXXXXXXXXXX
Elasticsearch 6.4.xXXXXXXXXXXXXX
Elasticsearch 6.5.xXXXXXXXXXXXXX
Elasticsearch 6.6.xXXXXXXXXXXXXX
Elasticsearch 6.7.xXXXXXXXXXXXX
Elasticsearch 6.8.xXXXXX
Elasticsearch 7.0.xXXXXXXXXXXXX
Elasticsearch 7.1.xXXXXXXXXXXXX
Elasticsearch 7.2.xXXXXXXXXXXXX
Elasticsearch 7.3.xXXXXXXXXXXXX
Elasticsearch 7.4.xXXXXXXXXXXX
Elasticsearch 7.5.xXXXXXXXXXXX
Elasticsearch 7.6.xXXXXXXXXXXX
Elasticsearch 7.7.xXXXXXXXXXXX
Elasticsearch 7.8.xXXXXXXXXXXX
Elasticsearch 7.9.xXXXXXXXXXX
Elasticsearch 7.10.xXXXXXXXXXX
Elasticsearch 7.11.xXXXXXXXXXXX
Elasticsearch 7.12.xXXXXXXXXXX
Elasticsearch 7.13.xXXXXXXXXXXX
Elasticsearch 7.14.xXXXXXXXXXXX
Elasticsearch 7.15.xXXXXXXXXXX
Elasticsearch 7.16.xXXXXXXXXXXX
Elasticsearch 7.17.xXXXXXXXXX
Elasticsearch 8.0.xXXXXXXXXXXXXXX
Elasticsearch 8.1.xXXXXXXXXXXXXX
Elasticsearch 8.2.xXXXXXXXXXXXXX
Elasticsearch 8.3.xXXXXXXXXXXXXX
Elasticsearch 8.4.xXXXXXXXXXXXXX
Elasticsearch 8.5.xXXXXXXXXXXXX

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值