您好,登錄后才能下訂單哦!
原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自IT人故事會(huì),謝謝!
原文鏈接地址:「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)為了讓學(xué)習(xí)的知識(shí)融匯貫通,目前是把所有的集群都放在了一個(gè)虛擬機(jī)上,如果這個(gè)虛擬機(jī)宕機(jī)了怎么辦?俗話說(shuō)雞蛋不要都放在一個(gè)籃子里面,把各種集群的節(jié)點(diǎn)拆分部署,應(yīng)該把各種節(jié)點(diǎn)分機(jī)器部署,多個(gè)宿主機(jī),這樣部署隨便掛哪個(gè)主機(jī)我們都不擔(dān)心。
源碼:https://github.com/limingios/netFuture/blob/master/docker-swarm/
swarm 是docker的三劍客一員,之前都說(shuō)過(guò)了,可以看中級(jí)和高級(jí)啊 。
- docker machine 容器服務(wù)
- docker compose 腳本服務(wù)
- docker swarm 容器集群技術(shù)
Swarm Manager 也承擔(dān)worker節(jié)點(diǎn)的作用。
Swarm Worker 運(yùn)行容器部署項(xiàng)目
Swarm是沒(méi)有中心節(jié)點(diǎn)的,掛到其中一個(gè)其他是不會(huì)掛掉的。Swarm Manager 如果master掛了,立馬選舉一個(gè)新的master。
創(chuàng)建集群環(huán)境
首先機(jī)器已經(jīng)安裝了docker環(huán)境。
docker swarm init
#加入到manager中
docker swarm join-token manager
#加入到worker中
docker swarm join-token worker
應(yīng)用 | IP地址 | 服務(wù) | 配置 | 安裝應(yīng)用 | 安裝方式 |
---|---|---|---|---|---|
docker-swarm-manager1 | 192.168.66.100 | docker-swarm-manager1 | 單核 2g內(nèi)存 | docker-swarm-manager1 | docker |
docker-swarm-manager2 | 192.168.66.101 | docker-swarm-manager2 | 單核 2g內(nèi)存 | docker-swarm-manager2 | docker |
docker-swarm-node1 | 192.168.66.102 | docker-swarm-node1 | 單核 2g內(nèi)存 | docker-swarm-node1 | docker |
docker-swarm-node2 | 192.168.66.103 | docker-swarm-node2 | 單核 2g內(nèi)存 | docker-swarm-node2 | docker |
一共4個(gè)節(jié)點(diǎn),2個(gè)manager節(jié)點(diǎn),2個(gè)work節(jié)點(diǎn),manager不光是管理,而且也干活,說(shuō)白了一共4個(gè)干活的節(jié)點(diǎn)。
創(chuàng)建docker swarm集群
su - #密碼vagrant docker swarm init
報(bào)錯(cuò)注意:如果你在新建集群時(shí)遇到雙網(wǎng)卡情況,可以指定使用哪個(gè) IP,例如上面的例子會(huì)有可能遇到下面的錯(cuò)誤。
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
再次創(chuàng)建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
再次創(chuàng)建docker swarm集群192.168.66.101
當(dāng)前節(jié)點(diǎn)以manager的身份加入swarm集群docker swarm join --token SWMTKN-1-4itumtscktomolcau8a8cte98erjn2420fy2oyj18ujuvxkkzx-9qutkvpzk87chtr4pv8770mcb 192.168.66.100:2377
再次創(chuàng)建docker swarm集群192.168.66.102
當(dāng)前節(jié)點(diǎn)以worker的身份加入swarm集群
docker swarm join --token SWMTKN-1-4itumtscktomolcau8a8cte98erjn2420fy2oyj18ujuvxkkzx-f2dlt8g3hg86gyc9x6esewtwl 192.168.66.100:2377
再次創(chuàng)建docker swarm集群192.168.66.103
當(dāng)前節(jié)點(diǎn)以worker的身份加入swarm集群
docker swarm join --token SWMTKN-1-4itumtscktomolcau8a8cte98erjn2420fy2oyj18ujuvxkkzx-f2dlt8g3hg86gyc9x6esewtwl 192.168.66.100:2377
只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行
leader掛掉后,reachable就可以管理集群了。docker node ls
只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行
docker network ls
只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行
docker network create -d overlay --attachable swarm_test docker network ls
目前是4臺(tái)機(jī)器,如果想讓4臺(tái)機(jī)器內(nèi)的容器可以進(jìn)行共享,overlay的網(wǎng)絡(luò)就可以了,只需要在創(chuàng)建容器的時(shí)候--net=swarm_test
創(chuàng)建2個(gè)容器。之前也說(shuō)過(guò)如何創(chuàng)建,最為重要的是共享網(wǎng)絡(luò)一定要使用swarm的共享網(wǎng)絡(luò)。
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
創(chuàng)建1個(gè)容器。之前也說(shuō)過(guò)如何創(chuàng)建,最為重要的是共享網(wǎng)絡(luò)一定要使用swarm的共享網(wǎng)絡(luò)。
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
創(chuàng)建1個(gè)容器。之前也說(shuō)過(guò)如何創(chuàng)建,最為重要的是共享網(wǎng)絡(luò)一定要使用swarm的共享網(wǎng)絡(luò)。
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
創(chuàng)建1個(gè)容器。之前也說(shuō)過(guò)如何創(chuàng)建,最為重要的是共享網(wǎng)絡(luò)一定要使用swarm的共享網(wǎng)絡(luò)。
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
在這個(gè)示意圖里面,畫(huà)了4個(gè)linux的主機(jī),都安裝了docker虛擬機(jī),假如我現(xiàn)在想安裝A程序,直接選擇Docker-1這個(gè)主機(jī)里面的容器安裝A程序,這樣沒(méi)有問(wèn)題。但是單節(jié)點(diǎn)單容器來(lái)部署,一旦這個(gè)節(jié)點(diǎn)掛掉的話,A程序就沒(méi)有,為了防止這樣我們有冗余設(shè)計(jì),直接在Docker-2這個(gè)主機(jī)里面的容器也安裝A程序,這樣的話,Docker-1里面的A程序掛了,Docker-2里面的A程序也可以運(yùn)行。這個(gè)功能有點(diǎn)像負(fù)載均衡,其實(shí)真的很像。docker swarm提供的東西跟負(fù)載均衡還是有區(qū)別的。swarm 只是提供了容器狀態(tài)的管理,如果Docker-1里面的A程序掛了,發(fā)現(xiàn)本來(lái)二個(gè),現(xiàn)在變成1個(gè)了危險(xiǎn),立馬在起一個(gè)吧。實(shí)時(shí)保證docker容器內(nèi)的數(shù)量。
容器集群不適合有狀態(tài)程序,例如數(shù)據(jù)庫(kù),緩存等等
#Manager退出必須加--force
docker swarm leave --force
service docker stop
#Manager節(jié)點(diǎn)需要先降級(jí)
docker node demoted <nodeID>
docker node rm <nodeID>
docker network
PS:這次主要說(shuō)了3點(diǎn)比較重要的:通過(guò)docker-swarm的網(wǎng)絡(luò)搭建容器化通信網(wǎng)絡(luò),創(chuàng)建集群的時(shí)候--net 加入docker-swarm創(chuàng)建的網(wǎng)絡(luò),方便通信。不哪些適合做容器化集群,數(shù)據(jù)庫(kù)和緩存。如何操作docker-swarm中的節(jié)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。