使用Docker swarm构建wordpress集群

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

   最近都在忙,久不更新博客了,今天更新下Docker swarm集群和集群容错测试:


1、如下拓扑:

wKiom1kCsa2xmOL0AABna0UkZqc026.png


2、环境说明:

1
2
3
Master /nfs 服务器:192.168.63.217
Worker:192.168.63.217
Worker:192.168.63.216

3、创建一个nfs挂载目录,用于存放wordpress代码(63.217):

1
2
3
4
5
6
7
[root@master ~] #yum install -y nfs-utils   
[root@master ~] ## cat /etc/exports
/web  192.168.63.0 /24 (rw, sync ,fsid=0)
[root@master ~] #systemctl enable rpcbind.service    
[root@master ~] #systemctl enable nfs-server.service    
[root@master ~] #systemctl start rpcbind.service    
[root@master ~] #systemctl start nfs-server.service

4、挂载/web目录(worker):

1
2
3
4
5
[root@node2 ~] #yum install -y nfs-utils
[root@node2 ~] #systemctl enable rpcbind.service
[root@node2 ~] #systemctl start rpcbind.service
[root@webstatus ~] # mount192.168.63.217:/web /web
##挂载之后上传wordpress代码

5、把我们在Dockerfile构建的镜像推送到本地仓库(这一块可以参考之前的博客,Dockerfile章节)

1
2
3
4
5
6
[root@masterwordpress] # docker image tag lnmp/php:1.0 192.168.63.217:5000/lnmp/php:1.0
[root@masterwordpress] # docker image tag lnmp/nginx:1.0 192.168.63.217:5000/lnmp/nginx:1.0
[root@masterwordpress] # docker image tag lnmp/mysql:1.0 192.168.63.217:5000/lnmp/mysql:1.0
[root@master wordpress] # docker push192.168.63.217:5000/lnmp/php:1.0
[root@master wordpress] # docker push192.168.63.217:5000/lnmp/nginx:1.0
[root@master wordpress] # docker push192.168.63.217:5000/lnmp/mysql:1.0

##为了worker节点下载速度快点,我们建议先docker pull到本地

6、构建Docker swarm集群63.217操作:

1
2
3
4
5
6
[root@master~] # docker swarm init --advertise-addr 192.168.63.217
To add a worker to this swarm, run the following  command :
  
     docker swarm  join  \
     --tokenSWMTKN-1-37fe5tarzcy50mazbe1e3ewyblkfk7xf9kx9ncanz0wx3q70e1-a7wn9tiepd114if6smuiqlez3\
     192.168.63.217:2377

##在worker节点上面操作,加入这个集群:

1
[root@node2 ~] #docker swarm join  --token SWMTKN-1-37fe5tarzcy50mazbe1e3ewyblkfk7xf9kx9ncanz0wx3q70e1-a7wn9tiepd114if6smuiqlez3 192.168.63.217:2377

7、查看集群的节点状态:

1
2
3
4
5
[root@master wordpress] # docker node ls
ID                           HOSTNAME  STATUS AVAILABILITY  MANAGER STATUS
e9naz0ctzaaer4bwleruo34x6 *  master   Ready   Active        Leader
rfcbavxd8yrixximm9e1i6dsn    node1    Ready   Active        
shrzku0k3xx87526lkkkyrxsi    node2    Ready   Active

8、为了使得Docker swarm集群容器互相通讯,我们先创建一个overlay网络:

1
[root@master docker] # docker network create --driver overlaynginx_network

##注意内核版本要3.18以上,不够的话要升级


9、随机创建调度一个9000端口的Php service运行Docker容器:

1
2
3
4
[root@masterwordpress] # docker service create --mount type=bind,source=/web/,target=/web/--network nginx_network --name php -p 9000:9000192.168.63.217:5000/lnmp/php:1.0 
[root@masterwordpress] # docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE
ira3ezabroai        php                 replicated          1 /1                  192.168.63.217:5000 /lnmp/php :1.0

10、启动nginx service:

1
[root@masterwordpress] #docker service create --mount type=bind,source=/web/,target=/web/ --network nginx_network --name web -p 80:80 192.168.63.217:5000/lnmp/nginx:1.0

11、再启动mysql service:

1
[root@masterwordpress] # docker service create --mounttype=bind,source=/data/,target=/var/lib/mysql/ --network nginx_network --namemysql -p 3306:3306 192.168.63.217:5000/lnmp/mysql:1.0

12、我们也可以在复制出一个web service:

1
2
[root@master wordpress] # docker servicescale web=2
web scaled to 2

13、看一下我们的容器到底运行在哪个linux主机上呢:

1
2
3
4
5
[root@master wordpress] # docker service ls
ID                 NAME                MODE                REPLICAS            IMAGE
ira3ezabroai       php                replicated          1 /1                  192.168.63.217:5000 /lnmp/php :1.0
kcxqzxwe0dzb       mysql              replicated          1 /1                  192.168.63.217:5000 /lnmp/mysql :1.0
ufn1n5phtsqn        web                replicated          2 /2                 192.168.63.217:5000 /lnmp/nginx :1.0

#####

