這篇文章介紹使用官方鏡像構建Consul集羣的方式。
啓動Consul服務
使用如下命令,使用Consul官方鏡像以開發模式啓動Consul服務,將Consul web UI端口映射出來給用戶提供訪問。
執行命令:docker run -d --name=agent1 -p 8500:8500 consul:1.7.1 agent -dev -client=0.0.0.0 -bind=0.0.0.0
執行日誌如下所示:
liumiaocn:~ liumiao$ docker run -d --name=agent1 -p 8500:8500 consul:1.7.1 agent -dev -client=0.0.0.0 -bind=0.0.0.0
bed6136ca254a22ffa6cab24b7db6b30c0bbb209525f503b9c4e665657fd94f3
liumiaocn:~ liumiao$ docker ps |grep consul
bed6136ca254 consul:1.7.1 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8500->8500/tcp agent1
liumiaocn:~ liumiao$
- 查看集羣成員狀態
liumiaocn:~ liumiao$ docker exec -t agent1 consul members
Node Address Status Type Build Protocol DC Segment
bed6136ca254 172.17.0.3:8301 alive server 1.7.1 2 dc1 <all>
liumiaocn:~ liumiao$
獲取Consul容器的IP
使用如下命令獲取新啓動的Consul容器的IP:
執行命令:docker inspect --format ‘{{ .NetworkSettings.IPAddress }}’ agent1
執行命令可以看到IP爲172.17.0.3
liumiaocn:~ liumiao$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' agent1
172.17.0.3
liumiaocn:~ liumiao$
加入新的節點:agent2
使用如下命令將新的Consul節點加入到Consul集羣中。
執行命令:docker run -d --name agent2 consul agent -dev -bind=0.0.0.0 -join=172.17.0.3
執行日誌信息如下所示:
liumiaocn:~ liumiao$ docker run -d --name agent2 consul agent -dev -bind=0.0.0.0 -join=172.17.0.3
c40fc4bcf34ded511e8055e075ac82480890dc5d652dcd37d513211dcb937716
liumiaocn:~ liumiao$
當然也可以使用docker logs agent1/agent2來確認啓動日誌信息。登錄任意一臺集羣的節點均可確認成員信息
liumiaocn:~ liumiao$ docker exec -t agent1 consul members
Node Address Status Type Build Protocol DC Segment
bed6136ca254 172.17.0.3:8301 alive server 1.7.1 2 dc1 <all>
c40fc4bcf34d 172.17.0.4:8301 alive server 1.7.1 2 dc1 <all>
liumiaocn:~ liumiao$
liumiaocn:~ liumiao$ docker exec -t agent2 consul members
Node Address Status Type Build Protocol DC Segment
bed6136ca254 172.17.0.3:8301 alive server 1.7.1 2 dc1 <all>
c40fc4bcf34d 172.17.0.4:8301 alive server 1.7.1 2 dc1 <all>
liumiaocn:~ liumiao$
當然也可以從web UI上進行節點信息的確認
加入新的節點:agent3
使用如下命令將新的Consul節點加入到Consul集羣中。
執行命令:docker run -d --name agent3 consul agent -dev -bind=0.0.0.0 -join=172.17.0.3
執行日誌信息如下所示:
liumiaocn:~ liumiao$ docker run -d --name agent3 consul agent -dev -bind=0.0.0.0 -join=172.17.0.3
e487800cf9c2c8889c9a9fcb808bbac9b31322a22676ffca4df464743ec0c203
liumiaocn:~ liumiao$
當然也可以使用docker logs agent3來確認啓動日誌信息。登錄任意一臺集羣的節點均可確認成員信息
liumiaocn:~ liumiao$ docker exec -t agent1 consul members
Node Address Status Type Build Protocol DC Segment
bed6136ca254 172.17.0.3:8301 alive server 1.7.1 2 dc1 <all>
c40fc4bcf34d 172.17.0.4:8301 alive server 1.7.1 2 dc1 <all>
e487800cf9c2 172.17.0.5:8301 alive server 1.7.1 2 dc1 <all>
liumiaocn:~ liumiao$
liumiaocn:~ liumiao$ docker exec -t agent3 consul members
Node Address Status Type Build Protocol DC Segment
bed6136ca254 172.17.0.3:8301 alive server 1.7.1 2 dc1 <all>
c40fc4bcf34d 172.17.0.4:8301 alive server 1.7.1 2 dc1 <all>
e487800cf9c2 172.17.0.5:8301 alive server 1.7.1 2 dc1 <all>
liumiaocn:~ liumiao$
當然也可以從web UI上進行節點信息的確認(注意在本文示例中此時Leader已經變了)
節點異常
節點在實際使用的過程中可能會發生問題,比如這裏我們將身爲Leader的172.17.0.4這個容器停止,再來確認會發生什麼,首先停止agent2容器
liumiaocn:~ liumiao$ docker stop agent2
agent2
liumiaocn:~ liumiao$
此時再確認Consul集羣節點的狀態,可以看到此節點的狀態爲failed
liumiaocn:~ liumiao$ docker exec -t agent1 consul members
Node Address Status Type Build Protocol DC Segment
bed6136ca254 172.17.0.3:8301 alive server 1.7.1 2 dc1 <all>
c40fc4bcf34d 172.17.0.4:8301 failed server 1.7.1 2 dc1 <all>
e487800cf9c2 172.17.0.5:8301 alive server 1.7.1 2 dc1 <all>
liumiaocn:~ liumiao$
稍等片刻狀態則變爲left,當然使用docker logs能看到更加具體的日誌信息。
liumiaocn:~ liumiao$ docker exec -t agent1 consul members
Node Address Status Type Build Protocol DC Segment
bed6136ca254 172.17.0.3:8301 alive server 1.7.1 2 dc1 <all>
c40fc4bcf34d 172.17.0.4:8301 left server 1.7.1 2 dc1 <all>
e487800cf9c2 172.17.0.5:8301 alive server 1.7.1 2 dc1 <all>
liumiaocn:~ liumiao$
當然此時也可以通過web UI來確認當前Consul集羣的各節點的狀態,詳細如下圖所示