使用Docker swarm构建高可用wordpress集群
最近都在忙,久不更新博客了,今天更新下Docker swarm集群和集群容错测试:
1、如下拓扑:
2、环境说明:
Master/nfs服务器:192.168.63.217 Worker:192.168.63.217 Worker:192.168.63.216
3、创建一个nfs挂载目录,用于存放wordpress代码(63.217):
[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)
[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章节)
[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操作:
[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节点上面操作,加入这个集群:
[root@node2 ~]#docker swarm join --token SWMTKN-1-37fe5tarzcy50mazbe1e3ewyblkfk7xf9kx9ncanz0wx3q70e1-a7wn9tiepd114if6smuiqlez3 192.168.63.217:2377
7、查看集群的节点状态:
[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网络:
[root@master docker]# docker network create --driver overlaynginx_network
##注意内核版本要3.18以上,不够的话要升级
9、随机创建调度一个9000端口的Php service运行Docker容器:
[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:
[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:
[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:
[root@master wordpress]# docker servicescale web=2 web scaled to 2
13、看一下我们的容器到底运行在哪个linux主机上呢:
[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
#####
[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:
###
####直接到安装完成:
15、为了测试高可用性,我们把node1节点关闭掉,看容器是否转移:
我们在node1执行关闭docker:
[root@node1 web]# systemctl stop docker
16、在master节点上查看一下状态:
[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节点上:
[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上,再次访问也是不影响的:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SpringBoot 与 Kotlin 完美交融
本文讲解 Spring Boot2 基础下,如何使用 Kotlin,并无缝整合与完美交融。为了让读者更加熟悉 Kotlin 的语法糖,笔者会在未来的几篇文章中,聊聊 Kotlin 的新特性及其语法糖。 环境依赖 修改 POM 文件,添加 spring boot 依赖。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactI...
- 下一篇
springboot如何测试打包部署
有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试、打包到最后的投产上线。 开发阶段 单元测试 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了。 1、在pom包中添加spring-boot-starter-test包引用 1.<dependency> 2.<groupId>org.springframework.boot</groupId> 3.<artifactId>spring-boot-starter-test</artifactId> 4.<scope>test</scope> 5.</dependency> 2、开发测试类 以最简单的helloworld为例,在测试类的类头部需要添加:@RunWith(SpringRunner.class)和@SpringBootTest注解,在测试方法的顶端添加@Test即可,最后在方法上点击右键r...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启