健康检查是需要每个应用运行监控检查任务的。 
1.默认的健康检查是延迟才能让mesos知道任务的状态是否健康。 
2.marathon提供一个任务资源的健康成员访问的REST API接口。

如果HTTP的响应在超时时间timeoutSeconds内返回代码在200到399之间,那么健康检查认为是健康的。如果任务失败连续超过健康检查规定的maxConsecutiveFailures次数,这个任务将会被kill掉。

实例:

{
  "path": "/api/health",
  "portIndex": 0,
  "protocol": "HTTP",
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 3,
  "ignoreHttp1xx": false
}

或者

{
  "portIndex": 0,
  "protocol": "TCP",
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 0
}

或者 

{
  "protocol": "COMMAND",
  "command": { "value": "curl -f -X GET http://$HOST:$PORT0/health" },
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 3
}

健康检查配置项

首先你需要描述健康检查的协议: 
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表示健康实例数 

(转)Marathon健康检查_TCP