溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

發(fā)布時(shí)間:2020-07-13 04:57:46 來(lái)源:網(wǎng)絡(luò) 閱讀:377 作者:IT人故事 欄目:云計(jì)算

原創(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/

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

一起在說(shuō)說(shuō)docker swarm

swarm 是docker的三劍客一員,之前都說(shuō)過(guò)了,可以看中級(jí)和高級(jí)啊 。

  1. docker machine 容器服務(wù)
  2. docker compose 腳本服務(wù)
  3. docker swarm 容器集群技術(shù)

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

  • 去中心化的設(shè)計(jì)

    Swarm Manager 也承擔(dān)worker節(jié)點(diǎn)的作用。
    Swarm Worker 運(yùn)行容器部署項(xiàng)目

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

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
  • 加入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

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

docker swarm環(huán)境

一共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

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)
「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

再次創(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

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

再次創(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

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

再次創(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

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

查看swarm集群

只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行
leader掛掉后,reachable就可以管理集群了。

docker node ls

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

查看swarm集群的網(wǎng)絡(luò)

只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行

docker network ls

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

創(chuàng)建容器間的共享網(wǎng)絡(luò)

只能在manager節(jié)點(diǎn)內(nèi)執(zhí)行

docker network create -d overlay --attachable swarm_test
docker network ls

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

目前是4臺(tái)機(jī)器,如果想讓4臺(tái)機(jī)器內(nèi)的容器可以進(jìn)行共享,overlay的網(wǎng)絡(luò)就可以了,只需要在創(chuàng)建容器的時(shí)候--net=swarm_test

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

創(chuàng)建5個(gè)pxc容器
  • 192.168.66.100

    創(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 

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

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 

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

  • 192.168.66.101

    創(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 

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

  • 192.168.66.102

    創(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 
  • 192.168.66.103

    創(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 

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

容器集群

在這個(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ù)量。

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

容器集群適合的場(chǎng)景

容器集群不適合有狀態(tài)程序,例如數(shù)據(jù)庫(kù),緩存等等

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

退出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:這次主要說(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)。

「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-借助dockerSwarm搭建集群部署(九)

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI