健康检查


Rancher 通过在它的主机上运行托管网络代理端实现了健康监控系统用来协调容器和服务的分布式健康检查。这些网络代理端在内部使用 HAProxy 来验证你的应用的健康状态。当无论单独容器还是服务的健康检查被开启后,每个容器都会被多至三个网络代理端所监控,代理端运行于不同于容器主机的主机上。如果至少有一个 HAProxy 实例汇报“通过”的健康检查,容器就会被认为是健康的,当所有 HAProxy 实例都汇报“不健康”的健康检查,就认为容器是不健康的。

注意: 此模式仅有的例外情况是:当你的环境中仅包含一个单主机,在这种情况下健康检查将只会在这台主机上执行。

Rancher 处理网络区分并且那比基于客户端的健康检查更有效率。通过使用 HAProxy 来执行健康检查,Rancher 允许用户跨越应用和负载均衡来指定相同的健康检查策略。

注意: 监控检查仅对使用托管网络的服务有效。如果你选择了任何其他的网络选项,它将不会被监控。

配置

使用如下选项来配置健康检查:

Check type: 这里有两种检查 - TCP Connection Opens (仅确认端口打开) 和 HTTP Responds 2xx/3xx (执行一个 HTTP 请求并确保接受了正确的响应)。

HTTP request: 如果检查类型是 HTTP Responds 2xx/3xx,你必须指定查询的 URL 路径。你能选择请求方法 (GET, POST, etc) 和 HTTP 版本 (HTTP/1.0, HTTP/1.1)。

Port: 执行检查的端口。

Check interval: 检查执行的毫秒数间隔。

Timeout: 在一次无回应的检查超时前的毫秒数。

Healthy threshold: 在容器(当前标记为非健康)被再次认为是健康前成功的检查响应次数。

Unhealthy threshold: 在容器(当前标记为健康)被认为是非健康前失败的检查响应次数。

失败场景

场景 响应
被监控容器停止响应健康检查 所有激活监控此容器的 HAProxy 实例将会侦测到失败并标记此容器为“非健康”。如果这个容器是一个服务的一部分,Rancher 将会通过它的 HA 功能恢复此服务到它预定义的数量。
运行带有健康检查容器的主机丢失了网络连接或主机上的代理端。 当主机的网络连接丢失,从 Rancher 服务端到代理端的连接也会丢失。当代理端不可访问,主机会被标记为”reconnecting”。 此时所已知的是 Rancher 服务端无法连上那台主机的代理端。Rancher 中的健康检查针对的是容器本身而不是主机;结果是,对所有激活的 HAProxy 实例,容器都不可达。如果这个容器是一个服务的一部分,Rancher 将会通过他的 HA 功能恢复此服务到它预定义的数量。
运行带有健康检查容器的主机完全失效。 当主机遭受完全失效例如电源中断,从 Rancher 服务端到代理端的连接中断。 当代理端不可访问,主机会被标记为”reconnecting”。此时所已知的是 Rancher 服务端无法连上那台主机的代理端。Rancher 中的健康检查针对的是容器本身而不是主机;结果是,对所有激活的 HAProxy 实例,容器都不可达。如果这个容器是一个服务的一部分,Rancher 将会通过他的 HA 功能恢复此服务到它预定义的数量。
一台主机的代理端失效但主机保持在线,并且容器继续运行并能通过健康检查。 在此实例中,如同先前的案例,从 Rancher 服务端到代理端的连接中断。当代理端不可访问,主机会被标记为”reconnecting”。此时所已知的是 Rancher 服务端无法连上那台主机的代理端。Rancher 中的健康检查针对的是容器本身而不是主机;结果是,对所有激活的 HAProxy 实例,容器都不可达。如果这个容器是一个服务的一部分,Rancher 将会通过他的 HA 功能恢复此服务到它预定义的数量。勘误:by alfredhuang211,此例子中,容器应该还是可达的,但是rancher英文原文仍然写的是不可达,猜测不知是撰写错误还是本人理解有限。因为容器可达,健康检查仍然可以通过,认为容器仍然健康。