企业版Docker<21>——Docker 三剑客之 Docker Swarm集群(手动搭建、拉伸、缩减、集群监控)


Docker Swarm概述

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目
但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具
而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具
我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了
使用docker-compose部署集群实现负载均衡的时候,我们使在一台主机上面做的,不可以动态的拉神web服务的数量
因为使用docker-compose不满足实际生产环境的要求,因此不需要使用docker-compose了
实际当中我们的web(rs)服务器是要随着业务的增加而增加的
因此使用daoker内置的swarm集群来实现
swarm要求docker-compose必须v3版本以上
swarm自带docker stack会替代docker-compose

其实docker-machine+docker-swarm,就可以实现自动部署docker和自动实现各种功能

Docker swarm的好处

可以实现:负载均衡,高可用(服务的自动迁移)动态拉神与压缩web服务器的数量 
每一个节点都会拉起容器,而且都是调度器
但是监控只能在server1这个管理节点上面做

在这里插入图片描述
docker-machine、docker swarm、docker node、docker service 和 docker stack 常用命令要知道

实验环境

3台rhel7.3版本的虚拟机
一共三台主机:server1 server2 server3
server1是主节点(leader节点\manager节点)
在这里插入图片描述

(1)使用真机连接server1、server2和server3
(2)从真机给三个节点都发送一个nginx镜像

在这里插入图片描述
在这里插入图片描述
首先三台机子都必须安装docker,均有nginx的镜像
这个我之前的实验已经做过,因此直接在上面做即可,不再演示安装docker服务的过程

(3)三个节点的docker服务已经安装好,并且实验环境干净

#server1
在这里插入图片描述在这里插入图片描述
server2
在这里插入图片描述
在这里插入图片描述

Docker Swarm 配置集群节点具体的实现过程(手动搭建swarm集群)

昨天做了docker-compose之后,发现不是很灵活,现在我们使用docker swarm来部署docker集群不使用docker-compose了

(1)部署基本的swarm集群(Docker Service 部署单个集群服务,手动搭建)

自动实现集群部署、负载均衡、高可用
(1)在server1上

server1是leader节点,因此在server1上面初始化集群
docker swarm init

在这里插入图片描述
(2)在server2上

server2是worker节点,将server2也加入集群当中

在这里插入图片描述
(3)在server3上面

server3是worker节点,将server3也加入集群当中

在这里插入图片描述
(4)在server1上面

docker node ls集群已经创建好了
server1是管理节点,可以看到基本的swarm集群已经搭建成功

在这里插入图片描述
(5)在server1、server2、server3上面

导入nginx镜像
docker images
docker tag  nginx:1.16 nginx
docker images

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)在server1上面

准备部署使用容器部署nginx集群服务
docker service --help
docker service create --help

在这里插入图片描述
(7)在server1、server2、server3上面

集群部署好之后三个节点上面都会出现两个自动生成的网络

docker network ls

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(8)在server1上面

docker service create --name web --replicas 3 --publish 80:80 nginx 
利用nginx镜像运行容器,运行三个web(副本),副本个数不限制,会平均分配给三个节点
docker service ls查看总的服务 
docker service ps web查看每个web服务运行在哪个节点 
docker ps查看容器的运行情况

在这里插入图片描述
在这里插入图片描述
可以看到3个web刚好负载均衡给了三个节点
在这里插入图片描述
可以看到运行了一个容器
在这里插入图片描述
(9)在server2上面

docker ps可以看到运行了一个容器

在这里插入图片描述
(10)在server3上面

docker ps可以看到运行了一个容器

在这里插入图片描述

因为有三个web副本,因此刚好三个节点各自运行一个容器
如果是六个副本,那么三个几点各自运行两个容器
其实也不完全是平均分配的
副本数量比较少的时候是平均分配的,副本数量大的时候会根据节点的资源情况分配

(11)测试

浏览器访问172.25.2.1发现负载均衡的效果不是很明显
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(12)在server1、server2、server3上面

#在server1
[root@server1 ~]# vim index.html
<h1>server1</h1>
[root@server1 ~]# docker container cp index.html cd39f9053551:/usr/share/nginx/html
[root@server1 ~]# cat index.html 
<h1>server1</h1>

#在server2
[root@server2 ~]# vim index.html 
[root@server2 ~]# cat index.html 
<h1>server2</h1>
[root@server2 ~]# docker container cp index.html ba3def5d9003:/usr/share/nginx/html

