【问题标题】:Dockerized Elasticsearch cluster in AWS - each node elects itselfAWS 中的 Dockerized Elasticsearch 集群 - 每个节点自行选举
【发布时间】: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


    【解决方案1】:

    最终这就是我找到的解决方案。

    由于 AWS 是主要(“生产”)环境,因此主要配置面向它:

    1. 在 elasticsearch.yml 中设置 - network.host: _ec2_
    2. 设置为命令行参数 - elasticsearch -Des.network.bind_host=0.0.0.0

    在这种情况下,发现进展顺利,节点绑定到任何网络接口(没有它就无法启动,因为 _ec2_ IP 与 EC2 主机网络相关,而不是与 docker 的网络相关)

    要使其在本地环境(vagrant)中也能运行,命令行应覆盖 network.host 参数,因此设置为:elasticsearch -Des.network.bind_host=0.0.0.0 -Des.network.host=0.0.0.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2018-10-29
      • 2019-12-13
      • 1970-01-01
      • 2023-03-13
      • 2019-07-26
      相关资源
      最近更新 更多