docker compose跨主机部署consul集群/单机
简单明了 直接开干 。 原理百度下

#此次部署 双客户端 三服务端
一、确定服务器信息 有无相关端口冲突 。docker服务是否存在
netstat -nltp |grep -E "8300|8301|8302|8500|8600"
- 8300:集群内数据的读写和复制
- 8301:单个数据中心gossip协议通讯
- 8302:跨数据中心gossip协议通讯
- 8500:提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务
- 8600:采用DNS协议提供服务发现功能
systemctl status docker
二、测试单机是否能用
vim consul-single.yml
version: '3.1'
services:
consul:
image: consul:1.9.4
container_name: "consul"
restart: always
ports:
- "8500:8500"
volumes:
- /data/docker-compose/consul:/consul/data
command: [agent,-server,-ui,-client=0.0.0.0,-bootstrap-expect=1]
单机部署结束 #以上命令解释
- volumes 把存储数据路径挂载出来。
- command 创建容器启动命令 。
- restart重启策略
集群来了~ 准备三台机器
一、准备服务器
二、准备client配置文件 每一行都有备注 不多解释了
vim client.json
{
"datacenter": "dgx", //平台名称
"log_level": "INFO",
"node_name": "c1", //节点名称,不可冲突
"server": false, //是server端 还是client端
"bind_addr": "10.1.1.10", //本机ip
"client_addr": "10.1.1.10", //本机ip
"ports": { //本节点开通得端口信息 因为会跟server冲突 所以改了client原有端口
"dns": 8608,
"http": 8508,
"server": 8305,
"serf_lan": 8303,
"serf_wan": 8304
},
"rejoin_after_leave": true,
"retry_join": [ //集群节点信息 指定server的ip
"10.1.1.10:8301",
"10.1.1.11:8301",
"10.1.1.12:8301"
],
"retry_interval": "30s",
"reconnect_timeout": "72h"
}
创建第二台的client 直接复制 。修改node_name 节点名字 和本机IP即可
三、准备三台server的配置文件
vim server.json
{
"datacenter": "dgx", //平台名称
"log_level": "INFO",
"node_name": "s1", //节点名称,不可冲突
"node_id": "ce0a4143-2f3e-41c9-b981-1c436b6089e0", //uuid不可冲突
"server": true, //是server端 还是client端
"bootstrap_expect": 3, //几个节点后启动集群
"bind_addr": "10.1.1.10", //本机ip 这不改会报错
"client_addr": "0.0.0.0",
"ports": { //本节点端口信息
"dns": 8600,
"http": 8500,
"https": -1,
"server": 8300,
"serf_lan": 8301,
"serf_wan": 8302
},
"rejoin_after_leave": true,
"retry_join": [ //集群节点信息
"10.1.1.10",
"10.1.1.11",
"10.1.1.12"
],
"retry_interval": "30s",
"reconnect_timeout": "72h"
}
其余两台一致 , 修改node_name集群名字 和本机IP即可
四、准备docker-compose文件
vim consul-many.yml
version: '3.2'
services:
consul-server:
image: consul:1.9.4
restart: "always"
network_mode: "host"
container_name: "consul_s1"
environment:
CONSUL_BIND_INTERFACE: eth0
volumes:
- "./server.json:/consul/config/config.json"
- "./consul/server_data:/consul/data"
command: [agent,-data-dir,/consul/data,-config-dir,/consul/config]
consul-client:
image: consul:1.9.4
restart: "always"
network_mode: "host"
container_name: "consul_c1"
volumes:
- "./client.json:/consul/config/client_config.json"
- "./consul/client_data:/consul/data"
command: [agent,-data-dir,/consul/data,-config-dir,/consul/config]
yml解析:
- server和client 用的都是host网络模式。 因为client端修改了端口 所以不会冲突。
- volumes:挂载两个地方 ,一个刚写的配置文件 ,一个数据存储路径
- server端 需要指定eth0 本机网卡名, 根据自己网卡名字修改
- container_name:不可冲突 容器名字 。 自己s1 s2 s3 c1 c2 改就好了
- 因为就两台client节点。 在第三台机器 把下面删掉就好
五、启动
docker-compose -f consul-many.yml up -d
六、检查
netstat -nltp |grep -E "83|83|83|85|86"
浏览器打开 本机ip:8500
七、谢谢观看 本次部署本人查好几天 一个个测试的。 容器无任何报错内容 。剩下的端口交给开发 让开发用就好拉~
ps: 转载请@本文章


浙公网安备 33010602011771号