1、环境
四台host信息,DockerEngine已装
- docker01 : 192.168.138.128
- docker02 : 192.168.138.129
- docker03 : 192.168.138.130
- docker04 : 192.168.138.131
2、创建集群
2.1、创建集群主节点
- 以docker01为主节点创建
docker swarm init --advertise-addr 192.168.138.128
2.2、创建令牌
- 在docker01上面生成token,其他节点加入docker01这个集群的令牌,令牌分为worker和manager两种
docker swarm join-token manager
docker swarm join-token worker
2.3、使用令牌加入集群
- 将docker02和docker03以管理节点的方式加入集群(加入之前关闭主机防火墙,两边都需要关)
- 将docker04以工作节点的方式加入集群
- 查看集群
docker node ls
2.4、删除节点
docker swarm leave
3、集群服务弹性伸缩
- 创建一个nginx服务
docker service create -p 8888:80 --name mynginx nginx
-
经过查看第一个nginx运行在docker01上
-
访问一下
3.1、进行弹性伸缩
- 扩5个nginx
docker service scale mynginx=5
-
查看一下,分布到了docker01和docker04
-
访问
-
缩为3个
-
docker01里面没有运行nginx,访问docker01依然有页面,集群发生作用
3.2、模仿故障
- 关闭docker02的docker服务
- 集群里面docker02已经down了,命令主节点命令还可以使用,是因为还有docker01和docker03两个主节点,如果再down掉docker03,集群就不会工作了
- 关闭docker03
- 再使用集群管理命令已经报错,提示需半数的管理节点在线
这是为什么呢?
因为,一致性算法 - Raft