ES Docker 容器没有加入另一个具有相同集群名称的 docker 容器

ES Docker container not joining another docker container having same cluster-name

由于 ES 的 docker 容器,我遇到了一个奇怪的问题,我在 9200 主机端口(内部 docker 端口与标准 9200 和 9300 ES 端口相同),同时,我启动了三个 ES docker 容器(具有不同的次要版本 7)(它们应该形成集群让我们命名它 docker-es-簇).

这三个 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", "level": "WARN", "component": "o.e.c.c.ClusterFormationFailureHelper", "cluster.name": "docker-cluster", "node.name": "es2", "message": "master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [] to bootstrap a cluster: hfrom hosts providers and [{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}] from last-known cluster state; node term 0, last-accepted version 0 in term 0" }

在此之后,我停止了所有 docker 容器,删除了所有 docker 图像,做了 docker 修剪,系统重新启动但没有解决问题,即使我从干净的状态,似乎集群状态对于 2 个 ES 容器来说是混乱的,即使在重新启动 docker 容器后它也没有得到修复。

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

 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

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

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

elasticsearch-node detach-cluster

我通过转到 docker-桌面故障排除选项并执行 clean/purge 选项解决了这个问题,如下面的屏幕截图所示。