使用Docker swarm构建wordpress集群
? ?最近都在忙,久不更新博客了,今天更新下Docker swarm集群和集群容錯測試:
1、如下拓撲:
2、環境說明:
Master/nfs服務器:192.168.63.217 Worker:192.168.63.217 Worker:192.168.63.2163、創建一個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.service4、掛載/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?p_w_picpath?tag?lnmp/php:1.0?192.168.63.217:5000/lnmp/php:1.0 [root@masterwordpress]#?docker?p_w_picpath?tag?lnmp/nginx:1.0?192.168.63.217:5000/lnmp/nginx:1.0 [root@masterwordpress]#?docker?p_w_picpath?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.010、啟動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.011、再啟動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.012、我們也可以在復制出一個web service:
[root@master?wordpress]#?docker?servicescale?web=2 web?scaled?to?213、看一下我們的容器到底運行在哪個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?ago14、我們已經確認所有的容器都已經起起來并且正常運行了,訪問一下web就可以進行80端口的訪問了,192.168.63.217:
###
####直接到安裝完成:
15、為了測試高可用性,我們把node1節點關閉掉,看容器是否轉移:
我們在node1執行關閉docker:
[root@node1?web]#?systemctl?stop?docker16、在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???Active17、我們可以看到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上,再次訪問也是不影響的:
##到處已經完成了,我們可以看到通過Docker swarm構建集群是非常簡單的,那么有沒有compose可以結合swarm呢?在compose v3版本之后就體現了這個功能的強大。
?
?
Docker詳情與集群架構部分可以查看http://www.roncoo.com/course/view/3e9d9c48f76f4c698b8349d04b763467
轉載于:https://blog.51cto.com/xiaoluoge/1920377
總結
以上是生活随笔為你收集整理的使用Docker swarm构建wordpress集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动化运维工具SaltStack详细部署
- 下一篇: SQL Server 2016 列存储技