CentOS7下Elasticsearch集群搭建失败:节点无法互相发现求助
解决CentOS7上Elasticsearch集群节点无法互相发现的问题
看起来你已经完成了基础配置,但节点间无法发现的问题主要出在发现配置、网络绑定和防火墙端口这几个地方,下面一步步帮你排查解决:
一、修正elasticsearch.yml核心配置
你的配置里有几个关键项没正确设置,这是节点无法发现的主要原因:
1. 调整传输地址(transport.host)
你当前设置了transport.host: localhost,这会导致节点只监听本地回环地址,其他节点根本无法连接到这个节点的集群通信端口(默认9300)。每个节点都要改成自己的实际IP:
# Centos1节点 transport.host: 192.168.0.120 # 另一个节点改成它的IP,比如192.168.0.243 transport.host: 192.168.0.243
2. 启用单播发现列表
取消注释discovery.zen.ping.unicast.hosts,把所有集群节点的IP都加进去,这样节点启动时会主动尝试连接列表里的节点:
discovery.zen.ping.unicast.hosts: ["192.168.0.120", "192.168.0.243"]
3. 配置最小主节点数(防止脑裂)
取消注释discovery.zen.minimum_master_nodes,根据你的节点数设置:
- 如果是2个节点,建议设为
2(虽然单个节点故障会导致集群不可用,但能避免网络分区时的脑裂问题;如果要容错,最好扩容到3个节点) - 如果是3个节点,设为
2
discovery.zen.minimum_master_nodes: 2
二、开放防火墙端口
Elasticsearch需要两个关键端口:
- 9200:HTTP API端口
- 9300:节点间集群通信端口
执行以下命令开放端口并生效:
firewall-cmd --add-port=9200/tcp --permanent firewall-cmd --add-port=9300/tcp --permanent firewall-cmd --reload
你提供的firewalld日志是IPv6 ICMP类型的警告,这和集群发现无关,可以忽略。
三、额外检查项
如果以上配置修改后还是无法发现,再检查这些点:
- 节点连通性:在每个节点上ping对方的IP,确保网络是通的
- ES版本一致性:所有集群节点的Elasticsearch版本必须完全一致,否则无法组成集群
- 系统参数设置:CentOS7需要调整虚拟内存参数,执行:
并把sysctl -w vm.max_map_count=262144vm.max_map_count=262144写入/etc/sysctl.conf,确保重启后生效 - 权限问题:不要用root用户运行Elasticsearch,确保
path.data和path.logs目录的所有者是elasticsearch用户
修改完配置后,重启每个节点的Elasticsearch服务,然后用curl http://192.168.0.120:9200/_cat/nodes?v查看节点列表,应该能看到所有集群节点了。
内容的提问来源于stack exchange,提问作者張皓翔
相关产品推荐
相关产品推荐

