使用Docker swarm构建wordpress集群

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

   最近都在忙,久不更新博客了,今天更新下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,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
安全 关系型数据库 开发者
Docker Compose凭借其简单易用的特性,已经成为开发者在构建和管理多容器应用时不可或缺的工具。
Docker Compose是容器编排利器,简化多容器应用管理。通过YAML文件定义服务、网络和卷,一键启动应用环境。核心概念包括服务(组件集合)、网络(灵活通信)、卷(数据持久化)。实战中,编写docker-compose.yml,如设置Nginx和Postgres服务,用`docker-compose up -d`启动。高级特性涉及依赖、环境变量、健康检查和数据持久化。最佳实践涵盖环境隔离、CI/CD、资源管理和安全措施。案例分析展示如何构建微服务应用栈,实现一键部署。Docker Compose助力开发者高效驾驭复杂容器场景。
28 1
|
22天前
|
Java Docker 容器
使用 Spring Boot 构建 Docker 镜像并进行多模式部署
使用 Spring Boot 构建 Docker 镜像并进行多模式部署
72 2
|
7天前
|
关系型数据库 MySQL 数据安全/隐私保护
Docker01,相关介绍,是快速构建、运行、管理应用的工具
Docker01,相关介绍,是快速构建、运行、管理应用的工具
|
14天前
|
缓存 运维 Devops
阿里云云效操作报错合集之在构建过程中,Docker尝试从缓存中获取某个文件(或计算缓存键)时遇到了问题,该如何处理
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
14天前
|
Docker 容器
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
|
28天前
|
缓存 Linux Docker
docker 跨平台构建镜像
docker 跨平台构建镜像
36 0
|
28天前
|
Linux Docker Python
【docker】Mac M1 构建 x64 linux镜像
【docker】Mac M1 构建 x64 linux镜像
37 0
|
2月前
|
安全
SiteGround如何设置WordPress网站自动更新
iteGround Autoupdate功能会自动帮我们更新在他们这里托管的所有WordPress网站,这样做是为了保证网站安全,并且让它们一直保持最新状态。他们会根据我们选择的设置自动更新不同版本的WordPress,包括主要版本和次要版本。在每次自动更新之前,他们都会为我们的网站做一个完整的备份,这样如果有什么问题,我们可以轻松地恢复到之前的状态。在本文中,我们将介绍如何在SiteGround中设置WordPress网站自动更新。
503 0
SiteGround如何设置WordPress网站自动更新
|
2月前
|
关系型数据库 MySQL Apache
怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?
怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?
532 1
|
6天前
【wordpress教程】wordpress博客网站添加非法关键词拦截
有的网站经常被恶意搜索,站长们不胜其烦。那我们如何屏蔽恶意搜索关键词呢?下面就随小编一起来解决这个问题吧。
15 1