「實戰篇」開源專案docker化運維部署-藉助dockerSwarm搭建叢集部署(九)
為了讓學習的知識融匯貫通,目前是把所有的叢集都放在了一個虛擬機器上,如果這個虛擬機器宕機了怎麼辦?俗話說雞蛋不要都放在一個籃子裡面,把各種叢集的節點拆分部署,應該把各種節點分機器部署,多個宿主機,這樣部署隨便掛哪個主機我們都不擔心。
原始碼:https://github.com/limingios/netFuture/blob/master/docker-swarm/
一起在說說docker swarm
swarm 是docker的三劍客一員,之前都說過了,可以看中級和高階啊 。
1. docker machine 容器服務
2. docker compose 指令碼服務
3. docker swarm 容器叢集技術
-
去中心化的設計
>Swarm Manager 也承擔worker節點的作用。
>Swarm Worker 執行容器部署專案
Swarm是沒有中心節點的,掛到其中一個其他是不會掛掉的。Swarm Manager 如果master掛了,立馬選舉一個新的master。
-
建立叢集環境
>首先機器已經安裝了docker環境。
docker swarm init
- 加入swarm叢集
#加入到manager中 docker swarm join-token manager #加入到worker中 docker swarm join-token worker
環境搭建
應用 | IP地址 | 服務 | 配置 | 安裝應用 | 安裝方式 |
---|---|---|---|---|---|
docker-swarm-manager1 | 192.168.66.100 | docker-swarm-manager1 | 單核 2g記憶體 | docker-swarm-manager1 | docker |
docker-swarm-manager2 | 192.168.66.101 | docker-swarm-manager2 | 單核 2g記憶體 | docker-swarm-manager2 | docker |
docker-swarm-node1 | 192.168.66.102 | docker-swarm-node1 | 單核 2g記憶體 | docker-swarm-node1 | docker |
docker-swarm-node2 | 192.168.66.103 | docker-swarm-node2 | 單核 2g記憶體 | docker-swarm-node2 | docker |
docker swarm環境
一共4個節點,2個manager節點,2個work節點,manager不光是管理,而且也幹活,說白了一共4個幹活的節點。
建立docker swarm叢集
su - #密碼vagrant docker swarm init
報錯注意:如果你在新建叢集時遇到雙網絡卡情況,可以指定使用哪個 IP,例如上面的例子會有可能遇到下面的錯誤。
Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces (10.0.2.15 on enp0s3 and 192.168.66.100 on enp0s8) - specify one with --advertise-addr
再次建立docker swarm叢集192.168.66.100
docker swarm init --advertise-addr 192.168.66.100 --listen-addr 192.168.66.100:2377 docker swarm join-token manager
再次建立docker swarm叢集192.168.66.101
當前節點以manager的身份加入swarm叢集
docker swarm join --token SWMTKN-1-4itumtscktomolcau8a8cte98erjn2420fy2oyj18ujuvxkkzx-9qutkvpzk87chtr4pv8770mcb 192.168.66.100:2377
再次建立docker swarm叢集192.168.66.102
當前節點以worker的身份加入swarm叢集
docker swarm join --token SWMTKN-1-4itumtscktomolcau8a8cte98erjn2420fy2oyj18ujuvxkkzx-f2dlt8g3hg86gyc9x6esewtwl 192.168.66.100:2377
再次建立docker swarm叢集192.168.66.103
當前節點以worker的身份加入swarm叢集
docker swarm join --token SWMTKN-1-4itumtscktomolcau8a8cte98erjn2420fy2oyj18ujuvxkkzx-f2dlt8g3hg86gyc9x6esewtwl 192.168.66.100:2377
檢視swarm叢集
只能在manager節點內執行
leader掛掉後,reachable就可以管理叢集了。
docker node ls
檢視swarm叢集的網路
只能在manager節點內執行
docker network ls
建立容器間的共享網路
只能在manager節點內執行
docker network create -d overlay --attachable swarm_test docker network ls
目前是4臺機器,如果想讓4臺機器內的容器可以進行共享,overlay的網路就可以了,只需要在建立容器的時候–net=swarm_test
建立5個pxc容器
-
192.168.66.100
>建立2個容器。之前也說過如何建立,最為重要的是共享網路一定要使用swarm的共享網路。
docker volume create v1 docker volume create backup1 #增加域名解析 echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io sudo systemctl restart docker docker run -d -p 3306:3306--net=swarm_test \ --name=node1 \ -e CLUSTER_NAME=PXC \ -e MYSQL_ROOT_PASSWORD=a123456 \ -e XTRABACKUP_PASSWORD=a123456 \ -v v1:/var/lib/mysql \ --privileged \ -v backup1:/data \ percona/percona-xtradb-cluster docker ps
docker volume create v2 docker run -d -p 3307:3306--net=swarm_test \ --name=node2 \ -e CLUSTER_NAME=PXC \ -e MYSQL_ROOT_PASSWORD=a123456 \ -e XTRABACKUP_PASSWORD=a123456 \ -v v2:/var/lib/mysql \ --privileged \ -v backup1:/data \ -e CLUSTER_JOIN=node1 \ percona/percona-xtradb-cluster docker ps
-
192.168.66.101
>建立1個容器。之前也說過如何建立,最為重要的是共享網路一定要使用swarm的共享網路。
docker volume create v3 docker volume createbackup3 docker run -d -p 3307:3306--net=swarm_test \ --name=node3 \ -e CLUSTER_NAME=PXC \ -e MYSQL_ROOT_PASSWORD=a123456 \ -e XTRABACKUP_PASSWORD=a123456 \ -v v3:/var/lib/mysql \ --privileged \ -v backup3:/data \ -e CLUSTER_JOIN=node1 \ percona/percona-xtradb-cluster docker ps
-
192.168.66.102
>建立1個容器。之前也說過如何建立,最為重要的是共享網路一定要使用swarm的共享網路。
docker volume create v4 docker volume createbackup4 docker run -d -p 3307:3306--net=swarm_test \ --name=node4 \ -e CLUSTER_NAME=PXC \ -e MYSQL_ROOT_PASSWORD=a123456 \ -e XTRABACKUP_PASSWORD=a123456 \ -v v4:/var/lib/mysql \ --privileged \ -v backup4:/data \ -e CLUSTER_JOIN=node1 \ percona/percona-xtradb-cluster docker ps
-
192.168.66.103
>建立1個容器。之前也說過如何建立,最為重要的是共享網路一定要使用swarm的共享網路。
docker volume create v4 docker volume createbackup4 docker run -d -p 3307:3306--net=swarm_test \ --name=node4 \ -e CLUSTER_NAME=PXC \ -e MYSQL_ROOT_PASSWORD=a123456 \ -e XTRABACKUP_PASSWORD=a123456 \ -v v4:/var/lib/mysql \ --privileged \ -v backup4:/data \ -e CLUSTER_JOIN=node1 \ percona/percona-xtradb-cluster docker ps
容器叢集
在這個示意圖裡面,畫了4個linux的主機,都安裝了docker虛擬機器,假如我現在想安裝A程式,直接選擇Docker-1這個主機裡面的容器安裝A程式,這樣沒有問題。但是單節點單容器來部署,一旦這個節點掛掉的話,A程式就沒有,為了防止這樣我們有冗餘設計,直接在Docker-2這個主機裡面的容器也安裝A程式,這樣的話,Docker-1裡面的A程式掛了,Docker-2裡面的A程式也可以執行。這個功能有點像負載均衡,其實真的很像。docker swarm提供的東西跟負載均衡還是有區別的。swarm 只是提供了容器狀態的管理,如果Docker-1裡面的A程式掛了,發現本來二個,現在變成1個了危險,立馬在起一個吧。實時保證docker容器內的數量。
容器叢集適合的場景
容器叢集不適合有狀態程式,例如資料庫,快取等等
退出Swarm叢集
#Manager退出必須加--force docker swarm leave --force
刪除節點
“` bash
service docker stop
#Manager節點需要先降級
docker node demoted
PS:這次主要說了3點比較重要的:通過docker-swarm的網路搭建容器化通訊網路,建立叢集的時候–net 加入docker-swarm建立的網路,方便通訊。不哪些適合做容器化叢集,資料庫和快取。如何操作docker-swarm中的節點。
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:下一篇: