分散式系統工具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和故障恢復問題。待續。