AWS EC2实例上无法组建Elasticsearch 7集群问题求助
我在两台AWS EC2实例上部署Elasticsearch 7并尝试组建集群,但一直失败,两台节点的日志里都出现了主节点未发现的警告。下面是我的节点配置和报错日志,求帮忙排查:
节点配置信息
机器10.0.66.123(uat-es-1)配置
cluster.name: uat-es-cluster node.name: uat-es-1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 10.0.66.123 discovery.seed_hosts: ["10.0.66.106", "10.0.66.123"] cluster.initial_master_nodes: ["10.0.66.106", "10.0.66.123"] node.master: true
机器10.0.66.106(uat-es-2)配置
cluster.name: uat-es-cluster node.name: uat-es-2 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 10.0.66.106 discovery.seed_hosts: ["10.0.66.123", "10.0.66.106"] cluster.initial_master_nodes: ["10.0.66.106", "10.0.66.123"] node.master: true
报错日志信息
两台节点都输出了类似如下的警告日志:
[2019-12-30T10:17:19,037][WARN ][o.e.c.c.ClusterFormationFailureHelper] [uat-es-2] 主节点尚未发现,此节点此前未加入过已引导(v7+)集群,该节点必须发现符合主节点条件的节点[10.0.66.106, 10.0.66.123]才能引导集群:已发现[{uat-es-2}{DBRJq4uZSJycu7L6vcmZHw}{9k4Ux2veQFiYZcrnHZmFtg}{10.0.66.106}{10.0.66.106:9300}{dilm}{ml.machine_memory=4074115072, xpack.installed=true, ml.max_open_jobs=20}];发现操作将继续使用来自主机提供者的[10.0.66.123:9300]和来自已知集群状态的[{uat-es-2}{DBRJq4uZSJycu7L6vcmZHw}{9k4Ux2veQFiYZcrnHZmFtg}{10.0.66.106}{10.0.66.106:9300}{dilm}{ml.machine_memory=4074115072, xpack.installed=true, ml.max_open_jobs=20}];节点任期0,任期0内最后接受版本0的内容
排查与解决建议
根据你的配置和日志,我整理了几个常见的排查方向:
优先检查网络连通性:
Elasticsearch集群节点间通过9300端口通信,首先要确认两台EC2实例的安全组规则是否允许互相访问9300端口(入站和出站都要放开)。另外可以在每个节点上用telnet 对方IP 9300或者nc -zv 对方IP 9300命令测试端口是否能连通,如果不通,先解决网络问题。核对
cluster.initial_master_nodes配置:
在Elasticsearch 7.x中,这个参数的值需要和集群中所有候选主节点的node.name或者IP一致(建议用node.name更可靠)。你现在用的是IP,要确保两台节点的这个参数完全相同,并且每个节点都能正确解析这些IP。检查节点权限与运行状态:
确认Elasticsearch进程对path.data和path.logs目录有读写权限,避免因为权限问题导致节点无法正常启动或存储集群状态。另外可以用curl http://本机IP:9200/_cat/nodes?v命令查看单个节点的运行状态,确认节点是否正常启动。关闭本地防火墙(临时测试):
如果EC2实例上开启了iptables或者firewalld,可以临时关闭它们,测试是否是本地防火墙阻挡了节点间的通信。检查主机名解析:
确保两台节点能互相解析对方的主机名(如果用主机名配置的话),不过你现在用的是IP,这一步可以暂时跳过,但如果IP没问题还是不行,可以尝试在/etc/hosts中添加对方IP和主机名的映射。
内容的提问来源于stack exchange,提问作者dnsh

