【问题标题】:ES Docker container not joining another docker container having same cluster-nameES Docker 容器未加入另一个具有相同集群名称的 docker 容器
【发布时间】:2021-03-26 00:03:57
【问题描述】:

由于 ES 的 docker 容器,我面临一个奇怪的问题,我早些时候在 9200 主机端口(内部 docker 端口与标准 9200 和 9300 ES 端口相同)在 docker 容器中运行独立 ES 7.10,同时,我启动了三个 ES docker 容器(具有不同的次要版本 7)(它们应该形成集群,我们将其命名为 docker-es-cluster)。

这三个 ES docker 容器使用主机端口 9200、9201、9202,因此使用 9200 的集群中的 ES 容器由于端口冲突(ES 7.10)ES 容器而无法启动。

所以我停止了独立的 7.10 docker 容器并再次重新启动了 3 个集群 ES 容器,但现在我的其他 2 个正在监听 9201、9202 的 ES 容器没有启动,并且它们的日志包含以下警告:

{"type": "server", "timestamp": "2020-12-14T15:56:57,651+0000", “级别”:“警告”,“组件”:“o.e.c.c.ClusterFormationFailureHelper”, “cluster.name”:“docker-cluster”,“node.name”:“es2”,“message”: “master还没有发现,这个节点之前没有加入过 自举 (v7+) 集群,并且该节点必须发现 master-eligible nodes [] 来引导集群:hfrom hosts providers 和 [{es2}{eBtsR2XgRVWqPdUAP_n_Ew}{tZ9FRAbPTAmZZle_5MaVoA}{172.18.0.3}{172.18.0.3:9300}{dim}{ml.machine_memory=2084032512, xpack.installed=true, ml.max_open_jobs=20}] 来自最后一个已知集群 状态;节点术语 0,术语 0 中最后接受的版本 0" }

在此之后,我停止了所有 docker 容器,删除了所有 docker 镜像,做了 docker prune,系统重新启动,但没有解决问题,即使我从干净状态开始,似乎集群状态搞砸了对于 2 个 ES 容器,即使重新启动 docker 容器也没有得到修复。

我用于 ES 容器的 docker-compose 如下所示,我没有使用卷绑定

 es2:
    image: "docker.elastic.co/elasticsearch/elasticsearch:<es-version>"
    container_name: 2
    environment:
    - node.name=2
    - cluster.name=docker-cluster
    - cluster.initial_master_nodes=1,2,3
    - discovery.seed_hosts=1,3
    - ES_JAVA_OPTS=-Xms1g -Xmx1g
    ports:
    - "9201:9200"
    networks:
    - localenv

【问题讨论】:

    标签: docker elasticsearch docker-compose discovery


    【解决方案1】:

    elasticsearch 在新版本中(我认为是上面的 7.8),对于从集群中加入和分离节点有非常严格的规则。您不能轻易分离主节点甚至数据节点。 我推荐使用 elasticsearch-node 工具: https://www.elastic.co/guide/en/elasticsearch/reference/current/node-tool.html

    最简单的方法是在所有节点上使用以下命令:

    elasticsearch-node detach-cluster
    

    【讨论】:

    • 感谢您的回答,如何为已停止的 docker 容器运行它并且我的 docker 容器是短暂的?
    • @ElasticsearchNinja 你试过 docker exec 在容器中运行命令吗?
    • 你是对的关于短暂的。但集群状态保存在每个节点的数据路径中。
    • 是的,但是当我的 docker conatinar 停止时,我无法执行 docker exec 和另一个已启动的操作,我进入了该 docker conatiner,但是您提供的这个命令无法运行ES 正在运行
    【解决方案2】:

    我通过转到 docker-desktop 故障排除选项并执行清理/清除选项来解决此问题,如下面的屏幕截图所示。

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多