Linux下Docker Swarm集群实现负载均衡(一)

一.初识Swarm

 

Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理 Docker 集群,它将一群 Docker 宿主机变成

一个单一的,虚拟的主机。Swarm 使用标准的 Docker API接口作为其前端访问入口。换言之,各种形式的 Docker  Client

(docker client in go,docker_py,docker 等)均可以直接与 Swarm 通信。Swarm 几乎全部用 Go 语言来完成开发。Swarm

deamon 只是一个调度器(Scheduler)加路由器(router),Swarm 自己不运行容器,它只是接受 docker 客户端发送过来的请求,

调度适合的节点来运行容器,这意味着,即使Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复

运行之后,它会收集重建集群信息。

 

这里写图片描述

 

二.实验环境(rhel7.3版本)

1.selinux和firewalld状态为disabled

2.各主机信息如下:

主机ip
server1(manager)172.25.83.1
server2(node)172.25.83.2
server3(node)172.25.83.3
foundation83(用来测试)172.25.83.83

3.删除之前的docker-compose,以免占用80端口,影响后续的实验

[root@server1 compose]# docker-compose stop   #停掉docker-compose
[root@server1 compose]# docker-compose rm   #删除docker-compose

 

三.Docker Swarm集群的搭建部署

 

Docker Swarm集群的搭建

 

1、三个节点安装Docker并开启服务

 

[root@server1 ~]# ls
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm

[root@server1 ~]# yum install -y *     #安装docker服务

[root@server1 ~]# systemctl start docker   #启动docker服务

##server2,server3类似

 

2、在serever1(manager节点)上初始化集群(swarm)

 

[root@server1 ~]# docker swarm init

 

  • 在server1节点上查看桥接信息

  • 在server1节点上查看docker的网络信息

 

3、server2,server3(worker节点)加入集群

 

[root@server2 ~]# docker swarm join \
> --token SWMTKN-1-36j2ld6xqyfjspr2c05i3qnutapuk4x89nha6w0nfbr1mg3krb3dc4aphv0jxu0wuivo2eviirk \
> 172.25.83.1:2377

[root@server3 ~]# docker swarm join \
> --token SWMTKN-1-36j2ld6xqyfjspr2c05i3qnutapuk4x89nha6w0nfbr1mg3krb3dc4aphv0jxu0wuivo2eviirk \
> 172.25.83.1:2377
  • 在server1(manager节点)查看节点信息

 

  • 在server2节点上查看桥接信息(server3上类似)

  • 在server2节点上查看docker的网络信息(server3类似)

 

部署服务:

 

1、三个节点都要导入nginx镜像

 

##首先在网上下载nginx.tar

[root@server1 ~]# docker load -i nginx.tar 
[root@server2 ~]# docker load -i nginx.tar 
[root@server3 ~]# docker load -i nginx.tar 

 

2、在manager节点上部署了一个Nginx容器

 

[root@server1 ~]# docker network create -d overlay my_net1   #创建驱动为overlay的网络
[root@server1 ~]# docker service create --name web  \
> --network my_net1 \
> --replicas 3 \   #–replicas 3就是代表集群的个数变为3。manager会将容器平均分配到三个节点上
> -p 8080:80 \   #或-publish 8080:80或-publish=8080:80/tcp
> nginx   #创建一个名称为web,副本为3,开放端口为80的nginx容器

#这里使用的是自己创建的驱动为overlay的网络(值的一提的是:如果这里指定网络,则必须是驱动为overlay的网络)。当然也可以不加--network my_net1,使用默认的网络。只是使用自己的网络,可能出现的问题会比较少。
  • 查看8080端口

 

  • 查看docker服务列表

 

  • 查看docker的web服务

 

  • 查看三台主机节点的nginx服务的默认发布页

 

 

 

2、三个节点都要操作:从容器中复制文件到主机nginx默认发布目录

 

[root@server1 ~]# vim index.html
server1
[root@server1 ~]# docker cp index.html 62455b51943c:/usr/share/nginx/html

 

server2,server3同上

 

[root@server2 ~]# vim index.html
server2
[root@server2 ~]# docker cp index.html be458c39a36d:/usr/share/nginx/html

 

[root@server3 ~]# vim index.html
server3
[root@server3 ~]# docker cp index.html 21f473c4785f:/usr/share/nginx/html

 

3、在物理机上测试(负载均衡)

 

 

 

 


有人在测试的过程中,可能会出现这样的问题:一会儿有结果,一会儿没有结果,这是为什么呢?原因是什么呢?

答:

检查宿主机server1,server2和测试主机的防火墙有没有关。如果没有关,那么关掉防火墙,然后再进行测试。


 

四.容器在线扩张以及压缩(增加或减少服务数目)

 

注意:增加或减少服务数目,直接对scale的数据设置即可

 

1.增加scale的数目(需要部署新添加进来的容器)

 

[root@server1 ~]# docker service scale web=6
  • 增加scale数目

 

三个节点都要操作:从容器中复制文件到主机nginx默认发布目录

配置server1:

[root@server1 ~]# vim index.html
server4
[root@server1 ~]# docker cp index.html f5310d565a56:/usr/share/nginx/html

 

配置server2:

[root@server2 ~]# vim index.html
server5
[root@server2 ~]# docker cp index.html 437d062ab278:/usr/share/nginx/html

 

配置server3:

[root@server3 ~]# vim index.html
server6
[root@server3 ~]# docker cp index.html a57e027608c9:/usr/share/nginx/html

 

在物理机上进行测试(负载均衡):

 

2.减少scale的数目(不需要部署新添加进来的容器)

 

[root@server1 ~]# docker service scale web=3
  • 减少scale数目

 

直接在物理机进行测试(负载均衡):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值