使用Docker swarm構建wordpress集羣

   最近都在忙,久不更新博客了,今天更新下Docker swarm集羣和集羣容錯測試:php


一、以下拓撲:node

wKiom1kCsa2xmOL0AABna0UkZqc026.png


二、環境說明:mysql

Master/nfs服務器:192.168.63.217
Worker:192.168.63.217
Worker:192.168.63.216

三、建立一個nfs掛載目錄,用於存放wordpress代碼(63.217):linux

[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

四、掛載/web目錄(worker):nginx

[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代碼

五、把咱們在Dockerfile構建的鏡像推送到本地倉庫(這一塊能夠參考以前的博客,Dockerfile章節)web

[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到本地sql

六、構建Docker swarm集羣63.217操做:docker

[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節點上面操做,加入這個集羣:
bash

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

七、查看集羣的節點狀態:服務器

[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

八、爲了使得Docker swarm集羣容器互相通信,咱們先建立一個overlay網絡:

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

##注意內核版本要3.18以上,不夠的話要升級


九、隨機建立調度一個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

十、啓動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

十一、再啓動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

十二、咱們也能夠在複製出一個web service:

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

1三、看一下咱們的容器到底運行在哪一個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

1四、咱們已經確認全部的容器都已經起起來而且正常運行了,訪問一下web就能夠進行80端口的訪問了,192.168.63.217:

wKiom1kCx7KhKE6mAAD-az3Of0E450.png

###

wKiom1kCx7KymaRMAAC09aIyIkg356.png

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

wKioL1kCyA6RzeYiAADO6Ttre5k995.png


1五、爲了測試高可用性,咱們把node1節點關閉掉,看容器是否轉移:

咱們在node1執行關閉docker:

[root@node1 web]# systemctl stop docker

1六、在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


1七、咱們能夠看到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上,再次訪問也是不影響的:

wKiom1kCyOeD4KN7AABGKc_cgQI661.png


##處處已經完成了,咱們能夠看到經過Docker swarm構建集羣是很是簡單的,那麼有沒有compose能夠結合swarm呢?在compose v3版本以後就體現了這個功能的強大。

 

 

Docker詳情與集羣架構部分能夠查看http://www.roncoo.com/course/view/3e9d9c48f76f4c698b8349d04b763467

相關文章
相關標籤/搜索