您好,登錄后才能下訂單哦!
原創文章,歡迎轉載。轉載請注明:轉載自IT人故事會,謝謝!
原文鏈接地址:「實戰篇」開源項目docker化運維部署-借助dockerSwarm搭建集群部署(九)為了讓學習的知識融匯貫通,目前是把所有的集群都放在了一個虛擬機上,如果這個虛擬機宕機了怎么辦?俗話說雞蛋不要都放在一個籃子里面,把各種集群的節點拆分部署,應該把各種節點分機器部署,多個宿主機,這樣部署隨便掛哪個主機我們都不擔心。
源碼:https://github.com/limingios/netFuture/blob/master/docker-swarm/
swarm 是docker的三劍客一員,之前都說過了,可以看中級和高級啊 。
- docker machine 容器服務
- docker compose 腳本服務
- docker swarm 容器集群技術
Swarm Manager 也承擔worker節點的作用。
Swarm Worker 運行容器部署項目
Swarm是沒有中心節點的,掛到其中一個其他是不會掛掉的。Swarm Manager 如果master掛了,立馬選舉一個新的master。
創建集群環境
首先機器已經安裝了docker環境。
docker swarm init
#加入到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 |
一共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
只能在manager節點內執行
leader掛掉后,reachable就可以管理集群了。docker node ls
只能在manager節點內執行
docker network ls
只能在manager節點內執行
docker network create -d overlay --attachable swarm_test docker network ls
目前是4臺機器,如果想讓4臺機器內的容器可以進行共享,overlay的網絡就可以了,只需要在創建容器的時候--net=swarm_test
創建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
創建1個容器。之前也說過如何創建,最為重要的是共享網絡一定要使用swarm的共享網絡。
docker volume create v3
docker volume create backup3
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
創建1個容器。之前也說過如何創建,最為重要的是共享網絡一定要使用swarm的共享網絡。
docker volume create v4
docker volume create backup4
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
創建1個容器。之前也說過如何創建,最為重要的是共享網絡一定要使用swarm的共享網絡。
docker volume create v4
docker volume create backup4
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容器內的數量。
容器集群不適合有狀態程序,例如數據庫,緩存等等
#Manager退出必須加--force
docker swarm leave --force
service docker stop
#Manager節點需要先降級
docker node demoted <nodeID>
docker node rm <nodeID>
docker network
PS:這次主要說了3點比較重要的:通過docker-swarm的網絡搭建容器化通信網絡,創建集群的時候--net 加入docker-swarm創建的網絡,方便通信。不哪些適合做容器化集群,數據庫和緩存。如何操作docker-swarm中的節點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。