Docker swarm搭建集群以及实现负载均衡

Docker 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 重新恢复运行之后,它会收集重建集群信息

Swarm 的结构图

这里写图片描述

实验环境

系统:rhel7 
server1 172.25.41.11 
server2 172.25.41.12 
server3 172.25.41.13 
物理机 172.25.41.250

一·搭建集群

三台主机都需要安装

[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 *
[root@server1 ~]# systemctl start docker
root@server1 ~]# yum install -y bash-*    #下载后需要退出再次登陆
[root@foundation41 images]# ssh [email protected]
[root@server1 ~]# docker swarm init 
Swarm initialized: current node (297d6raqk1k6wv9b9totipqw6) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-2ygj71qpcyda7k802zu0adgk6ly8z3e80jyd0bcxg3g9ajhnl9-bh2zozew8cg76t0i6jscn9dgb \
    172.25.41.11:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

这里写图片描述

[root@server2 ~]# docker swarm join \
> --token SWMTKN-1-2ygj71qpcyda7k802zu0adgk6ly8z3e80jyd0bcxg3g9ajhnl9-bh2zozew8cg76t0i6jscn9dgb \
> 172.25.41.11:2377

[root@server3 ~]# docker swarm join \
> --token SWMTKN-1-2ygj71qpcyda7k802zu0adgk6ly8z3e80jyd0bcxg3g9ajhnl9-bh2zozew8cg76t0i6jscn9dgb \
> 172.25.41.11:2377

这里写图片描述 
这里写图片描述

[root@server1 ~]# docker node ls

这里写图片描述

三台主机都需要添加解析

[root@server1 ~]# vim /etc/hosts
172.25.41.250   westos.org
[root@foundation41 westos.org]# cd /tmp/docker/
[root@foundation41 docker]# pwd
/tmp/docker
[root@foundation41 docker]# 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@foundation41 docker]# docker ps -a
[root@foundation41 docker]# cd /etc/docker/
[root@foundation41 docker]# scp -r certs.d/  [email protected]:/etc/docker/
[root@foundation41 docker]# scp -r certs.d/ [email protected]:/etc/docker/
[root@foundation41 docker]# scp -r certs.d/ [email protected]:/etc/docker/
[root@foundation41 docker]# docker push westos.org/nginx

这里写图片描述

[root@server1 ~]# docker pull westos.org/nginx
[root@server1 ~]# docker service create --name nginx --publish 80:80 --replicas 3 westos.org/nginx
#在manager节点部署nginx服务,服务数量为3个,公开指定端口是8080映射容器80,使用nginx镜像
[root@server1 ~]# docker service ls
[root@server1 westos.org]# docker service ps nginx 
  • 这里写图片描述
[root@server1 westos.org]# docker service scale nginx=6
[root@server1 westos.org]# docker service ps nginx
# 实现负载均衡

这里写图片描述

网页访问会发现实现负载均衡 
这里写图片描述
这里写图片描述
这里写图片描述

【物理机】

[root@foundation41 docker]# docker load -i visualizer.tar 
[root@foundation41 docker]# docker images
[root@foundation41 docker]# docker tag dockersamples/visualizer westos.org/visualizer
[root@foundation41 docker]# docker push westos.org/visualizer

这里写图片描述

【server1】

root@server1 westos.org]# 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@server1 westos.org]# docker service ls

这里写图片描述

网页访问:172.25.41.11:8080 
这里写图片描述

[root@server1 ~]# docker service scale nginx=3
[root@server1 ~]# docker service ps nginx       
[root@server1 ~]# docker ps       
[root@server1 ~]# echo server1 > index.html
[root@server1 ~]# docker container cp index.html nginx.5.alzrk6pwrp5cwkkhwxaeon92c:/usr/share/nginx/html

这里写图片描述

【server2】

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

这里写图片描述

【server3】

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

这里写图片描述

在物理机测试,是否实现负载均衡

[root@foundation41 docker]# for i in {1..10}; do curl 172.25.41.11;done

这里写图片描述

滚动更新

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

这里写图片描述

[root@server1 ~]# docker service ps nginx

这里写图片描述

猜你喜欢

转载自blog.csdn.net/lyn0503/article/details/85338895