您现在的位置是:首页 > 文章详情

使用Docker swarm构建高可用wordpress集群

日期:2018-11-28点击:704

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



1、如下拓扑:

images/r74GATG3hydfSZNf5idGzw2f8mdhzJEJ.png

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:

images/mnwDH4aCdBemKCz2exEtKC8w6cpj5eZt.png

###

images/6ma3E5fTiQpcd3D4t2ykaCBEPCkhTdx2.png

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

images/fspBDz4fijMrD6NKKnn2RJSKyZ6KATHD.png


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上,再次访问也是不影响的:


原文链接:https://blog.roncoo.com/article/128165
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章