解决 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.
逐个分析两个节点的日志, 发现周期性打印的错误日志:
第一个管理节点:
- Mar 4 09:30:05 manager1 dockerd: time="2020-03-04T09:30:05.663865244+08:00" level=error
- 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\""
第二个管理节点报:
- Mar 4 09:08:01 manager2 dockerd: time="2020-03-04T09:08:01.446858105+08:00" level=warning
- 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
集群恢复正常, 并且之前的部署和配置依然存在, 算是解决了问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2019-06-24 vmvare下centos7配置静态ip