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