docker swarm


 
 

1.docker swarm 常用命令

[root@iZuf6gegyofu0xfk0fx5xwZ ~]# docker swarm -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker swarm COMMAND

Manage Swarm

Commands:
  ca          Display and rotate the root CA
  init        Initialize a swarm
  join        Join a swarm as a node and/or manager
  join-token  Manage join tokens
  leave       Leave the swarm
  unlock      Unlock swarm
  unlock-key  Manage the unlock key
  update      Update the swarm

命令查询官网地址https://docs.docker.com/engine/reference/commandline/docker/

命令
说明
docker swarm init --advertise-addr 192.168.10.117初始化swarm manager并绑定网卡地址
docker swarm join-token manager要获取新增管理节点
docker swarm join-token worker要获取新增工作节点
docker swarm join-token --rotate [manager|worker]使旧令牌无效并生成新令牌
docker swarm join-token -q [manager|worker]仅打印 worker/manager 的令牌
docker swarm init --force-new-cluster强制从当前状态创建一个新集群(去除本地之外的所有管理器身份)
docker swarm leave --force离开当前集群,如果是 manager 则需要加 --force
docker node rm -f [ID]强制删除集群,状态为 down 则可以不用 -f ,状态为 Active 则可以强制删除
docker node promote 主机名将 worker 角色升级为 manager (在 manager 节点执行)
docker node demote 主机名将manager角色降级为worker (在 manager 节点执行)
docker node update --availability [“active”|“pause”|“drain”] node更新节点的可用性(有效/暂停/耗尽)

 
 

2. docker swarm 官网地址

 
 

3.初始化节点

3.1 初始化节点

docker swarm init --advertise-addr 
# 注意:如果使用 Docker Desktop for Mac 或 Docker Desktop for Windows 来测试单节点 swarm,只需docker swarm init不带参数运行即可。--advertise-addr在这种情况下无需指定。

在这里插入图片描述

[root@iZuf6gegyofu0xfk0fx5xxZ ~]# docker swarm init  --advertise-addr 172.29.99.157
Swarm initialized: current node (trlyrq62kqpri23442s1zoccg) is now a manager.
# 说明:现在这个节点已经添加进来为一个 manager(管理者)
To add a worker to this swarm, run the following command:
# 说明:如果想将其他的节点加入到这个 swarm 中,可以执行下面的命令
    docker swarm join --token SWMTKN-1-3op7vtz76w1rptvh9ed3rq1591157b78go2psuee4x7ml1kf6a-algun18eflz9tq7g47yso55vd 172.29.99.157:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
# 说明:如果想要添加一个 manager 或者 worker 节点,也可以使用 'docker swarm join-token manager[worker]' 命令 

在这里插入图片描述

3.2 生成 manager 或者 worker 令牌

# 生成 manager
docker swarm join-token manager

