1、环境
4台虚拟机,操作系统都是Centos7。每台虚拟机都装有docker
HostName | 虚拟主机IP | docker容器IP | 说明 |
---|---|---|---|
Server10 | 192.168.133.10 | 172.18.1.3 | consul服务1 |
Server20 | 192.168.133.20 | 172.18.2.3 | consul服务2 |
Server30 | 192.168.133.30 | 172.18.3.3 | consul服务3 |
Server40 | 192.168.133.40 | 172.18.4.3 | consul客户端1 |
注:
1、这里我修改了每个虚拟机的主机名。
hostnamectl set-hostname 主机名
2、开启IPv4转发
vim /etc/sysctl.conf
添加 net.ipv4.ip_forward=1。其他主机docker相应修改。
2、容器跨主机通讯
每台主机都需要配置,这里以Server10为例。
新建自定义网络
docker network create --subnet=172.18.1.0/24 docker-consul-br0
新建文件/etc/sysconfig/network-scripts/route-{网卡名}
vim /etc/sysconfig/network-scripts/route-ens33
添加路由 {网段}/24 via {网关} dev {网卡名}
#与Server20通讯
172.18.2.0/24 via 192.168.133.20 dev ens33
#与Server30通讯
172.18.3.0/24 via 192.168.133.30 dev ens33
#与Server40通讯
172.18.4.0/24 via 192.168.133.40 dev ens33
重启网络
service network restart
用 route -n 查看
其他主机同理
3、拉取镜像(这里是1.11.1版本)
docker pull consul
4、启动第一个Server
#第一个
docker run --name consul_server1 --net docker-consul-br0 --ip 172.18.1.3 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt":true}' -d -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:8600 --restart=always -v /data/consul/server1/data:/consul/data -v /data/consul/server1/config:/consul/config consul:latest agent -server -bootstrap-expect 3 -ui -bind=0.0.0.0 -client=0.0.0.0 -node=consul_server1_node -datacenter=datacenter0
说明:
1、-bootstrap-expect 3 :有3个node才会选举Leader
2、-node=consul_server1_node :节点名称(随便起)
3、-datacenter=datacenter1 :数据中心名称(随便起,但是要记住)
4、--net :设置网络
5、--ip :设置ip地址
5、启动第二个和第三个Server
#第二个
docker run --name consul_server2 --net docker-consul-br0 --ip 172.18.2.3 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt":true}' -d -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:8600 --restart=always -v /data/consul/server2/data:/consul/data -v /data/consul/server2/config:/consul/config consul:latest agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -node=consul_server2_node -datacenter=datacenter0 -join 172.18.1.3
#第三个
docker run --name consul_server3 --net docker-consul-br0 --ip 172.18.3.3 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt":true}' -d -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:8600 --restart=always -v /data/consul/server3/data:/consul/data -v /data/consul/server3/config:/consul/config consul:latest agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -node=consul_server3_node -datacenter=datacenter0 -join 172.18.1.3
说明:
1、后面启动的Server不需要-bootstrap-expect
2、-datacenter=datacenter0要和第一个节点一致
3、-join 172.18.1.3 是第一个节点的IP
6、在Server10中查看consul成员
docker exec -t consul_server1 consul members
docker exec -t consul_server1 consul operator raft list-peers
7、启动Client
docker run --name consul_client1 --net docker-consul-br0 --ip 172.18.4.3 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt":true}' -d -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:8600 --restart=always -v /data/consul/client0/data:/consul/data -v /data/consul/client0/config:/consul/config consul:latest agent -ui -bind=0.0.0.0 -client=0.0.0.0 -node=consul_client1_node -datacenter=datacenter0 -join 172.18.1.3
说明:
client节点不需要 -server