起因
因为要扩展docker Sarm集群数量,就从集群中选取一台虚机做模板,复制两台新虚机,但忘记改IP了(严重失误啊),第二天发现docker Sarm集群不能正常运行了,总是提示找不到leader,然后分布式存储glusterfs也不能正常工作,根据现象,最终判断应该有网络冲突,这才记起复制的两台虚机没有改IP,且模板机刚好是集群的管理节点。
解决步骤
1、修改复制的虚机IP和hostname,解决IP冲突问题,并在两虚机上运行docker swarm leave
命令退出集群 (但运行命令后提升错误,提示要加--force
,后再次运行 docker swarm leave --force
成功退出。)
2、在产生冲突的IP原虚机上运行docker swarm leave --force
,暂时退出集群。
3、本以为集群能正常工作,谁知还是不行,还是提示没有leader。在管理节点上运行docker node ls
命令,查看到刚才已退出节点还在集群中,且状态还处于Ready Active ,只是MANAGER STATUS已是unreachable了(期间,曾将集群所有节点重启N次,但还是一样的问题。)
4、大杀招来了,选择集群的一个管理节点,运行docker swarm init --force-new-cluster --advertise-addr 当前节点IP:2377
,还是提示错误(当时只顾解决故障,没有记录错误提示),又选择集群中另一管理节点,再运行docker swarm init --force-new-cluster --advertise-addr 当前节点IP:2377
,终于提示成功了,内容如下:
Swarm initialized: current node (81cg74xcx7ioesisyk54wsipe) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3h568v952bl2e0ayz76l4irc7v49bkvsok1kodf46axjbsjbai-cmuobrf4zbwg22qdj07y3krrq 当前节点IP:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
5、在当前管理节点运行docker node ls
命令,查看到刚才强行退出节点和其中一个管理节点的状态已经是down了,又发现2个节点,原先是工作节点,现在变成管理节点了(估计是重新选举了)
6、继续在当前管理节点运行docker node rm 节点ID
,将两个已经down状态的节点从集群删除。
7、最后在已退出集群的节点上,运行docker swarm join --token SWMTKN-1-3h568v952bl2e0ayz76l4irc7v49bkvsok1kodf46axjbsjbai-cmuobrf4zbwg22qdj07y3krrq 管理节点IP:2377
,再次加入集群。
备注:docker swarm init --force-new-cluster --advertise-addr 当前节点IP:2377
该命令是指将去除本机之外的所有管理器身份,强制从当前状态创建一个新的群集(Swarm)。