CentOS搭建:ES集群
accttodo 12/31/2023 Linux
目录
参考:
- 链接1:https://blog.csdn.net/hualingkai11/article/details/108535862 (opens new window)
- 链接2:https://blog.csdn.net/SHI940637335/article/details/130109148 (opens new window)
- 链接3:https://huaweicloud.csdn.net/637f7728dacf622b8df84d78.html (opens new window)
- 链接4:https://blog.51cto.com/u_14471711/5913643 (opens new window)
- 链接5:https://blog.csdn.net/qq_50227688/article/details/115379121 (opens new window)
- 链接6:https://www.cnblogs.com/zhangyachao/p/15499556.html (opens new window)
# CentOS搭建:ES集群
# 环境依赖
软件/环境 | 版本 | 包名 | 备注 |
---|---|---|---|
Linux | CentOS 7.x | ||
Elasticsearch | 7.8.0 | 官网下载 (opens new window) | |
jdk | 11 | es7要求jdk11 |
# 解压缩安装包
cd /opt/
mkdir es
mv elasticsearch-7.8.0-linux-x86_64.tar.gz es/
cd es/
ll
tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz
1
2
3
4
5
6
2
3
4
5
6
# 创建es用户
因为安全问题,Elasticsearch不允许root用户直接运行,所以要创建新用户
groupadd es
useradd -g es es
passwd es
pwd@123123
pwd@123123
1
2
3
4
5
2
3
4
5
- 曾用过:pwd@12345
# 授权es用户
usermod -a -G es root
cat /etc/group | grep es
1
2
2
chown -R es:es /opt/es
ll
1
2
2
# 编辑配置文件
cp /opt/es/elasticsearch-7.8.0/config/elasticsearch.yml /opt/es/elasticsearch-7.8.0/config/elasticsearch.yml.bak20230808
vim /opt/es/elasticsearch-7.8.0/config/elasticsearch.yml
1
2
2
# 更改如下配置
# 集群名称,默认是elasticsearch,建议指定一个有意义的名称。
cluster.name: elasticsearch
# 节点名,elasticsearch会默认随机指定一个名字,建议指定一个有意义的名称。
node.name: node-1
# 设置为0.0.0.0允许外网访问
network.host: 0.0.0.0
# http访问端口
http.port: 9200
# 初始化新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-1"]
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 配置系统参数
新创建的es用户最大可创建文件数太小,最大虚拟内存太小,切换到root用户,编辑相关配置文件。
- 最大可创建文件数
cp /etc/security/limits.conf /etc/security/limits.conf.bak20230808
vim /etc/security/limits.conf
1
2
2
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
1
2
3
4
2
3
4
cp /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.bak20230808
vim /etc/security/limits.d/20-nproc.conf
1
2
2
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
1
2
3
4
2
3
4
- 最大虚拟机内存
cp /etc/sysctl.conf /etc/sysctl.conf.bak20230808
vim /etc/sysctl.conf
1
2
2
# 在文件中增加下面内容
# 一个进程可以拥有的 VMA(虚拟内存区域)的数量 默认值为 65536
vm.max_map_count=655360
1
2
3
2
3
# 重新加载
sysctl -p
1
2
2
# 配置jdk环境参数
es7要求的jdk版本为11,否则报如下错误:future versions of Elasticsearch will require Java 11;
cp /opt/es/elasticsearch-7.8.0/bin/elasticsearch-env.bak20230808
vim /opt/es/elasticsearch-7.8.0/bin/elasticsearch-env
1
2
2
# now set the path to java
# 在此添加JAVA_HOME指向es7自带jdk
JAVA_HOME="/opt/es/elasticsearch-7.8.0/jdk"
1
2
3
2
3
# 启动ES程序
# 切换用户
su es
cd /opt/es/elasticsearch-7.8.0/bin
#后台启动
./elasticsearch -d
#启动
./elasticsearch
1
2
3
4
5
6
7
2
3
4
5
6
7
# 测试单机部署
在访问elasticsearch前,请确保防火墙是关闭的
#暂时关闭防火墙
systemctl stop firewalld
#或者
#永久设置防火墙状态
systemctl enable firewalld.service #打开防火墙永久性生效,重启后不会复原
systemctl disable firewalld.service #关闭防火墙,永久性生效,重启后不会复原
#以上命令关闭防火墙不管用试试下面这行
service iptables stop
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
访问:http://10.237.1.63:9200/ (opens new window)
# 集群部署配置(多机集群、单机多节点)
访问:http://10.237.1.63:9200/_cat/nodes (opens new window)
Elasticsearch配置参数说明
参数 | 说明 |
---|---|
cluster.name: ES | ES集群名称,同一个集群内的所有节点集群名称必须保持一致 |
node.name: slave2 | ES集群内的节点名称,同一个集群内的节点名称要具备唯一性 |
node.master: true | 允许节点是否可以成为一个master节点,ES是默认集群中的第一台机器成为master,如果这台机器停止就会重新选举 |
node.data: false | 允许该节点存储索引数据(默认开启) |
path.data: | ES是搜索引擎,会创建文档,建立索引,此路径是索引的存放目录.可以指定多个存储位置 |
path.logs: | ES专门的日志存储位置 |
bootstrap.memory_lock: true | 在ES运行起来后锁定ES所能使用的堆内存大小,锁定内存大小一般为可用内存的一半左右;锁定内存后就不会使用交换分区。如果不打开此项,当系统物理内存空间不足,ES将使用交换分区,ES如果使用交换分区,那么ES的性能将会变得很差 |
network.host: 0.0.0.0 | ES的HTTP端口和集群通信端口就会监听在此地址上 |
network.tcp.no_delay: true | 是否启用TCP无延迟,true为启用TCP不延迟,默认为false启用TCP延迟 |
truenetwork.tcp.keep_alive: true | 是否启用TCP保持活动状态,默认为true |
network.tcp.reuse_address: true | 是否应该重复使用地址。默认true,在Windows机器上默认为false |
network.tcp.send_buffer_size: 128mb | TCP发送缓冲区大小,默认不设置 |
network.tcp.receive_buffer_size: 128mb | TCP接收缓冲区大小,默认不设置 |
transport.tcp.port: 9301 | 设置集群节点通信的TCP端口,默认就是9300 |
transport.tcp.compress: true | 设置是否压缩TCP传输时的数据,默认为false |
http.max_content_length: 200mb | 设置http请求内容的最大容量,默认是100mb |
http.cors.enabled: true | 是否开启跨域访问 |
http.cors.allow-origin: "*" | 开启跨域访问后的地址限制,*表示无限制 |
http.port: 9201 | 定义ES对外调用的http端口,默认是9200 |
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"] | 在ES7.x版本已被移除,配置错误。写入候选主节点的设备地址,来开启服务时就可以被选为主节点。默认主机列表只有127.0.0.1和IPV6的本机回环地址。上面是书写格式,discover意思为发现,zen是判定集群成员的协议,unicast是单播的意思,ES5.0版本之后只支持单播的方式来进行集群间的通信,hosts为主机 |
discovery.zen.minimum_master_nodes: 2 | 在ES7.x版本已被移除,配置无效,为了避免脑裂,集群的最少节点数量为,集群的总节点数量除以2加一 |
discovery.zen.fd.ping_timeout: 120s | 在ES7.x版本已被移除,配置无效。探测超时时间,默认是3秒,我们这里填120秒是为了防止网络不好的时候ES集群发生脑裂现象 |
discovery.zen.fd.ping_retries: 6 | 在ES7.x版本已被移除,配置无效。探测次数,如果每次探测90秒,连续探测超过六次,则认为节点该节点已脱离集群,默认为3次 |
discovery.zen.fd.ping_interval: 15s | 在ES7.x版本已被移除,配置无效。节点每隔15秒向master发送一次心跳,证明自己和master还存活,默认为1秒太频繁 |
discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"] | ES7.x新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点,由discovery.zen.ping.unicast.hosts:参数改变而来 |
cluster.initial_master_nodes: ["127.0.0.1:9301","127.0.0.1:9302"] | ES7.x新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点 |
cluster.fault_detection.leader_check.interval: 15s | ES7.x新增参数,设置每个节点在选中的主节点的检查之间等待的时间。默认为1秒 |
discovery.cluster_formation_warning_timeout: 30s | ES7.x新增参数,启动后30秒内,如果集群未形成,那么将会记录一条警告信息,警告信息未master not fount开始,默认为10秒 |
cluster.join.timeout: 30s | ES7.x新增参数,节点发送请求加入集群后,在认为请求失败后,再次发送请求的等待时间,默认为60秒 |
cluster.publish.timeout: 90s | ES7.x新增参数,设置主节点等待每个集群状态完全更新后发布到所有节点的时间,默认为30秒 |
cluster.routing.allocation.cluster_concurrent_rebalance: 32 | 集群内同时启动的数据任务个数,默认是2个 |
cluster.routing.allocation.node_concurrent_recoveries: 32 | 添加或删除节点及负载均衡时并发恢复的线程个数,默认4个 |
cluster.routing.allocation.node_initial_primaries_recoveries: 32 | 初始化数据恢复时,并发恢复线程的个数,默认4个 |