1
2
3
4
5
6
7
8
9
10
[root@master wordpress] # docker service ps php
ID                 NAME                IMAGE                              NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
ptxokpvq1b7s       php.1              192.168.63.217:5000 /lnmp/php :1.0  master              Running             Running 5 minutes ago                       
[root@master wordpress] # docker service ps mysql
ID                  NAME                IMAGE                                NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
zowbxqnr9toi       mysql.1            192.168.63.217:5000 /lnmp/mysql :1.0  node2               Running             Running 2 minutes ago                       
[root@master wordpress] # docker service ps web
ID                 NAME                IMAGE                                NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
vhk44hij7gnu       web.1              192.168.63.217:5000 /lnmp/nginx :1.0  node1               Running             Running 3 minutes ago                            
u1vdnr0ujzl7       web.2              192.168.63.217:5000 /lnmp/nginx :1.0  node2               Running             Running about a minute ago

14、我们已经确认所有的容器都已经起起来并且正常运行了,访问一下web就可以进行80端口的访问了,192.168.63.217:

wKiom1kCx7KhKE6mAAD-az3Of0E450.png

###

wKiom1kCx7KymaRMAAC09aIyIkg356.png

####直接到安装完成:

wKioL1kCyA6RzeYiAADO6Ttre5k995.png


15、为了测试高可用性,我们把node1节点关闭掉,看容器是否转移:

我们在node1执行关闭docker:

1
[root@node1 web] # systemctl stop docker

16、在master节点上查看一下状态:

1
2
3
4
5
[root@master web] # docker node ls
ID                          HOSTNAME  STATUS  AVAILABILITY MANAGER STATUS
e9naz0ctzaaer4bwleruo34x6 * master    Ready   Active       Leader
rfcbavxd8yrixximm9e1i6dsn   node1     Down    Active        
shrzku0k3xx87526lkkkyrxsi   node2     Ready   Active


17、我们可以看到node1节点已经Down,然后我们的Docker 容器也已经转移到了别的worker节点上:

1
2
3
4
5
6
7
8
9
10
11
[root@master web] # docker service ps php
ID                 NAME                IMAGE                              NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
ptxokpvq1b7s       php.1              192.168.63.217:5000 /lnmp/php :1.0  master              Running             Running 18 minutes ago                       
[root@master web] # docker service ps mysql
ID                  NAME                IMAGE                                NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
zowbxqnr9toi       mysql.1            192.168.63.217:5000 /lnmp/mysql :1.0  node2               Running             Running 15 minutes ago                       
[root@master web] # docker service ps web
ID                 NAME                IMAGE                                NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
jqcuqzjdgi9y       web.1              192.168.63.217:5000 /lnmp/nginx :1.0  master              Running             Running 2 minutes ago                        
vhk44hij7gnu         \_web.1          192.168.63.217:5000 /lnmp/nginx :1.0  node1               Shutdown            Running 2 minutes ago                        
u1vdnr0ujzl7       web.2              192.168.63.217:5000 /lnmp/nginx :1.0  node2               Running             Running 14 minutes ago

##我们可以看到在node1节点上之前运行的容器已经shutdown了,然后转移到了master和node2上,再次访问也是不影响的:

wKiom1kCyOeD4KN7AABGKc_cgQI661.png


##到处已经完成了,我们可以看到通过Docker swarm构建集群是非常简单的,那么有没有compose可以结合swarm呢?在compose v3版本之后就体现了这个功能的强大。

 

 

Docker详情与集群架构部分可以查看http://www.roncoo.com/course/view/3e9d9c48f76f4c698b8349d04b763467










本文转自 小罗ge11 51CTO博客,原文链接:http://blog.51cto.com/xiaoluoge/1920377,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
235
分享
相关文章
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
297 91
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
145 8
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
229 8
Docker Swarm
Docker Swarm 为容器化应用的部署和管理提供了一种高效、可靠的方式,使开发者能够更轻松地构建和运行分布式应用。随着容器技术的不断发展,Docker Swarm 在企业级应用中的应用也将越来越广泛。
106 8
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
116 6
Docker Swarm 核心概念及详细使用
Docker Swarm 是 Docker 的原生集群管理工具,用于将多个 Docker 主机整合成一个虚拟主机,提供集群管理和调度功能。其核心特点包括集群管理、容错与高可用性、负载均衡、声明式服务模型、服务发现和安全性。本文档详细介绍了 Docker Swarm 的安装配置、服务部署、节点管理、网络配置及故障模拟等关键操作,适用于中小型项目或对 Kubernetes 复杂性有所顾虑的用户。
334 6
Docker Swarm、Docker Stack和Portainer的使用
Docker Swarm、Docker Stack 和 Portainer 各有其独特的功能和优势。Docker Swarm 适用于分布式服务的管理和编排,Docker Stack 便于多容器应用的定义和部署,而 Portainer 提供了直观的 UI,简化了 Docker 环境的管理。结合使用这些工具,可以大大提高容器化应用的部署和管理效率。希望本文对您理解和应用这些工具有所帮助。
285 5
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
Docker概述:什么Docker如此特别,它是如何构建的
本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。
1397 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等