您的位置:首页 > 运维架构 > Docker

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

2019-05-08 09:26 549 查看

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

一·搭建集群

三台主机都需要安装

[code][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 root@172.25.41.11
[code][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.

[code][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

 

[code][root@server1 ~]# docker node ls

三台主机都需要添加解析

[code][root@server1 ~]# vim /etc/hosts
172.25.41.250   westos.org
[code][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/  root@172.25.41.11:/etc/docker/
[root@foundation41 docker]# scp -r certs.d/ root@172.25.41.12:/etc/docker/
[root@foundation41 docker]# scp -r certs.d/ root@172.25.41.13:/etc/docker/
[root@foundation41 docker]# docker push westos.org/nginx

[code][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
[code][root@server1 westos.org]# docker service scale nginx=6
[root@server1 westos.org]# docker service ps nginx
# 实现负载均衡

网页访问会发现实现负载均衡 


【物理机】

[code][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】

[code]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 

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

【server2】

[code][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】

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

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

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

滚动更新

[code]物理机
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

[code][root@server1 ~]# docker service ps nginx

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: