用 mac 本,使用 docker 在单机器中安装 es集群,只有一个节点加入了集群,其他两个节点都没有,尝试了很多办法都没有解决,google 和百度的答案均解决不了我的问题。
我的配置文件如下:
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
访问之后,只有一个节点
查看 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 的版本为:
network.publish_host: 127.0.0.1 ,这里改成宿主机的IP试试。(还有discovery.zen.ping.unicast.hosts)
因为在容器里面,不能通过127.0.0.1访问到其他的容器监听的9301/9302/9303。