大綱:
關于consul
consul的架構
部署伺服器配置設定
安裝部署
啟動agent
啟動consul server
啟動consul client
把client 節點加入consul 叢集
檢視叢集成員
檢視叢集資訊
注冊服務
更新服務
查詢服務
啟用webui(尚未成功)
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
consul-server03
192.168.209.135
consul-client01
192.168.209.132
Client
consul-client02
192.168.209.133
實際環境中可根據需要來增減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
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端口都正常,但是無法通路,正在研究中,待後續解決。