背景:
在 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-clusternode.name: es-node1network.bind_host: 0.0.0.0# 切记 docker 容器中不能通过127.0.0.1 进行通信,须要改成本人电脑本机的 ip# 本机本人的 ip 下方的 discovery.zen.ping.unicast.hosts保持一致network.publish_host: 172.25.168.63http.port: 9200transport.tcp.port: 9300http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: truediscovery.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-clusternode.name: es-node2network.bind_host: 0.0.0.0# 本机本人的 ip 下方的 discovery.zen.ping.unicast.hosts保持一致network.publish_host: 172.25.168.63http.port: 9201transport.tcp.port: 9301http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: truediscovery.zen.ping.unicast.hosts: ["172.25.168.63:9300","172.25.168.63:9301","172.25.168.63:9302"]discovery.zen.minimum_master_nodes: 2cluster.initial_master_nodes: es-node1
Node3 节点 es3.yml
cluster.name: elasticsearch-clusternode.name: es-node3network.bind_host: 0.0.0.0# 本机本人的 ip 下方的 discovery.zen.ping.unicast.hosts保持一致network.publish_host: 172.25.168.63http.port: 9202transport.tcp.port: 9302http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: truediscovery.zen.ping.unicast.hosts: ["172.25.168.63:9300", "172.25.168.63:9301", "172.25.168.63:9302"]discovery.zen.minimum_master_nodes: 2cluster.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