[root@iZuf6gegyofu0xfk0fx5xxZ ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3op7vtz76w1rptvh9ed3rq1591157b78go2psuee4x7ml1kf6a-bud3cv6ae72vraxkw11c5773r 172.29.99.157:2377


# 生成 worker
docker swarm join-token worker

[root@iZuf6gegyofu0xfk0fx5xxZ ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3op7vtz76w1rptvh9ed3rq1591157b78go2psuee4x7ml1kf6a-algun18eflz9tq7g47yso55vd 172.29.99.157:2377

在这里插入图片描述

3.3 查看 swarm 信息

docker info

[root@iZuf6gegyofu0xfk0fx5xxZ ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.1-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.14
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: active
  NodeID: trlyrq62kqpri23442s1zoccg
  Is Manager: true
  ClusterID: 7nn98dyh7vwb2nmz88qv5cvcq
  Managers: 3
  Nodes: 5
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
  Raft:
   Snapshot Interval: 10000
   Number of Old Snapshots to Retain: 0
   Heartbeat Tick: 1
   Election Tick: 10
  Dispatcher:
   Heartbeat Period: 5 seconds
  CA Configuration:
   Expiry Duration: 3 months
   Force Rotate: 0
  Autolock Managers: false
  Root Rotation In Progress: false
  Node Address: 172.29.99.157
  Manager Addresses:
   172.29.99.157:2377
   172.29.99.159:2377
   172.29.99.160:2377
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3df54a852345ae127d1fa3092b95168e4a88e2f8
 runc version: v1.0.3-0-gf46b6ba
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1062.18.1.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.715GiB
 Name: iZuf6gegyofu0xfk0fx5xxZ
 ID: O5SO:R6J3:V5YF:CWFD:CAL7:5JQI:ZX5H:3PBD:72BU:W5EK:RHBR:BMOU
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://2oka4vlk.mirror.aliyuncs.com/
 Live Restore Enabled: false

在这里插入图片描述

3.4 查看节点信息

docker node ls
# 注意:在 worker 节点时不能查看状态的,只能再 manager 节点查看

在这里插入图片描述

 
 

4.添加节点

  • 将初始化得到的命令在其他节点执行,或者使用 docker swarm join-token manager[worker] 得到的命令
# 上面初始化节点时得到的命令,直接在其他节点中执行即可将节点加入当前的 swarm
[root@iZuf6gegyofu0xfk0fx5xuZ ~]# docker swarm join --token SWMTKN-1-3op7vtz76w1rptvh9ed3rq1591157b78go2psuee4x7ml1kf6a-algun18eflz9tq7g47yso55vd 172.29.99.157:2377
# 以一个 worker 节点加入
This node joined a swarm as a worker.

在这里插入图片描述

 

[root@iZuf6gegyofu0xfk0fx5xvZ ~]# docker swarm join --token SWMTKN-1-3op7vtz76w1rptvh9ed3rq1591157b78go2psuee4x7ml1kf6a-bud3cv6ae72vraxkw11c5773r 172.29.99.157:2377
# 这是一个 manager 节点
This node joined a swarm as a manager.

在这里插入图片描述

 

[root@iZuf6gegyofu0xfk0fx5xwZ ~]# docker swarm join --token SWMTKN-1-3op7vtz76w1rptvh9ed3rq1591157b78go2psuee4x7ml1kf6a-algun18eflz9tq7g47yso55vd 172.29.99.157:2377
# 以一个 worker 节点加入
This node joined a swarm as a worker.

在这里插入图片描述

 
 

5.测试集群使用

  • 测试 swarm 集群在双主双从的状态下,其中一台 manager 停机后能否继续工作
    在这里插入图片描述

  • 另外一台 manager 提示没有 leader,即不可以使用
    在这里插入图片描述

  • 增加一台 manager 节点

# 将一个 worker 节点设置问 manager 节点,首先将当前节点设置为离开状态
docker swarm leave

# 使用 dockr swarm join-token manager 生成的 manager 令牌增加 manager 节点
docker swarm join --token SWMTKN-1-3op7vtz76w1rptvh9ed3rq1591157b78go2psuee4x7ml1kf6a-bud3cv6ae72vraxkw11c5773r 172.29.99.157:2377

在这里插入图片描述

  • 再次测试关闭一台 docker 之后,查看集群是否能使用
docker node ls

Unreachable     # 不可达

# 在关闭一台 manager 节点后,剩余两台仍然可以正常使用

在这里插入图片描述

在这里插入图片描述

 
 

6. Docker Swarm Raft 协议

  • 当 Docker Engine 以 swarm 模式运行时,管理器节点实现 Raft 共识算法来管理全局集群状态。

  • 为什么原因Docker群模式是使用一个共识算法,以确保那些负责在集群中的管理和调度任务的所有经理节点,都存储相同一致的状态。

  • 在整个集群中具有相同的一致状态意味着在发生故障时,任何 Manager 节点都可以接收任务并将服务恢复到稳定状态。例如,如果集群中负责调度任务的Leader Manager意外终止,任何其他 Manager 都可以接手调度的任务并重新平衡任务以匹配所需的状态。

  • 使用共识算法在分布式系统中复制日志的系统确实需要特别小心。它们通过要求大多数节点就值达成一致来确保集群状态在出现故障时保持一致。Raft 最多可以容忍(N-1)/2失败,并且需要大多数或法定人数的 (N/2)+1成员就提议给集群的值达成一致。这意味着在运行 Raft 的 5 个 Manager 的集群中,如果 3 个节点不可用,系统将无法处理更多请求以安排额外的任务。现有任务继续运行,但如果管理器集不健康,则调度程序无法重新平衡任务以应对故障。

  • 群体模式下共识算法的实现意味着它具有分布式系统固有的特性:

  1. 容错系统中的值达成一致。

  2. 通过领导人选举过程相互排斥

  3. 集群成员管理

  4. 全局一致的对象排序和 CAS(比较和交换)原语

 
 
 
 
 
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值