首页 新闻 会员 周边 捐助

有没有办法可以让docker swarm内置负载均衡对容器进行健康检查

0
悬赏园豆:200 [待解决问题]

有时容器被非正常 shutdown 时(比如节点宕机),不能被 docker swarm 内置负载均衡从转发列表中移除,从而造成请求被转发给已关闭的容器引发故障。如果可以让 docker swarm 内置负载均衡像 nginx 那样对转发的节点进行健康检查,就可以大大提高 docker swarm 集群的容错能力。请问有没有办法实现?

注:Dockerfile 中的 HEALTHCHECK 命令只是用于容器启动时的健康检查,docker swarm内置负载均衡并没有用到它。

dudu的主页 dudu | 高人七级 | 园豆:29568
提问于:2018-04-15 20:36
< >
分享
所有回答(4)
0

村长,好久不见,村长都解决不了的问题,坐下来围观学习。

I,Robot | 园豆:9783 (大侠五级) | 2018-04-16 09:03
0

docker用的哪个版本?是docker swarm mode?

webglcn | 园豆:111 (初学一级) | 2018-04-16 14:48

Docker version 17.12.1-ce, build 7390fc6,是的,swarm mode

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2018-04-16 14:53
0

村长我又来了,docker swarm mode中使用docker service create --health命令可以监控容器的状态,如果unhealth,就会重启新容器来代替旧容器。以下是--health的参数声明,完美适用你的场景

--health-cmd string Command to run to check health
--health-interval duration Time between running the check (ms|s|m|h)
--health-retries int Consecutive failures needed to report unhealthy
--health-start-period duration Start period for the container to initialize before counting retries towards unstable (ms|s|m|h)
--health-timeout duration Maximum time to allow one check to run (ms|s|m|h)

杨老板 | 园豆:414 (菜鸟二级) | 2018-04-25 15:32

这个与 Dockerfile 中的 HEALTHCHECK 是同一个

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2018-05-03 17:56

@dudu: 在Swarm模式下,Swarm manager会监控服务task的健康状态,如果容器进入 unhealthy 状态,它会停止容器并且重新启动一个新容器来取代它。这个过程中会自动更新服务的 load balancer (routing mesh) 后端或者 DNS记录,可以保障服务的可用性。

支持(0) 反对(0) 杨老板 | 园豆:414 (菜鸟二级) | 2018-05-03 18:10

@dudu: 对比dockerfile里面的healthcheck,还是有区分的,功能性比较好,dockerfile里的health只能返回值

支持(0) 反对(0) 杨老板 | 园豆:414 (菜鸟二级) | 2018-05-03 18:13
0

health check一般都是应用程序级的,因为health check比较复杂,比如数据库依赖,如果数据库down掉,这个服务就是不可用了,eShopOnContainers中有关于Health check的示例,个人觉得很好

南昌炒粉 | 园豆:760 (小虾三级) | 2018-05-22 10:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册