1. 程式人生 > >Consul集群部署

Consul集群部署

color bootstra 多個 軟件包 rap 技術分享 域名 服務檢測 true

大綱:

關於consul
consul的架構
部署服務器分配
安裝部署
啟動agent
啟動consul server
啟動consul client
把client 節點加入consul 集群
查看集群成員
查看集群信息
註冊服務
更新服務
更新服務
查詢服務
啟用webui(尚未成功)

關於consul
consul是一個開源工具,它提供了服務發現,服務檢測,健康檢查的功能。支持跨機房的數據中心之間的基礎設施服務的發現和檢測。它安裝簡單,開箱即用。

consul的架構
consul的架構如下如圖:(來自官方文檔)
技術分享圖片

Consul是一個分布式、高可用的系統。為Consul提供服務的每一個節點都運行一個Consul Agent。作為一個Agent不需要提供服務發現或者鍵值數據的存取,Agent負責檢查節點上的服務及節點本身的健康狀況。

Agent與一個或多個Consul Server進行通信,Consul Server會進行數據的存儲,多個Server之間會進行復制。Server們會選舉一個Leader。基礎設施中需要發現其它服務或節點的組件可以查詢任何一個Consul Server或者Consul Agent。Agent會自動向Server進行查詢。每個數據中心運行一個Consul Server的集群。當作出一個跨數據中心的服務發現或配置請求時,本地的Consul Server直接將請求發送到遠程數據中心並返回結果。

部署服務器分配

節點名稱 IP地址 類型
consul-server01 192.168.209.131 Server
consul-server02 192.168.209.134 Server
consul-server03 192.168.209.135 Server
consul-client01 192.168.209.132 Client
consul-client02 192.168.209.133 Client

實際環境中可根據需要來增減server節點和client節點。

安裝部署
在所有服務節點和client節點上面建立consul服務的數據目錄和配置文件目錄.
mkdir -p /tmp/consul #consul服務的數據目錄
mkdir -p /etc/consul.d #consul服務的配置文件目錄

從官方地址下載consul軟件包:
wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip

技術分享圖片

consul的安裝包是個二進制文件,解壓之後放到指定目錄會即可使用。如果沒有放在PATH環境變量指定的路徑下,要在PATH環境變量中添加。
技術分享圖片
技術分享圖片

安裝驗證
consul -v
技術分享圖片

啟動agent
consul安裝完成之後,必須要啟動agent, agent運行集群的所有節點上面,它有兩種server和client兩種運行模式。如果以server模式啟動,則該節點作為服務端,如果以client模式啟動,則該節點作為客戶節點,
consul集群對客戶節點沒有限制,對服務節點有限制,至少三個或者以上,一般3至五個節點。

啟動服務節點

consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server01 -bind=192.168.209.131 -config-dir=/etc/consul.d/

consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server02 -bind=192.168.209.134 -config-dir=/etc/consul.d/

consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server03 -bind=192.168.209.135 -config-dir=/etc/consul.d/

consul命令以及參數說明(詳情請參考官方文檔):
agent: 該指令用來運行agent服務,維護成員的重要信息,運行檢查,服務查詢,服務宣布。
-server: 以服務模式啟動
-ui: 啟用web UI界面。
-rejoin: 如果節點離開集群,嘗試重新連接引入。
-bootstrap-expect:指定數據中心裏服務節點的數量,當服務節點的數量少於這個值的時候,集群就會失敗。
-data-dir:指定consul服務的狀態以及相關數據的存儲目錄。
-node: 指定節點名稱,不指定默認是主機名。
-bind: 指定consul服務綁定的IP地址。
-config-dir:指定consul服務的配置文件目錄。

啟動客戶節點
consul agent -data-dir=/tmp/consul -node=consul-client01 -bind=192.168.209.132 -enable-script-checks=true -config-dir=/etc/consul.d
consul agent -data-dir=/tmp/consul -node=consul-client02 -bind=192.168.209.133 -enable-script-checks=true -config-dir=/etc/consul.d
不指定服務模式的標識(-server,-client)的情況下,是以client模式啟動的。

把客戶端節點加入集群(在所有服務節點執行)
consul join consul-client01 consul-client02
技術分享圖片

實際環境中可根據client節點的數量,在命令consul join之後增減節點名稱。

查看集群成員
consul members

技術分享圖片

查看集群信息
consul info

技術分享圖片
技術分享圖片

註冊服務:
在consul集群中註冊服務有兩種方式,一種是通過編寫服務的配置文件,一般是json格式的。另一種就是通過HTTP API註冊。

以json格式的配置文件註冊服務:
例如:
echo ‘{"service": {"name": "web", "tags": ["rails"], "port": 80}}‘

/etc/consul.d/web.json

這裏以json格式的形式把服務的相關信息寫入web.json的文件,服務名稱為:web, 標簽名稱為:rails, 端口號:80

以HTTP API的形式註冊服務:
curl -X PUT -d ‘{"Datacenter": "dc1", "Node": "consul-client01", "Address": "192.168.209.132", "Service": {"name": "tomcat", "tags": ["tomcat"], "Port": 8080}}‘ http://127.0.0.1:8500/v1/catalog/register

更新服務
在服務節點執行: consul reload
技術分享圖片

查詢服務
在consul集群中查詢服務可以使用DNS和HTTP API查詢。
使用DNS查詢:
在DNS API中,服務的DNS名字是 NAME.service.consul. 雖然是可配置的,但默認的所有DNS名字會都在consul命名空間下.這個子域告訴Consul,我們在查詢服務,NAME則是服務的名稱.
對於我們上面註冊的Web服務.它的域名是 web.service.consul :

dig @DNS服務器地址 -p DNS服務器地址端口號 服務域名

例如查詢上面註冊的服務:
dig @127.0.0.1 -p 8600 web.service.consul
技術分享圖片

在以上的結果中,名稱為web的服務在192.168.209.132,192.168.209.133,192.168.209.131都註冊。

使用HTTP API查詢

curl -s 127.0.0.1:8500/v1/catalog/service/web | python -m json.tool

技術分享圖片
技術分享圖片
技術分享圖片

啟用consul web ui
使用如下命令:
Server agent -server -ui
添加了-ui參數後http服務和8500端口都正常,但是無法訪問,正在研究中,待後續解決。

Consul集群部署