原創(chuàng)文章菇篡,歡迎轉(zhuǎn)載丘跌。轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自IT人故事會(huì),謝謝挡育!
原文鏈接地址:「實(shí)戰(zhàn)篇」開源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)
為了讓學(xué)習(xí)的知識(shí)融匯貫通,目前是把所有的集群都放在了一個(gè)虛擬機(jī)上朴爬,如果這個(gè)虛擬機(jī)宕機(jī)了怎么辦即寒?俗話說雞蛋不要都放在一個(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/
一起在說說docker swarm
swarm 是docker的三劍客一員凹嘲,之前都說過了,可以看中級(jí)和高級(jí)啊 抵蚊。
- docker machine 容器服務(wù)
- docker compose 腳本服務(wù)
- docker swarm 容器集群技術(shù)
- 去中心化的設(shè)計(jì)
Swarm Manager 也承擔(dān)worker節(jié)點(diǎn)的作用施绎。
Swarm Worker 運(yùn)行容器部署項(xiàng)目
Swarm是沒有中心節(jié)點(diǎn)的溯革,掛到其中一個(gè)其他是不會(huì)掛掉的贞绳。Swarm Manager 如果master掛了,立馬選舉一個(gè)新的master致稀。
- 創(chuàng)建集群環(huán)境
首先機(jī)器已經(jīng)安裝了docker環(huán)境冈闭。
docker swarm init
- 加入swarm集群
#加入到manager中
docker swarm join-token manager
#加入到worker中
docker swarm join-token worker
環(huán)境搭建
應(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 |
docker swarm環(huán)境
一共4個(gè)節(jié)點(diǎn),2個(gè)manager節(jié)點(diǎn)抖单,2個(gè)work節(jié)點(diǎn)萎攒,manager不光是管理,而且也干活矛绘,說白了一共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
查看swarm集群
只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行
leader掛掉后,reachable就可以管理集群了囚玫。
docker node ls
查看swarm集群的網(wǎng)絡(luò)
只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行
docker network ls
創(chuàng)建容器間的共享網(wǎng)絡(luò)
只能在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)建5個(gè)pxc容器
- 192.168.66.100
創(chuàng)建2個(gè)容器燃少。之前也說過如何創(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
- 192.168.66.101
創(chuàng)建1個(gè)容器阵具。之前也說過如何創(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
- 192.168.66.102
創(chuàng)建1個(gè)容器阳液。之前也說過如何創(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
- 192.168.66.103
創(chuàng)建1個(gè)容器趁舀。之前也說過如何創(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è)示意圖里面矮烹,畫了4個(gè)linux的主機(jī)越庇,都安裝了docker虛擬機(jī),假如我現(xiàn)在想安裝A程序奉狈,直接選擇Docker-1這個(gè)主機(jī)里面的容器安裝A程序卤唉,這樣沒有問題。但是單節(jié)點(diǎn)單容器來部署仁期,一旦這個(gè)節(jié)點(diǎn)掛掉的話桑驱,A程序就沒有,為了防止這樣我們有冗余設(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)本來二個(gè)兑徘,現(xiàn)在變成1個(gè)了危險(xiǎn),立馬在起一個(gè)吧羡洛。實(shí)時(shí)保證docker容器內(nèi)的數(shù)量挂脑。
容器集群適合的場(chǎng)景
容器集群不適合有狀態(tài)程序,例如數(shù)據(jù)庫,緩存等等
退出Swarm集群
#Manager退出必須加--force
docker swarm leave --force
刪除節(jié)點(diǎn)
service docker stop
#Manager節(jié)點(diǎn)需要先降級(jí)
docker node demoted <nodeID>
docker node rm <nodeID>
docker network
PS:這次主要說了3點(diǎn)比較重要的:通過docker-swarm的網(wǎng)絡(luò)搭建容器化通信網(wǎng)絡(luò)最域,創(chuàng)建集群的時(shí)候--net 加入docker-swarm創(chuàng)建的網(wǎng)絡(luò)谴分,方便通信。不哪些適合做容器化集群镀脂,數(shù)據(jù)庫和緩存牺蹄。如何操作docker-swarm中的節(jié)點(diǎn)。