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重启策略
集群来了~ 准备三台机器
一、准备服务器
client1 |
10.1.1.10 |
server1 | 10.1.1.10 |
client2 | 10.1.1.11 |
server2 | 10.1.1.11 |
server3 | 10.1.1.12 |
二、准备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: 转载请@本文章