gpt4 book ai didi

docker - Docker群:保证重启后的高可用性

转载 作者:行者123 更新时间:2023-12-02 20:14:52 26 4
gpt4 key购买 nike

我在使用Docker swarm时遇到问题。

我有3个在Gunicorn上运行的Python Web服务的副本。

问题是,当我在软件更新后重新启动群集服务时,旧的正在运行的服务被杀死,然后创建并启动了一个新的服务。但是在很短的时间内,旧服务已经被终止,新服务还没有完全启动,网络消息已经路由到尚未准备好的新实例,导致502错误的网关错误(我从nginx代理服务)。

我使用--update-parallelism 1 --update-delay 10s选项,但这不能消除问题,只会稍微减少出现502错误的机会(因为始终至少有2个服务正在运行,即使其中一项可能仍在启动)。

最佳答案

因此,按照我在评论中的建议:

使用Dockerfile的HEALTHCHECK功能:Docs。就像是:

HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1

知道Docker Swarm在服务更新期间确实会执行此健康检查,因此零停机时间部署相对容易。

但是,正如您提到的,您需要进行高资源的消费者健康检查,并且需要更大的健康检查间隔。

在这种情况下,我建议您自定义运行状况检查,以立即进行第一次运行,并在 current_minute % 5 == 0处进行后续检查,但运行状况检查本身将运行 /30s:
HEALTHCHECK --interval=30s --timeout=3s \
CMD /service_healthcheck.sh

healthcheck.sh
#!/bin/bash

CURRENT_MINUTE=$(date +%M)
INTERVAL_MINUTE=5

[ $((a%2)) -eq 0 ]
do_healthcheck() {
curl -f http://localhost/ || exit 1
}

if [ ! -f /tmp/healthcheck.first.run ]; then
do_healhcheck
touch /tmp/healthcheck.first.run
exit 0
fi

# Run only each minute that is multiple of $INTERVAL_MINUTE
[ $(($CURRENT_MINUTE%$INTERVAL_MINUTE)) -eq 0 ] && do_healhcheck
exit 0

记住将healthcheck.sh的 COPY编码为 /healthcheck.sh(和 chmod +x)

关于docker - Docker群:保证重启后的高可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44208916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com