Docker11: raft协议+弹性创建项目

raft协议

问题:假设一个节点挂了,其他节点是否可用?
Raft协议:保证大多数节点存活;>1,集群>3

以下01 02 03 03 指的是四台服务器

#将docker1机器停止,宕机
#docker-01
systemctl stop docker
docker-02 docker-04
docker node ls
[root@VM-0-8-centos ~]# docker node ls
Error response from daemon: rpc error: code = DeadlineExceeded desc = context deadline exceeded

#docker-01
systemctl start docker

#docker-03
#工作节点变成管理节点
[root@VM-0-16-centos ~]# docker swarm join --token SWMTKN-1-30uc8rx1jk9v671nif6tw1otge9lyy3nj45xtzu1q7ehc4h793-e5cm85lrpbbcczmmggcsr99dv 172.16.0.8:2377
Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.
[root@VM-0-16-centos ~]# docker swarm leave
Node left the swarm.
[root@VM-0-16-centos ~]# docker swarm join --token SWMTKN-1-30uc8rx1jk9v671nif6tw1otge9lyy3nj45xtzu1q7ehc4h793-e5cm85lrpbbcczmmggcsr99dv 172.16.0.8:2377
This node joined a swarm as a manager.

#docker-04
[root@VM-0-8-centos ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pdc7fbmtypcqcgdbwkgfeixjo     VM-0-7-centos       Ready               Active                                  19.03.13
ddosg74pvzbil5cozcyuw4p5f *   VM-0-8-centos       Ready               Active              Leader              19.03.13
lb4ujyjftne3t0ojhb1o7nhhw     VM-0-11-centos      Ready               Active              Reachable           19.03.13
rp8zyu3xmulxwalabtvuqjw7v     VM-0-16-centos      Down                Active                                  19.03.13
sbpz4hqc6nps4e0ucxvd8o57g     VM-0-16-centos      Ready               Active              Reachable           19.03.13

#至此,将三台机器设置成,管理节点

#在三台管理节点满足高可用前提下,关闭其中一台docker服务,测试
01
[root@VM-0-11-centos ~]# systemctl stop docker

#docker-04 docker-03 照样可以使用
[root@VM-0-8-centos ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pdc7fbmtypcqcgdbwkgfeixjo     VM-0-7-centos       Ready               Active                                  19.03.13
ddosg74pvzbil5cozcyuw4p5f *   VM-0-8-centos       Ready               Active              Leader              19.03.13
lb4ujyjftne3t0ojhb1o7nhhw     VM-0-11-centos      Ready               Active              Unreachable         19.03.13
rp8zyu3xmulxwalabtvuqjw7v     VM-0-16-centos      Down                Active                                  19.03.13
sbpz4hqc6nps4e0ucxvd8o57g     VM-0-16-centos      Ready               Active              Reachable     

回顾

docker run 单机模式下:基础模式(不用了)

docker-compose up 单机模式下:启动一个项目上线!

docker service 集群swarm下集群节点

k8s service pods

容器变成服务(服务中有个概念叫做副本):比如redis服务有10个副本,就是同时开启10个redis容器。swarm可以动态扩展redis副本的数量。

就好像多个tomcat的负载均衡。以前是需要手写nginx配置,现在可以动态扩容缩容。

集群:高可用,web->redis (3台),分布在不同机器上!

docker service 动态扩展

在这里插入图片描述
灰度发布:
平滑升级项目。肯定不能停止网站,404,伤流量。
如何实现?
docker service create --help

docker service create -p 8888:80 --name mynginx nginx 类似于docker run只不过能扩容

#工作节点启动服务失败
[root@VM-0-7-centos ~]# docker service create -p 8888:80 --name mynginx nginx
Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.

#管理节点操作
[root@VM-0-16-centos ~]#  docker service create -p 8888:80 --name mynginx nginx
2qcjcuwkex4a7j0z5ee5pp1du
overall progress: 1 out of 1 tasks 
1/1: running   
verify: Service converged 

#总结:docker run      容器启动!不具有扩缩容器
#     docker swervice 服务!具有扩缩容器,滚动更新

# docker-管理节点查看
[root@VM-0-16-centos ~]# docker service ps mynginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
2mml3eiankpd        mynginx.1           nginx:latest        VM-0-8-centos       Running             Running 2 minutes ago  
[root@VM-0-11-centos ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
2qcjcuwkex4a        mynginx             replicated          1/1                 nginx:latest        *:8888->80/tcp

小结:

docker run 容器启动!不具有扩缩容器
docker swervice 服务!具有扩缩容器,滚动更新

查看服务 REPLICAS(副本)

在这里插入图片描述
启动一个服务,会在管理节点主机里随机启动。例如我在docker1启动,会在docker3上开启

#上述启动nginx服务情况只是启动一个副本

#现在给其他两个管理节点增加 服务副本
[root@VM-0-11-centos ~]# docker service update --replicas 3 mynginx
mynginx
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 
#只要在集群里面,无论访问哪个ip都可以访问服务;
#集群为单位的机器

动态扩缩容

#1.扩容测试
[root@VM-0-11-centos ~]# docker service update --replicas 10 mynginx
mynginx
overall progress: 9 out of 9 tasks 
1/9: running   
2/9: running   
3/9: running   
4/9: running   
5/9: running   
6/9: running   
7/9: running   
8/9: running   
9/9: running   
verify: Service converged 
[root@VM-0-8-centos ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
2qcjcuwkex4a        mynginx             replicated          9/9                 nginx:latest        *:8888->80/tcp

#总结:因为容器之间是相互隔离,所以开多少个容器取决于硬件条件允许,一个服务器节点可以同时开多个服务;
#一个服务可以有多个副本,动态扩缩容,实现高可用

#2.缩容测试
#mynginx 服务回滚到一个副本
[root@VM-0-16-centos ~]# docker service update --replicas 1 mynginx
mynginx
overall progress: 1 out of 1 tasks 
1/1: running   
verify: Service converged 
[root@VM-0-16-centos ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
2qcjcuwkex4a        mynginx             replicated          1/1                 nginx:latest        *:8888->80/tcp


#3.另一种方式的扩缩容命令
[root@VM-0-16-centos ~]# docker service scale mynginx=5
mynginx scaled to 5
overall progress: 5 out of 5 tasks 
1/5: running   
2/5: running   
3/5: running   
4/5: running   
5/5: running   
verify: Service converged 
[root@VM-0-11-centos ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
2qcjcuwkex4a        mynginx             replicated          5/5                 nginx:latest        *:8888->80/tcp


#4.移除服务
[root@VM-0-8-centos ~]# docker service rm mynginx
mynginx
[root@VM-0-8-centos ~]# docker service ps mynginx
no such service: mynginx
[root@VM-0-8-centos ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS

注:一个service对应一个端口

总结:

弹性,扩缩容非常重要;
副本 所对应的服务既可以运行在管理节点也可以运行在工作节点;
集群搭建好,服务创建好,任何集群内的ip地址都可以访问集群所提供的服务;
一个服务可以有多个副本,动态扩缩容,实现高可用;
只要会用docker swarm 搭建集群 docker service create 启动服务,docker service scale 或者docker service update 动态管理容器就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值