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
相关文章推荐
- Docker Swarm集群实现负载均衡
- 搭建linux服务器集群,简单实现,负载均衡,动静分离,数据主从复制,分布式缓存,共享session回话。
- Windows下使用Nginx搭建Tomcat集群实现负载均衡,同时实现session共享
- 使用ubuntu+haproxy+heartbeat搭建大规模WEB集群环境实现负载均衡。
- 使用LVS+DR搭建集群实现负载均衡
- Nginx+Tomcat搭建高性能负载均衡集群的实现方法
- 用Nginx搭建IIS集群实现负载均衡
- 搭建LVS实现负载均衡集群服务
- 架构之路:nginx与IIS服务器搭建集群实现负载均衡
- 使用LVS+TUN搭建集群实现负载均衡
- 10分钟搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡
- 使用LVS+TUN搭建集群实现负载均衡
- 使用LVS+NAT搭建集群实现负载均衡
- 使用LVS+TUN搭建集群实现负载均衡
- Swarm实现Docker集群的搭建和管理。
- 使用LVS+DR搭建集群实现负载均衡
- docker简易搭建MySQL集群的负载均衡
- LVS搭建集群实现负载均衡-NAT模式