#在server3
[root@server3 ~]# vim index.html
[root@server3 ~]# cat index.html
<h1>server3</h1>
[root@server2 ~]# docker container cp index.html 5a3def5d9003:/usr/share/nginx/html

测试:

[root@foundation10 Desktop]# curl 172.25.10.1
<h1>server3</h1>
[root@foundation10 Desktop]# curl 172.25.10.1
<h1>server2</h1>
[root@foundation10 Desktop]# curl 172.25.10.1
<h1>server1</h1>

(13)在真机上面验证负载均衡

[root@foundation70 Desktop]# for i in {1..10};do curl 172.25.10.1;done #测试的另一种方法,循环10次
[root@foundation70 Desktop]# for i in {1..10}; do curl http://172.25.2.2; done
[root@foundation70 Desktop]# for i in {1..10}; do curl http://172.25.2.3; done

在这里插入图片描述
总结:以上就实现了使用命令搭建swarm集群
##(2)swarm集群中对运行web服务个数的拉伸

######(1)在server1上面:拉伸副本的个数

[root@server1 ~]# docker service ls
[root@server1 ~]# docker service ps web 
[root@server1 ~]# docker service scale web=6  #由原来的三个拉伸到6台
[root@server1 ~]# docker service ps web 查看运行的容器个数,刚好两个web容器

在这里插入图片描述(2)在server2上面

docker ps刚好两个web容器

在这里插入图片描述
(3)在server3上面

docker ps刚好两个web容器

在这里插入图片描述
(4)在真机上面

[root@foundation70 Desktop]# for i in {1..10};do curl 172.25.10.1;done #测试的另一种方法,循环10次
[root@foundation70 Desktop]# for i in {1..10}; do curl http://172.25.2.2; done
[root@foundation70 Desktop]# for i in {1..10}; do curl http://172.25.2.3; done
和刚才的相比,发现有默认发布页面,因为加入了新的web服务器

在这里插入图片描述
在这里插入图片描述
#缩减

[root@server1 ~]# docker service scale web=3
测试
[root@server1 ~]# docker service ps web #按顺序缩减

以上实现了基本的拉神,缩减也是这个道理

(3)实现利用监控页面监控集群中各个节点容器的运行情况(含缩减和拉伸)

利用图形监控更加直观形象

(1)从真机给server1拷贝一个监控镜像并且导入
注意:这个镜像只需要给管理节点(server1)即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)在server1上面拉起监控的这个容器

[root@server1 ~]# docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock  dockersamples/visualizer

在这里插入图片描述
在这里插入图片描述
可以看到server1上面的监控容器正在运行

(3)直接在浏览器里面访问
在这里插入图片描述

(4)在server1上面

docker servcie scale web=10拉神web服务的个数,其实就是增多容器的个数
free -m 可以查看一下三个节点的宿主机内存是否够用
在这里插入图片描述
(5)在浏览器里面进行查看

在这里插入图片描述
注意:不管为web的个数是多少,管理节点(自身也是worker节点)都会根据三个worker节点的资源使用情况合理分配
并不一定是平均分配的,这一点一定要注意,因此说实现了负载均衡、高可用等等
还有就是集群中的每个节点都应该有拉起容器的镜像,因为每个节点都有承担任务的可能性

(6)在server1上面

docker servcie scale web=5缩减web个数
在这里插入图片描述

可以看到server1上面运行了一个web容器

在这里插入图片描述
server2上运行了两个web容器
在这里插入图片描述
server3上运行了两个web容器
在这里插入图片描述

(7)在浏览器里面查看
在这里插入图片描述

(4)服务的滚动更新

拉神一下刚才web的个数
在这里插入图片描述
从真机给三个节点发送服务的镜像
在这里插入图片描述
给三个节点导入镜像并且查看
在这里插入图片描述
在server1上开始更新服务

更新策略:5s更新一次,一次更新两个
[root@server1 ~]# docker service update --update-parallelism 5 --update-delay 2s --image game2048 web #5个一起更新,隔2s更新一次;
在这里插入图片描述

过一会在浏览里面查看,发现已经更新完毕,全部由nginx服务变为game2048服务
这10个容器本来运行的是nginx服务,现在运行的是game2048小游戏
可能就是刚才的10个容器已经释放,重新拉起来10个容器
注意:每个节点的镜像一定要到位

在这里插入图片描述
刷新,容器id一直在变化,这个更能看出负载均衡的效果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值