Docker環境下的先後端分離項目部署與運維(十一)Docker Swarm技術

Docker Swarm技術

docker swarm技術(以前的docker集羣都是在 一個虛擬主機上的,可是若是這個主機掛掉了over了,docker技術就是多個虛擬主機造成一個集羣)node

Swarm是Docker的一個編排工具,參考官網:https://docs.docker.com/engine/swarm/mysql

  • 與docker集成的集羣管理工具
  • 去中心化設計,只使用docker引擎便可建立各種節點
  • 聲明式服務模型。能夠聲明的方式來定義應用。
  • 動態伸縮。管理節點自動調整服務數量。
  • 高可用,對於服務指望狀態作到動態調整,swarm的管理節點會持續監控集羣狀態,集羣中有沒有達到指望狀態的服務,管理節點會自動調度來達到指望狀態。
  • 自定義網絡。能夠爲你的服務指定一個網絡,容器建立的時候分配一個IP
  • 服務發現。管理節點給集羣中每一個服務一個特定的DNS名字,並給運行的容器提供負載均衡。
  • 負載均衡。你能夠暴露服務端口給外部的負載均衡。內部swarm提供可配置的容器分配到節點的策略。
  • 默認的安全機制。swarm集羣中各個節點強制TLS協議驗證。鏈接加密,你能夠自定義根證書。
  • 滾動更新。增量跟新,能夠自定義更新下個節點的時間間隔,若是有問題,能夠會滾到上個版本。sql

去中心化設計

建立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語句,生成的語句在2十二、213上面執行
docker swarm join-token worker

 

查看Swarm集羣節點

注意:只能在manager節點執行docker

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節點,而後再去刪除
相關文章
相關標籤/搜索