健康檢查是需要每個應用運作監控檢查任務的。
1.預設的健康檢查是延遲才能讓mesos知道任務的狀态是否健康。
2.marathon提供一個任務資源的健康成員通路的REST API接口。
如果HTTP的響應在逾時時間timeoutSeconds内傳回代碼在200到399之間,那麼健康檢查認為是健康的。如果任務失敗連續超過健康檢查規定的maxConsecutiveFailures次數,這個任務将會被kill掉。
執行個體:
{
"path": "/api/health",
"portIndex": ,
"protocol": "HTTP",
"gracePeriodSeconds": ,
"intervalSeconds": ,
"timeoutSeconds": ,
"maxConsecutiveFailures": ,
"ignoreHttp1xx": false
}
或者
{
"portIndex": ,
"protocol": "TCP",
"gracePeriodSeconds": ,
"intervalSeconds": ,
"timeoutSeconds": ,
"maxConsecutiveFailures":
}
或者
注意:在和docker化的任務組合中,指令健康檢查mesos 0.23.0和0.24.0版本中有bug。在0.23.1和0.24.1中已經得到修複。
想要了解更多,請檢視https://issues.apache.org/jira/browse/MESOS-3136。
{
"protocol": "COMMAND",
"command": { "value": "curl -f -X GET http://$HOST:$PORT0/health" },
"gracePeriodSeconds": ,
"intervalSeconds": ,
"timeoutSeconds": ,
"maxConsecutiveFailures":
}
健康檢查配置項
首先你需要描述健康檢查的協定:
protocol(可選,預設為HTTP):請求的協定有三種,分别是HTTP/TCP/COMMAND
HTTP/TCP健康檢查被marathon執行,是以目前marathon leader必須是可以通路的。COMMAND健康檢查是通過在代理服務上的mesos運作一個類似的任務在本地執行的。
下面的配置項适合所有協定:
gracePeriodSeconds(可選,預設為300):健康檢查失敗在多少秒内被忽略,或者直到任務狀态變成健康。
intervalSeconds(可選,預設60):健康檢查間隔時間
maxConsecutiveFailures(可選,預設3):健康檢查連續失敗3次後,不健康的任務會被kill。如果這個值是0,即使健康檢查失敗,任務也不好被删除。
timeoutSeconds(可選,預設20):健康檢查請求沒有會的響應的時限。
對TCP/HTTP健康檢查,port和portIndex也許會使用到。如果沒有提供,portIndex會被設定。如果提供了port,它會優先覆寫所有的portIndex選項。
portIndex(可選,預設為0):這個應用的ports或portDefinitions數組的索引。是以應用可能會使用随機端口,例如[0,0,0],任務可能會使用$PORT1這個環境變量。
port(可選,沒有預設值):健康檢查額端口号。
下面的配置隻适用于HTTP健康檢查:
path(可選,預設為/):任務暴露一個終端點用于健康檢查。例如:/path/to/health
ignoreHttp1xx(可選,預設為false):忽略HTTP狀态為100到199的資訊。如果這個HTTP健康檢查傳回這個狀态的資訊,結果被丢棄和任務的健康狀态保持不變。
健康生命周期
應用的健康生命周期如下圖所示。
在圖中:
i表示請求執行個體數
r表示運作執行個體數
h表示健康執行個體數
