解决 The swarm does not have a leader

Posted soymilk2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决 The swarm does not have a leader相关的知识,希望对你有一定的参考价值。

1 问题:

最近有一个测试环境的 Swarm 集群挂了, 这个集群有两个管理节点, 执行 docker node ls, 均报:

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

明明两个管理节点都在线.

2 分析:

通过 docker info 命令, 看到一条错误信息

Error: rpc error: code = Unknown 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.

逐个分析两个节点的日志, 发现周期性打印的错误日志:

第一个管理节点:

  1. Mar 4 09:30:05 manager1 dockerd: time="2020-03-04T09:30:05.663865244+08:00" level=error
  2. msg="error sending message to peer" error="rpc error: code = Internal desc = connection error: desc = "transport: x509: certificate has expired or is not yet valid""

第二个管理节点报:

  1. Mar 4 09:08:01 manager2 dockerd: time="2020-03-04T09:08:01.446858105+08:00" level=warning
  2. msg="error renewing TLS certificate: rpc error: code = Internal desc = connection error: desc = "transport: remote error: tls: bad certificate""

初步得出结论, 第二个管理节点证书有问题, 并且很大可能是过期了,

根据字面信息猜测一下: 这里好像是个 BUG, 刷新本地证书需要请求某一个远程节点, 请求远程节点又报证书不对, 形成悖论.

查看两台机器的时间, 均是正常时间

3 验证:

通过命令

docker swarm ca | openssl x509 -noout -text

查看第二个管理节点证书, 命令报错无法显示证书信息

直接通过谷歌浏览器访问两个节点的 2377 端口 https://x.x.x.x:2377

技术图片

点击证书, 查看证书, 发现有效期不在当前时间范围内, 接着着手更新证书有效期

接着面临问题: 证书在哪存放? 怎么更新? 参考了以下地址的内容:

证书相关 GitHub 上的讨论 https://github.com/moby/moby/issues/34384

4 最终解决:

管理节点二因为证书失效, 直接主动让它离开集群

docker swarm leave --force

管理节点一仍然不正常, 在管理节点一上执行命令

docker swarm init --force-new-cluster --advertise-addr x.x.x.x

发现无法正常执行, 重启了 docker 进程

systemctl restart docker

等待时间较长, 之后再次执行

docker swarm init --force-new-cluster --advertise-addr x.x.x.x

集群恢复正常, 并且之前的部署和配置依然存在, 算是解决了问题

以上是关于解决 The swarm does not have a leader的主要内容,如果未能解决你的问题,请参考以下文章

The user specified as a definer (”@’%') does not exist 解决办法

Java compiler level does not match the version of the installed Java project facet.解决方法

maven -- 问题解决Java compiler level does not match the version of the installed Java project facet(示

Java compiler level does not match the version of the installed java project facet错误的解决

解决java compiler level does not match the version of the installed java project facet转载

解决java compiler level does not match the version of the installed java project facet