mac 下 docker 安装 es 集群,node2节点链接不上 master,这是为什么?

用 mac 本,使用 docker 在单机器中安装 es集群,只有一个节点加入了集群,其他两个节点都没有,尝试了很多办法都没有解决,google 和百度的答案均解决不了我的问题。
我的配置文件如下:
image.png

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 127.0.0.1
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: es-node1

使用的命令依次执行的:
第一个节点

docker run -e ES_JAVA_OPTS="-Xms340m -Xmx340m" --network estestnet -d -p 9201:9201 -p 9301:9301 -v /Users/v_liuxiaojian/Desktop/project/esCluster/es1/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /Users/v_liuxiaojian/Desktop/project/esCluster/es1/data1:/usr/share/elasticsearch/data --name es1 b0e9f9f047e6

第二个节点

docker run -e ES_JAVA_OPTS="-Xms340m -Xmx340m" --network estestnet -d -p 9202:9202 -p 9302:9302 -v /Users/v_liuxiaojian/Desktop/project/esCluster/es2/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /Users/v_liuxiaojian/Desktop/project/esCluster/es2/data1:/usr/share/elasticsearch/data --name es2 b0e9f9f047e6

第三个节点

docker run -e ES_JAVA_OPTS="-Xms340m -Xmx340m" --network estestnet -d -p 9203:9203 -p 9303:9303 -v /Users/v_liuxiaojian/Desktop/project/esCluster/es3/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /Users/v_liuxiaojian/Desktop/project/esCluster/es3/data1:/usr/share/elasticsearch/data --name es3 b0e9f9f047e6

创建完成后重启

docker restart es1 es2 es3

访问之后,只有一个节点

image.png

image.png

查看 docker 日志发现:

docker logs -f es2

{"type": "server", "timestamp": "2022-12-29T09:59:26,424+0000", "level": "WARN", "component": "o.e.c.c.ClusterFormationFailureHelper", "cluster.name": "elasticsearch-cluster", "node.name": "es-node2",  "message": "master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [es-node1] to bootstrap a cluster: have discovered []; discovery will continue using [127.0.0.1:9301, 127.0.0.1:9303] from hosts providers and [{es-node2}{Xe_kGfwwRaCWf1WDoTPdtw}{xxa6ahWHTXGhO6prYnlERg}{127.0.0.1}{127.0.0.1:9302}{ml.machine_memory=4125892608, xpack.installed=true, ml.max_open_jobs=20}] from last-known cluster state; node term 0, last-accepted version 0 in term 0"  }

容器内是可以互相 ping 通的,这个是什么原因呢?

es 的版本为:

image.png

阅读 2.5k
1 个回答

network.publish_host: 127.0.0.1 ,这里改成宿主机的IP试试。(还有discovery.zen.ping.unicast.hosts)

因为在容器里面,不能通过127.0.0.1访问到其他的容器监听的9301/9302/9303。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题