有两台服务器组成的 docker swarm 集群,其中一台 worker 节点无法正常工作,状态为down
,重启也无法解决问题,于是将这台 worker 节点docker swarm leave
下线,但是长时间没有响应,系统卡死,无奈之下,在另一台 manger 节点上docker node rm [worker_node]
删除了这个 worker 节点,这时候 worker 节点输出如下错误:
Error response from daemon: context deadline exceeded
根据 docker swarm 的官方文档,强制新建集群docker swarm init --force-new-cluster --advertise-addr node01:2377
, 但是 worker 节点还是无法加入 docker swarm join --token token [ip]:2377
,没有任何响应。
请问该如何解决这个问题?
如果这个 worker 节点没有通过 docker swarm leave
正常下线,也不能恢复到正常工作状态,只能从头重建集群。
为什么要从头重建集群?因为集群保存着错误的配置数据,故障 worker 节点已无法正常工作,但集群还误以为它可以正常工作。docker swarm init --force-new-cluster
是在保留配置数据的情况下重建集群,而问题恰恰就在配置数据,所以用它于事无补。docker swarm 也没有提供手工删除错误配置数据的方法。
docker node rm [worker_node]
是用于在节点 leave 之后进行移除操作。
重建集群,先把 manger 节点docker swarm leave --force
清除所有状态,但是这个 worker 节点已经成为了孤儿,docker swarm leave --force
也不行,那么是不是要卸载 docker 才行?
@蝌蝌: worker 节点 docker swarm leave --force
应该可以的,建议再试试
@dudu: 真是奇怪,昨天怎么试了好多次都不行,现在居然可以了。
我之前也遇到swarm 节点一直卡在down的状态下
你尝试
ll /var/lib/docker/swarm/worker/tasks.db
查看该节点的tasks.db 如果异常的大,将它删除,再重启节点。
多大才是异常的大?
@蝌蝌: 我遇到的是大小400多兆,删除了就正常了。
你可以在正常节点下,执行命令,看下大小是多大,就知道是不是异常的了。