天天看點

Consul叢集部署

大綱:

關于consul

consul的架構

部署伺服器配置設定

安裝部署

啟動agent

啟動consul server

啟動consul client

把client 節點加入consul 叢集

檢視叢集成員

檢視叢集資訊

注冊服務

更新服務

查詢服務

啟用webui(尚未成功)

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

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叢集部署

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

Consul叢集部署
Consul叢集部署

安裝驗證

consul -v

Consul叢集部署

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

Consul叢集部署

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

consul members

Consul叢集部署

consul info

Consul叢集部署
Consul叢集部署

注冊服務:

在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叢集部署

在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

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叢集部署
Consul叢集部署
Consul叢集部署

啟用consul web ui

使用如下指令:

Server agent -server -ui

添加了-ui參數後http服務和8500端口都正常,但是無法通路,正在研究中,待後續解決。

繼續閱讀