测试 : 4台linux 配置 2G 1核 测试机
docker Swarm 使用范围 10台以下建议使用 docker Swarm,
swarm 通过工作节点 控制工作节点(小型架构适用)
集群搭建
1.初始化集群
命令初始化集群并得出集群初始化后的 token,往后可以通过该token 去添加工作节点(worker)
docker swarm join --token SWMTKN-1-16svr9bsdvbrn63818dlh55eqmmwkph9ywhdpv9wk65pdh9fxo-dufrwmdhkzbs3eh4vw17hpbw5 192.168.1.139:2377
![](https://img-blog.csdnimg.cn/20210831170440697.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
初始化节点 :docker swarm init --advertise-addr 192.168.1.139 ## 通过初始化管理员并指定绑定管理员ip
加入一个节点:docker swarm join
#获取令牌
docker swarm join-token manager
docker swarm join-token worker
![](https://img-blog.csdnimg.cn/20210831170440697.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
完成工作节点的添加
双主双从
docker swarm leave ##离开集群节点
Raft协议 (一致性算法)
Raft协议:保证大多数节点存活才可以用,只要>1,集群至少大于3台!
实验
1、在双主的情况下 将docker-manager-1 机器停机,另外一个主节点也不能使用!
![](https://img-blog.csdnimg.cn/20210831170440702.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
2、可以将其他节点离开
![](https://img-blog.csdnimg.cn/20210831170440735.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
3、work就是工作节点,管理节点命令无法再工作节点上面使用,3台机器设为主节点
-
集群搭建可用需要三个主节点,并在集群运行中需确保两个主节点正常运行,如主节点剩下一个,该swarm集群将无法使用。
-
Raft 协议: 保证大多数节点存活,才可以使用,高可用!
体会
弹性、扩缩容!集群
以后告别 docker run
docker-compost up 启动一个项目。单机
集群: swarm docker service
容器 => 服务! => 副本!
redis 服务 => 10个副本!(同时开启10个redis 容器)
体验:创建服务,动态扩展服务,动态更新服务。
![](https://img-blog.csdnimg.cn/20210831170440737.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
灰度发布:金丝雀发布!
![](https://img-blog.csdnimg.cn/20210831170440695.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
1、docker run 容器启动!不具备有扩缩容器功能
2、docker service 服务 ! 具有扩缩容功能,和滚动更新功能!
查看服务 REPLICAS
![](https://img-blog.csdnimg.cn/20210831170440699.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
docker service ps
my-nginx (跟容器名称)
动态扩缩容 命令:docker service update --replicas 3 my-nginx (扩展3个my-nginx 容器)
![](https://img-blog.csdnimg.cn/20210831170440701.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
服务,集群中任意的节点都可以访问,服务可以有多个副本动态扩缩容实现高可用!
弹性、 扩缩容!
创建 10台! 100台!。。。。 实现可以出售给别人 虚拟化服务!
服务的高可用,任何企业,云!
![](https://img-blog.csdnimg.cn/20210831170440707.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_20,color_FFFFFF,t_70,g_se,x_16)
此命令 :docker service scale my-nginx=10 和 docker service update --replicas 3 my-nginx 功能一样 都是对容器扩缩的功能。
移除 容器
docker service rm my-nginx
![](https://img-blog.csdnimg.cn/20210831170440706.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTYyNDc3,size_16,color_FFFFFF,t_70,g_se,x_16)
docker swarm 使用操作简单
只要会搭建集群,启动服务,动态管理容器就可以了
概念总结
swarm
集群的管理和编号。docker 可以初始化一个 swarm 集群,其他节点可以加入。(manager,worker)
Node
就是一个docker 节点。多个节点就组成一个网络集群。
Service
任务,可以再管理节点或者工作节点来运行。核心。!用户访问!
Task
容器内的命令,细节任务!
命令 -> 管理 - > api -> 调度 -> 工作节点(创建task容器维护创建)
拓展:网络模式:“PublishMode”:“ingress”
Swarm:
Overlay:
ingress: 特殊的Overlay 网络! 负载均衡的功能! IPVS VIP
虽然docker 上有4台机器,但是实际网络是同一个!ingress 网络,是一个特殊的Overlay网络