背景:
在 Mac 本下,通过 docker 实现一个 es 集群(3 台 - 或者可多台)搭建。(后续如果有实在的机器,只须要又该对应的 ip 地址即可,须要关注的是,机器间是能够相互 ping 通的,并且 iptable 是放开的端口)
具体步骤:
首先创立一个新的 docker 网络
docker network create -d bridge estestnet
查看创立以后的网络是否创立胜利,能够看到下图是创立胜利的,
docker network list
设置三个 es.yml, 通过文件资源共享,es 执行的时候会主动调用。
Node1 节点 es1.yml
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
# 切记 docker 容器中不能通过 127.0.0.1 进行通信,须要改成本人电脑本机的 ip
# 本机本人的 ip 下方的 discovery.zen.ping.unicast.hosts 保持一致
network.publish_host: 172.25.168.63
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.25.168.63:9300","172.25.168.63:9301","172.25.168.63:9302"]
discovery.zen.minimum_master_nodes: 2
# 初始化执行时,默认执行的节点
cluster.initial_master_nodes: es-node1
Node2 节点 es2.yml
cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
# 本机本人的 ip 下方的 discovery.zen.ping.unicast.hosts 保持一致
network.publish_host: 172.25.168.63
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: ["172.25.168.63:9300","172.25.168.63:9301","172.25.168.63:9302"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: es-node1
Node3 节点 es3.yml
cluster.name: elasticsearch-cluster
node.name: es-node3
network.bind_host: 0.0.0.0
# 本机本人的 ip 下方的 discovery.zen.ping.unicast.hosts 保持一致
network.publish_host: 172.25.168.63
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.25.168.63:9300", "172.25.168.63:9301", "172.25.168.63:9302"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: es-node1
docker 命令执行
- docker run -e ES_JAVA_OPTS=”-Xms340m -Xmx340m” –network estestnet -d -p 9200:9200 -p 9300:9300 -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 9201:9201 -p 9301:9301 -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 9202:9202 -p 9302:9302 -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 命令重点介绍
-e ES_JAVA_OPTS="-Xms340m -Xmx340m" 单台容器下的内存
--network estestnet 指定的同一个网络,不然容器内可能无奈失常通信导致集群搭建失败
-p 9202:9202 -p 9302:9302 对外提供的多个端口 后面那个 9203 是对外提供的端口 前面这个 9202 是容器内的端口
-v /Users/v_liuxiaojian/Desktop/project/esCluster/es3/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml
/Users/v_liuxiaojian/Desktop/project/esCluster/es3/es3.yml 本人本机的 yml 配置文件
/usr/share/elasticsearch/config/elasticsearch.yml 对应容器的配置文件
-v /Users/v_liuxiaojian/Desktop/project/esCluster/es3/data1:/usr/share/elasticsearch/data
/Users/v_liuxiaojian/Desktop/project/esCluster/es3/data1 存储的数据卷文件
/usr/share/elasticsearch/data 容器内保留的文件
--name es3 以后容器的名字
b0e9f9f047e6 镜像文件的别名 docker images
顺次执行结束后,docker restart es1 es2 es3 重启三台 es 集群文件, 重启之后别着急拜访,es 相对来说还是比拟大的,所以给他一点工夫 5 分钟左右。
拜访 http://127.0.0.1:9200/_cat/no… 如下图表名集群搭建胜利
拜访单台机器:http://127.0.0.1:9200/
Todo: 如果呈现问题了,能够通过 docker logs -f 容器名称查看日志 在我这里是 docker logs -f es2