1.状态管理
swarm集群中的node的availability状态可以为active或者drain,其中active状态下,
node可以接受来自manager节点的任务分派;
drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)
--让ES2节点下线
docker node update --availability drain es2
docker node ls
--查看swarm节点状态
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Active Leader 20.10.16
qkgj7skhkom6k5iz6hqpg3d8t es2 Ready Active 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Active 20.10.16
--下线ES2;
[root@es1 data]# docker node update --availability drain es2
es2
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Active Leader 20.10.16
qkgj7skhkom6k5iz6hqpg3d8t es2 Ready Drain 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Active 20.10.16
--删除ES2;
如果要删除es2节点,命令是"docker node rm --force es2"
[root@es1 data]# docker node rm --force es2
es2
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Active Leader 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Active 20.10.16
--节点重新加入。
--必须先执行:leave,离开集群然后加入。
[root@es2 data]# docker swarm leave
Node left the swarm.
[root@es2 data]# docker swarm join --token SWMTKN-1-2m4j6opjy8p7vv4bva0vme0956zwxsv859ls5w7hx64ncpjanz-76oe75eirzlqfsat4gse8oem5 192.168.1.7:2377
This node joined a swarm as a worker.
--查看节点状态。
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Active Leader 20.10.16
j5qw78w2f6csdv1wvdwndm90u es2 Ready Active 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Active 20.10.16
--让节点es3,先离线再上线。
# docker node update --availability drain es3
# docker node ls
[root@es1 data]# docker node update --availability drain es3
es3
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Active Leader 20.10.16
j5qw78w2f6csdv1wvdwndm90u es2 Ready Active 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Drain 20.10.16
[root@es1 data]# docker node update --availability active es3
es3
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Active Leader 20.10.16
j5qw78w2f6csdv1wvdwndm90u es2 Ready Active 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Active 20.10.16
2.总结
从节点下线和上线均可在主节点完成。active:上线,drain:下线。
3.是否故障转移
--让主节点下线,管理节点下线。
[root@es1 data]# docker node update --availability drain es1
es1
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Drain Leader 20.10.16
j5qw78w2f6csdv1wvdwndm90u es2 Ready Active 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Active 20.10.16
[root@es1 data]# docker node update --availability active es1
es1
[root@es1 data]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lbcg0z4t2n3lgn4nld4brdsx7 * es1 Ready Active Leader 20.10.16
j5qw78w2f6csdv1wvdwndm90u es2 Ready Active 20.10.16
q6wuwac0yvp49ydfwzqn5n7no es3 Ready Active 20.10.16
--由此可见,管理节点无论下线还是上线都不会变化,不会故障转移。