1. Consul簡介
Consul 是一個支持多數據中心分布式高可用的服務發現和配置共享的服務軟件,由 HashiCorp 公司用 Go 語言開發,基於 Mozilla Public License 2.0 的協議進行開源。Consul 支持健康檢查,並允許 HTTP 和 DNS 協議調用 API 存儲鍵值對。
命令行非常好用的虛擬機管理軟件 vgrant 也是 HashiCorp 公司開發的產品。
一致性協議采用 Raft 算法,用來保證服務的高可用。使用 GOSSIP 協議管理成員和廣播消息, 並且支持 ACL 訪問控制。
官網:https://www.consul.io/
2. Windows安裝
- 下載安裝包
Download Consul - 解壓
- 配置環境變量
將解壓后consul.exe所在的目錄添加到環境變量Path中(不包含consul.exe,例如:d:\consul)。 - 運行CMD
#查看環境變量是否添加成功
consul
#啟動
consul agent -dev
#瀏覽器訪問
http://localhost:8500
#查看成員
consul members
#查看成員及元數據
consul members -detailed
#查看節點
curl localhost:8500/v1/catalog/nodes
至此,Windows單機安裝Consul已經完成。
3. Docker部署Consul集群
- 安裝Docker
Docker 安裝並部署Tomcat、Mysql8、Redis - 拉取鏡像,並單機部署
查看DockerHub中Consul的lastest的具體版本:Docker Hub Consul
#拉取鏡像(若指定具體版本,執行docker pull consul:1.6.2)
docker pull consul
#查看鏡像
docker images
#運行
#agent : 表示啟動 Agent 進程
#-server:表示啟動 Consul Server 模式
#-client:表示啟動 Consul Cilent 模式
#-bootstrap:表示這個節點是 Server-Leader ,每個數據中心只能運行一台服務器。技術角度上講 Leader 是通過 Raft 算法選舉的,但是集群第一次啟動時需要一個引導 Leader,在引導群集后,建議不要使用此標志
#-ui:表示啟動 Web UI 管理器,默認開放端口 8500,所以使用 Docker -p命令對外開放 8500 端口
#-node:節點的名稱,集群中必須是唯一的
#-client:表示 Consul 將綁定客戶端接口的地址,0.0.0.0 表示所有地址都可以訪問
#-join:表示加入到某一個集群中去, 如:-json=192.168.1.100
docker run --name=consul-server-1 --privileged=true -p 8500:8500 -v /usr/local/consul/data:/consul/data -e CONSUL_BIND_INTERFACE=eth0 -d consul:1.6.2 agent -server -client=0.0.0.0 -bootstrap -ui -node=1
#若出現iptables: No chain/target/match by that name,是因為docker network沒有權限對container進行網絡配置,有兩中解決辦法
#方法一:關閉網關
systemctl stop firewalld
systemctl stop iptables
#方法二:重啟docker
service docker restart
#查看容器信息
docker ps -a
#刪除剛才創建的容器
docker rm -f [CONTAINER ID]
#重新執行
docker run --name=consul-server-1 --privileged=true -p 8500:8500 -v /usr/local/consul/data:/consul/data -e CONSUL_BIND_INTERFACE=eth0 -d consul:1.6.2 agent -server -client=0.0.0.0 -bootstrap -ui -node=1
#查看Consul容器運行狀態,若為Up狀態,則證明部署成功
docker ps -a
#瀏覽器訪問
http://[ip]:8500
#查看成員(記錄Address,集群部署時需要)
docker exec consul-server-1 consul members
#查看節點信息
curl http://[ip]:8500/v1/catalog/nodes
- 集群部署
Server 模式在集群中建議是三個以上,這樣更好的避免因為 Server 宕機導致整個集群掛掉的風險。
在上邊單機部署上添加兩個Server節點到Consul集群中。
#查看成員(記錄Address)
docker exec consul-server-1 consul members
#添加兩個Server節點,名稱為-node=2,-node=3
docker run --name=consul-server-2 -e CONSUL_BIND_INTERFACE=eth0 -d consul:1.6.2 agent -server -node=2 -join='172.17.0.3'
docker run --name=consul-server-3 -e CONSUL_BIND_INTERFACE=eth0 -d consul:1.6.2 agent -server -node=3 -join='172.17.0.3'
#查看Consul三個容器運行狀態,若為Up狀態,則證明部署成功
docker ps -a
#瀏覽器訪問
http://[ip]:8500
#查看成員(記錄Address,集群部署時需要)
docker exec consul-server-1 consul members
#查看節點信息
curl http://[ip]:8500/v1/catalog/nodes
至此,使用Docker部署Consul集群已經完成。
4. 剔除無效服務和節點
- 剔除無效服務
curl -X PUT http://[ip]:8500/v1/agent/service/deregister/[service_id]
- 剔除無效節點
curl -X PUT http://[ip]:8500/v1/agent/force-leave/[node_id]