Consul入門05 - 健康檢測

咱們已經看到了運行Consul,增長節點和服務,以及查詢這些賤點和服務是多麼地簡單。在這篇教程中,咱們將繼續增長對節點和服務健康監測的教程。健康監測對服務發現是一個關鍵的組件,它避免使用不健康的服務。html

本篇的步驟基於前一篇 Consul集羣,這裏你應該運行有兩個節點的集羣。web

定義檢測

相似於服務,能夠經過一個 檢測定義或者經過調用HTTP API來註冊一個檢測。json

咱們將使用檢測定義的方法,由於就像服務同樣,使用定義是一個最爲經常使用的方法來設置檢測。bash

在第二個節點的Consul配置目錄中建立兩個定義文件:服務器

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

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

第一個定義增長了一個主機級別的檢測,名爲"ping"。該檢測每30秒間隔運行一次,調用命令 ping -c1 google.com。在一個基於腳本的健康檢測中,該檢測使用啓動Consul進程的用戶來啓動該檢測。若是檢測命令返回一個非0的返回碼,那麼該節點將被標記爲不健康。這就是任何基於 腳本 的健康檢測的契約。curl

第二個命令修更名爲 web 的服務,增長了一個檢測,該檢測每10秒用curl發送一個請求來驗證該web服務是否可用。就像基於主機的健康檢測,若是腳本返回一個非0的返回碼,那該服務將被標記爲不健康。測試

如今重啓第二個代理或者向它發送一個 SIGHUP 信號。你會看到下列日誌信息:google

==> Starting Consul agent...
...
    [INFO] agent: Synced service 'web'
    [INFO] agent: Synced check 'service:web'
    [INFO] agent: Synced check 'ping'
    [WARN] Check 'service:web' is now critical

前面的幾行指出該代理已經同步了新的定義。後面的幾行指出了被檢測的 web 服務被標記爲危險。這是由於咱們尚未實際運行一個web服務器,因此這個curl測試標記爲失敗了。url

檢測健康狀態

如今咱們已經增長了一些檢測,咱們能夠使用HTTP API來審查它們。首先,咱們能夠使用命令尋找任何失敗的檢測(注意,這個命了能夠在任何節點上運行):翻譯

vagrant@n1:~$ curl http://localhost:8500/v1/health/state/critical
[{"Node":"agent-two","CheckID":"service:web","Name":"Service 'web' check","Status":"critical","Notes":"","ServiceID":"web","ServiceName":"web"}]

咱們能夠看到如今只有一個檢測,那是咱們的 web 服務的檢測,它被設置爲危險狀態。

另外,咱們能夠嘗試使用DNS查詢web服務。Consul不會返回任何結果由於該服務是不健康的:

dig @127.0.0.1 -p 8600 web.service.consul
...

;; QUESTION SECTION:
;web.service.consul.        IN  A

下一步

在本篇教程中,你學會了增長健康檢測是很是容易。經過更新配置文件而且發送一個 SIGHUP 信號給代理來更新檢測定義。還能夠選擇使用HTTP API來動態地增長,刪除,以及修改檢測。該API也能夠用於一個"dead man's switch",一個TTL-based check。TTL檢測能夠被用於一個應用程序和Consul是緊密集成的,使得業務邏輯評估是基於健康檢測的一部分。

接下來,咱們將瀏覽[Consul的鍵/值存儲]()。

翻譯自這裏

相關文章
相關標籤/搜索