Docker環境下的前後端分離項目部署與運維(十一)Docker Swarm技術
Docker Swarm技術
docker swarm技術(之前的docker叢集都是在 一個虛拟主機上的,但是如果這個主機挂掉了over了,docker技術就是多個虛拟主機形成一個叢集)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIx0DciV2dmADM30zd-cmbw5CRzUCRzUydaVnQux0drpmT5FERNdXTE9EdZR1T6lEVNdXRE1UeNpWTyEEVPhXQq1EdRRUTzUEVPVDOp50drRVT3lkeMBTQ65EerR1T2NmMiNnSywEd5ITW110MaZHetlVdO1GT0UERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)
Swarm是Docker的一個編排工具,參考官網:https://docs.docker.com/engine/swarm/
- 與docker內建的叢集管理工具
- 去中心化設計,隻使用docker引擎即可建立各類節點
- 聲明式服務模型。可以聲明的方式來定義應用。
- 動态伸縮。管理節點自動調整服務數量。
- 高可用,對于服務期望狀态做到動态調整,swarm的管理節點會持續監控叢集狀态,叢集中有沒有達到期望狀态的服務,管理節點會自動排程來達到期望狀态。
- 自定義網絡。可以為你的服務指定一個網絡,容器建立的時候配置設定一個IP
- 服務發現。管理節點給叢集中每個服務一個特定的DNS名字,并給運作的容器提供負載均衡。
- 負載均衡。你可以暴露服務端口給外部的負載均衡。内部swarm提供可配置的容器配置設定到節點的政策。
- 預設的安全機制。swarm叢集中各個節點強制TLS協定驗證。連接配接加密,你可以自定義根證書。
- 滾動更新。增量跟新,可以自定義更新下個節點的時間間隔,如果有問題,可以會滾到上個版本。
去中心化設計
建立Swarm叢集
docker swarm init
--listen-addr ip:port 管理者節點
--advertise-addr ip 廣播位址
加入Swarm叢集
docker swarm join-token manager
docker swarm join-token worker
示例
# 建立4個伺服器虛拟機
# -- 192.168.103.210(manager)
# -- 192.168.103.240(manager)
# -- 192.168.103.212(worker)
# -- 192.168.103.213(worker)
# 192.168.103.210進行操作
docker swarm init
# 生成加入manager語句,生成的語句在240上面執行
docker swarm join-token manager
# 生成加入worker語句,生成的語句在212、213上面執行
docker swarm join-token worker
檢視Swarm叢集節點
注意:隻能在manager節點執行
docker node ls
[root@localhost ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
0l944rsrwj0sqva0pf4shshd1 * localhost Ready Active Leader 18.09.6
askvrplj3p0vh3bh22oi9mr2u localhost Ready Active 18.09.6
g2q35fckeubv0u87y6ol4zw5q localhost Ready Active Reachable 18.09.6
wdxxxyxjvnm9kl757k57dnuwi localhost Ready Active 18.09.6
檢視Swarm叢集網絡
docker network ls
注意:這個ingress swarm網絡不是用來做容器之間業務通信的,而是用來管理叢集的
建立共享網絡
ingress網絡用于管理Swarm叢集,是以我們需要建立新的共享網絡
docker network create -d overlay --attachable swarm_test
建立Percona叢集示例
示範4台伺服器建立5節點叢集
# -- 192.168.103.210(manager)
# 拉取鏡像
docker pull percona/percona-xtradb-cluster:5.7.21
# 鏡像重命名
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
docker rmi percona/percona-xtradb-cluster:5.7.21
# 建立資料卷v1和backup
docker volume create v1
docker volume create backup
# 建立容器
# 建立5個PXC容器構成叢集
# 第一個節點
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=swarm_test pxc
# 建立資料卷v2
docker volume create v2
# 第二個節點
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=swarm_test pxc
# -- 192.168.103.240(manager)
# 拉取鏡像
docker pull percona/percona-xtradb-cluster:5.7.21
# 鏡像重命名
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
docker rmi percona/percona-xtradb-cluster:5.7.21
# 建立資料卷v3和backup
docker volume create v3
docker volume create backup
# 第三個節點
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql -v backup:/data --privileged --name=node3 --net=swarm_test pxc
# -- 192.168.103.212(worker)
# 拉取鏡像
docker pull percona/percona-xtradb-cluster:5.7.21
# 鏡像重命名
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
docker rmi percona/percona-xtradb-cluster:5.7.21
# 建立資料卷v4和backup
docker volume create v4
docker volume create backup
# 第四個節點
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql -v backup:/data --privileged --name=node4 --net=swarm_test pxc
# -- 192.168.103.213(worker)
# 拉取鏡像
docker pull percona/percona-xtradb-cluster:5.7.21
# 鏡像重命名
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
docker rmi percona/percona-xtradb-cluster:5.7.21
# 建立資料卷v5和backup
docker volume create v5
docker volume create backup
# 第五個節點
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=swarm_test pxc
建立完成後每個節點都應該可以通路,而且會資料同步
容器叢集
容器叢集不适合有狀态程式,例如資料庫、緩存等等
退出Swarm叢集
- 主動退出
docker swarm leave --force # Manager退出叢集必須要使用--force參數
- 被動退出
# Manager被動退出叢集 # Manager節點降級為Worker節點 docker node demote <ID> # 删除停止或離開的Worker節點 docker node rm <ID> # 删除任何的節點必須要先停止它的Docker服務 # Manager節點必須先降級成Worker節點,然後再去删除
posted on 2019-06-28 16:20 進擊的辣條 閱讀(...) 評論(...) 編輯 收藏