1. 程式人生 > >分散式系統工具Consul

分散式系統工具Consul

在尋找簡潔的PaaS工具組合時,發現了Consul這個工具。https://www.consul.io

此開源產品來自於 HashiCorp, 就是提供虛擬機器管理工具Vagrant的公司。

標題是服務發現和配置。

有多個模組,但無論服務端還是客戶端,都只有一個單一的程式Consul。部署非常簡單。

功能有:1)服務發現; 2)健康檢查;3)KV儲存;4)多資料中心

每個提供服務的host需要執行Consul Agent,作用: registers services, runs health checks, and forwards queries to servers.

Consul Agent需要與一個或多個Consul Server通訊。 

服務可以通過檔案定義或HTTP API呼叫來定義。 A service can be registered either by providing a service definition or by making the appropriate calls to the HTTP API.

通過檔案定義一個簡單的服務:   $ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}'   >/etc/consul.d/web.json

啟動 :consul agent -dev -config-dir /etc/consul.d

如果有多個網絡卡,啟動會失敗,需要加 -advertise=ipaddr 引數。 

呼叫DNS API來查詢服務 :  dig @127.0.0.1 -p 8600 web.service.consul

或者使用HTTP API來查詢:  curl http://localhost:8500/v1/catalog/service/web

叢集配置

如果要知道其他cosul成員,後續啟動的agent必須加入到其中之一。 任意一個,無論它是否是執行在伺服器模式下。 那麼所有叢集成員都會知道新成員的存在。

自動加入叢集的機制。 HashiCorp做了一個atlas服務,提供註冊賬號和一個Token,就可以自動加入叢集了。不能上外網就不能這麼用。但思路很好。

退出叢集。正常退出,狀態就是left state,如果不打招呼就退出,那麼就是failed狀態。

當然,任何節點都提供查詢服務。查詢consul節點和服務的狀態。

健康檢查

檢查分host級別和service級別。

echo '{"check": {"name": "ping", "script": "ping -c1 google.com >/dev/null", "interval": "30s"}}' > /etc/consul.d/ping.json

echo '{"service": {"name": "web", "tags": ["rails"], "port": 80, "check": {"script": "curl localhost >/dev/null 2>&1", "interval": "10s"}}}'  > /etc/consul.d/web.json

都是採用了指令碼監測方法。如果返回值非零,就是表示故障。

5中型別檢查邏輯: https://www.consul.io/docs/agent/checks.html

鍵值儲存 :  https://www.consul.io/docs/agent/http/kv.html

還有啟動cluster和故障恢復問題。待續。