【发布时间】:2023-04-01 05:01:01
【问题描述】:
我在 3 个 AWS 主机上的 docker 容器内运行 3 节点 Elasticsearch 2.1 集群。 Elasticsearch.yml 除了一些其他内容之外还包含以下内容:
network.host: 0.0.0.0
discovery.type: "ec2"
discovery.ec2.ping_timeout: "30s"
discovery.zen.ping.multicast.enabled: false
cloud.aws.access_key: ...
cloud.aws.secret_key: ...
cloud.aws.region: ...
在命令行中我有:
-Des.network.bind_host=0.0.0.0 -Des.cluster.name=XXX -Des.node.name=XXX-1 (up to -XXX-3)
数据存储在节点启动时动态挂载的 EBS 卷上; AWS 云插件已安装。
一切正常,包括重新启动和更新,直到整个系统出现一般网络问题。不知道那里发生了什么。 之后,每个节点启动,声称它在 XXX 集群中运行,但声明自己是主节点:
[cluster.service] [XXX-3] new_master {XXX-3}{5oQHbq_KS8-JrIuFfTTBdw}{192.168.AAA.BB}{192.168.CCC.DD:9300}, 原因:zen-disco-join(elected_as_master, [0] 加入接收)" }
我通过在其中一台主机上设置network.host: _ec2_ 成功解决了这个问题。启动时,该主机成功连接到其中一个正在运行的实例,并且只有在此之后,即使使用network.host: 0.0.0.0,第三个节点也成功连接到集群。现在它又可以正常运行了。
我试图了解为什么会出现这个问题 - 在 AWS 中使用 0.0.0.0 是否合法?仅将一个节点 network.host 更改为_ec2_ 后如何再次工作。
另一点是我想在本地环境(vagrant)中使用相同的命令行和相同的服务,但在这种情况下我不能使用 ec2。
提前致谢
【问题讨论】:
标签: amazon-web-services elasticsearch