故障公告:docker swarm集群“群龙无首”造成部分站点无法访问

Posted 博客园官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了故障公告:docker swarm集群“群龙无首”造成部分站点无法访问相关的知识,希望对你有一定的参考价值。

今天傍晚 17:38-18:18 左右,由于 docker swarm 集群出现 "The swarm does not have a leader" 问题,造成博问闪存园子小组、openapi 无法正常访问,由此给您带来麻烦,请您谅解。

目前我们已经迁移至 asp.net core 的站点都部署在 docker swarm 集群上,节点用的是阿里云服务器,操作系统是 ubtunu 16.04 ,docker engine 版本是 17.06.0-ce, build 02c1d87 。

今天出故障期间,我们在进行节点变更的操作。操作前集群只有 3 个 manager 节点,没有 worker 节点,变更的目标是调整为 5 个节点,其中 3 个 manager ,2 个 worker ,变更的方式是减 1 个节点加 3 个节点(这 3 台服务器配置高,需要升级为 manager)。

具体的变更操作是这样的,第 1 个操作是 docker node demote node1 将已有的一个 manager 节点降级为 worker , docker swarm leave 退出集群, docker node rm node1 移除节点,这个节点是减掉的那个节点。然后,新增的服务器直接  docker swarm join --token manager_token 加为 manager 节点。第 1 个操作正常完成。

第 2 个操作的开始几步与与第 1 个操作一样,manager 降级为 worker -> 退出集群 -> 移除节点,但接着这台服务器修改主机名后又加入集群成为 worker 节点,然后新增的另外 1 台服务器以 manager 节点身份加入集群,而问题就出现在这台服务器加入集群之后。

出问题时,在任何 manager 节点上执行  docker node ls 命令都会出现下面的错误:

Error response from daemon: rpc error: code = 2 desc = The swarm does not have a leader. It\'s possible that too few managers are online. Make sure more than half of the managers are online

此时集群上运行的站点全部无法访问,重启所有节点后,问题依旧。。。后来实在找不到解决方法,只能重建 docker swarm 集群并重新部署应用,恢复正常。

有人在亚马逊 AWS EC2 上部署 docker swarm 集群上遇到了类似的问题 (详见 stack deploy causes nodes to randomly fail health checks making the stack unusable ),后来 docker 针对这个问题出了 Docker for AWS 的修复更新。从我们遇到的问题看,可能 docker 还没有真正修复这个问题。

以上是关于故障公告:docker swarm集群“群龙无首”造成部分站点无法访问的主要内容,如果未能解决你的问题,请参考以下文章

故障公告10:30-10:45 左右 docker swarm 集群节点问题引发故障

云计算之路-阿里云上:docker swarm 集群再次出现故障

云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

Docker Swarm高可用性

云计算之路-阿里云上:针对 docker swarm 故障的部署调整以及应急措施

十docker swarm