我一直在尝试使用这个可爱的ansible-elasticsearch项目来设置一个九节点的Elasticsearch集群。
每个节点都已启动并运行......但它们并未相互通信。主节点认为没有数据节点。数据节点未连接到主节点。
他们都有相同的cluster.name
。我已尝试启用多播(discovery.zen.ping.multicast.enabled: true
)并禁用(先前设置为false,discovery.zen.ping.unicast.hosts:["host1","host2",..."host9"]
),但在任何一种情况下节点都不通信。
他们之间有网络连接 - 通过端口9300通过telnet验证。
示例输出:
$ curl host1:9200/_cluster/health
{"error":{"root_cause":[{"type":"master_not_discovered_exception","reason":"waited for [30s]"}],"type":"master_not_discovered_exception","reason":"waited for [30s]"},"status":503}
我想不出他们为什么不能联系的更多理由 - 寻找更多关于尝试什么的想法。
编辑:我终于解决了这个问题。有效的设置为publish_host
到"_non_loopback:ipv4_"
,单播discovery.zen.ping.unicast.hosts
设置为["host1:9300","host2:9300","host3:9300"]
- 仅列出专用主节点。我的最小主节点数为2.
答案 0 :(得分:6)
我认为可能导致这种行为的唯一原因是:
连接问题 - Ping不是检查节点是否可以相互连接的好工具。使用telnet并尝试在端口9300上从host1连接到host2。
您的elasticsearch.yml
设置为绑定127.0.0.1
或错误的主机(如果您不确定,请绑定0.0.0.0以查看是否能解决您的连接问题,然后将其与#39;重要的是将其更改为仅绑定内部主机以避免将elasticsearch直接暴露给互联网。)
您的publish_host不正确 - 这通常发生在Docker容器中运行ES时,例如,您需要确保将publish_host设置为可以通过其他主机访问的地址。