用Docker 搭建基於多數據中心的Consul集羣

docker 拉取 consul 鏡像

docker pull consul

一般是拉去最新的鏡像文件

先建立 /data/consul 文件夾, 用於保存 consul 的數據,這對所有代理都是必需的。該目錄在重新啓動時應該是持久的。這對於在服務器模式下運行的代理尤其重要,因爲它們必須能夠保持羣集狀態。此外,該目錄必須支持使用文件系統鎖定,這意味着某些類型的已裝入文件夾(例如VirtualBox共享文件夾)可能不合適。注意:服務器和非服務器代理都可以在此目錄中的狀態下存儲ACL令牌,因此讀取訪問權限可以授予對服務器上的任何令牌的訪問權限,並允許訪問非服務器上的服務註冊期間使用的任何令牌。在基於Unix的平臺上,這些文件使用0600權限編寫,因此您應確保只有受信任的進程可以與Consul一樣的用戶身份執行。在Windows上,您應確保該目錄具有適當的權限配置,因爲這些權限將被繼承。

mkdir -p /data/consul

使用 docker run 啓動 server

docker run -d -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul1 consul agent -server -bootstrap -ui -client='0.0.0.0'

顯示啓動成功

 

一般第一個容器的ip地址是 172.17.0.2,可以通過下面的命令查詢容器ip:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul1

agent: 表示啓動 agent 進程

server: 表示 consul 爲 server 模式

client: 表示 consul 爲 client 模式

bootstrap: 表示這個節點是 Server-Leader

ui: 啓動 Web UI, 默認端口 8500

node: 指定節點名稱, 集羣中節點名稱唯一

client: 綁定客戶端接口地址, 0.0.0.0 表示所有地址都可以訪問

由於筆者已經有其他docker實例,所以ip不是172.17.0.2。

往集羣插入其他節點,join: 表示加入到指定集羣中(一個數據中心 Consul 一般建議 3~5 個 Server 節點)

docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2;
docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 172.17.0.2;
docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=false --client=0.0.0.0 --join 172.17.0.2;

 

 

查看集羣下面的節點

docker exec -it consul1 consul members

至此 consul 的部署已經完成。

上述只搭建了dc1,下面開始搭建dc2,並將dc1和dc2關聯起來

docker run -d --name=consul5 -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -bootstrap-expect 3 -datacenter=dc2

再查看下dc2的容器ip

docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul5

 

由於筆者已經有其他docker實例,所以ip不是172.17.0.9。

 

往dc2添加節點(一個數據中心 Consul 一般建議 3~5 個 Server 節點)

docker run -d --name=consul6 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.9;
docker run -d --name=consul7 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=true --client=0.0.0.0 --join 172.17.0.9;
docker run -d --name=consul8 -e CONSUL_BIND_INTERFACE=eth0 consul agent --datacenter=dc2 --server=false --client=0.0.0.0 --join 172.17.0.9;

以下顯示添加成功

關聯dc1和dc2

docker exec -it consul6 consul join -wan 172.17.0.5 

以下顯示關聯成功

接下來我們查看一下數據中心 dc2 的節點:

至此搭建完成,在瀏覽器中訪問 http://127.0.0.1:8500 地址,即可看到所有的服務和節點,還可以通過切換數據中心查看其下的服務和節點,點擊每個節點可以進一步查看具體節點的健康狀況、運行的服務以及響應時間等信息。

常用命令


列出數據中心
docker exec consul5 consul catalog datacenters

列出節點
docker exec consul5 consul catalog nodes


可以將 consul5 換成其他節點名稱,該命令會列出指定節點所在數據中心的所有節點。

 移除節點
docker exec consul7  consul operator raft remove-peer -id=172.17.0.9:8301

 

查詢羣集中所有的 LAN 和 WAN 的 Server 節點
docker exec consul5 consul members -wan


其中 `consul5`` 可以換成關聯數據中心中的其他任意節點名稱

 查看集羣狀態
docker exec consul5 consul operator raft list-peers


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章