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 选项解决了这个问题,如下面的屏幕截图所示。
由于 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 选项解决了这个问题,如下面的屏幕截图所示。