企业级 ##Docker 集群搭建(nginx负载均衡)滚动更新##

集群搭建

1.Swarm原理:
Swarm项目正是这样,通过把多个Docker Engine聚集在一起,形成一个大的docker-engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。

2.Swarm 特点

 ▲对外以Docker API接口呈现,这样带来的好处是,如果现有系统使用Docker Engine,则可以平滑将Docker Engine切到Swarm上,无需改动现有系统。
 ▲Swarm 对用户来说,之前使用Docker的经验可以继承过来。非常容易上手,学习成本和二次开发成本都比较低。同时Swarm本身专注于Docker集群管理, 非常轻量,占用资源也非常少。 *“Batteries included but swappable”,简单说,就是插件化机制,Swarm中的各个模块都抽象出了API,可以根据自己一些特点进行定制实现。
 ▲Swarm自身对Docker命令参数支持的比较完善,Swarm目前与Docker是同步发布的。Docker的新功能,都会第一时间在Swarm中体现。

3.环境介绍:

系统为linux7.3版本
关闭防火墙 systemctl stop firewalld.service 
关闭selinux vim /etc/selinux/comfig
【server1】:172.25.39.11   swarm      以【server1】为主搭建集群
【server2】:172.25.39.12
【server3】:172.25.39.13

这里写图片描述
这里写图片描述
4.搭建集群:
(1)【server1】搭建主节点:

[root@server1 ~]# ls
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
[root@server1 ~]# yum install -y docker-engine-*
[root@server1 ~]# systemctl start docker     ##打开docker服务
[root@server1 ~]# docker swarm init    #初始化
当前主机上启动swarm模式,要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥

这里写图片描述
(2)【server2】搭建node1节点:

[root@server2 ~]# ls
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
[root@server2 ~]# yum install * -y
[root@server2 ~]# systemctl start docker
[root@server2 ~]#     docker swarm join \
>     --token SWMTKN-1-52ppekqqbl06qdk23onaqa7txzku0q4mxazyi325nz4w4slkeg-0lybzr54rqypko80a0qsyylcs \
>     172.25.39.11:2377   # 加入到swarm集群中,这是【server1】中的token

(3)【server3】搭建node2节点:

[root@server3 ~]# ls
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
[root@server3 ~]# yum install * -y
[root@server3 ~]# systemctl start docker
[root@server3 ~]#     docker swarm join \
>     --token SWMTKN-1-52ppekqqbl06qdk23onaqa7txzku0q4mxazyi325nz4w4slkeg-0lybzr54rqypko80a0qsyylcs \
>     172.25.39.11:2377   # 加入到swarm集群中,这是【server1】中的token

(4)在【server1】中查看集群:

[root@sever11 ~]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
7que1qz0gzlbczlp9nhwgn4w8    server2  Down    Active        
hydzxcxd6z1oulnvpmeuj2o9z *  sever1   Ready   Active        Leader      ##【server1】为主
jemfvpsq3r2e3taujl44fgrzy    server3  Down    Active 

5.部署docker集群配置:

[root@foundation39 ~]# docker ps
[root@foundation39 ~]# docker run -d \
> --restart=always \
> --name registry \
> -v `pwd`/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
> -p 443:443 \
> registry:2
[root@foundation39 docker]# docker ps
[root@foundation39 docker]# docker push westos.org/nginx

这里写图片描述

6.将物理主机的证书服务传到三台服务机上:

[root@foundation39 ~]# cd /etc/docker/
[root@foundation39 docker]# ls
certs.d  daemon.json  key.json      
[root@foundation39 docker]# scp -r certs.d/ root@172.25.39.11:/etc/docker
[root@foundation39 docker]# scp -r certs.d/ root@172.25.39.12:/etc/docker
[root@foundation39 docker]# scp -r certs.d/ root@172.25.39.13:/etc/docker

7.在【server1】【server2】【server3】上添加域名解析:

[root@server1 ~]# vim /etc/hosts
172.25.39.250  westos.org

8.在【server1】manager节点部署nginx服务,服务数量为3个,公开指定端口是8080映射容器80,使用nginx镜像:

[root@server1 ~]# docker service create --name nginx --publish 80:80 --replicas 3 westos.org/nginx     #创建nginx服务
[root@server1 ~]# docker service ls    #开启过程慢
[root@server1 ~]# docker service ls
[root@server1 ~]# docker service ps nginx

这里写图片描述

9.再将nginx加到6个,查看进程状态:

[root@server1 ~]# docker service scale nginx=6
[root@server1 ~]# docker service ps nginx

这里写图片描述
查看进程:[root@server1 ~]# docker ps
这里写图片描述
【测试】:再真机网页中:
这里写图片描述
这里写图片描述
这里写图片描述


负载均衡

1.在真机上安装服务:

visualizer.tar 
[root@foundation39 ~]# docker load -i visualizer.tar 
[root@foundation39 ~]# docker images
    dockersamples/visualizer   latest              17e55a9b2354        11 months ago       148 MB
[root@foundation39 ~]# docker tag dockersamples/visualizer westos.org/visualizer    #更换名字
[root@foundation39 ~]# docker push westos.org/visualizer

【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 \
> westos.org/visualizer
[root@sever11 ~]# docker service scale nginx=6
nginx scaled to 6
[root@sever11 ~]# docker service ls
ID            NAME   MODE        REPLICAS  IMAGE
0mw2jsas5bnj  nginx  replicated  6/6       westos.org/rhel7:v1
xtz0d9migqbn  viz    replicated  1/1       westos.org/visualizer:latest
                                 ##开启viz服务较慢,等到1/1才算建立完成
[root@server1 ~]# docker service scale nginx=3
[root@server1 ~]# docker ps
[root@server1 ~]# echo server1 > index.html
[root@server1 ~]# docker container cp index.html nginx.3.8e8h01k29kfxvy1g0lh3mjcl9:/usr/share/nginx/html

这里写图片描述

【server2】

[root@server2 ~]# docker ps
[root@server2 ~]# echo server2 > index.html
[root@server2 ~]# docker container cp index.html nginx.4.yab0b56egf6d1qf5xdzvvb3lo:/usr/share/nginx/html

这里写图片描述

【server3】

[root@server3 ~]# docker ps
[root@server3 ~]#  echo server3 > index.html
[root@server3 ~]# docker container cp index.html nginx.2.w5ibu3y3jl6sctmiglkxz13r1:/usr/share/nginx/html

这里写图片描述
2.在真机上查看是否有负载均衡:[root@foundation39 ~]# for i in {1..10}; do curl 172.25.40.11;done
这里写图片描述
3.【测试】:网页访问http://172.25.39.11:8080/查看三台主机的nginx负载均衡如果任意关闭一台主机的docker,此时的负载均衡就在两台主机上实现
这里写图片描述


滚动更新

[root@foundation39 ~]# docker images
[root@foundation39 ~]# docker tag rhel7:v1 westos.org/rhel7:v1
[root@foundation39 ~]# docker push westos.org/rhel7:v1
[root@server1 ~]# docker service scale nginx=30
[root@server1 ~]# docker service update --image westos.org/rhel7:v1 --update-parallelism 3 --update-delay 10s nginx

【测试】:网页访问http://172.25.39.11:8080/
这里写图片描述
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值