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节点,而后再去删除
相关文章
相关标签/搜索