mac下,使用 docker 搭建,单机机器集群

背景:
在 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 命令执行

  1. 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
  2. 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
  3. 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

作者:想飞的鱼呀原文地址:https://segmentfault.com/a/1190000043203211

%s 个评论

要回复文章请先登录注册