Docker Swarm 进阶:集群容错

Swarm 添加多个 Manager 节点实现容错
Manager 节点的不可用是未知的,可以在 Swarm 集群中维护奇数个 Manager 节点,以防部分 Manger 节点不可用导致整个 Swarm 集群不能正常工作。
| 节点总数 | 正常数量 | 容错数量 |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 6 | 4 | 2 |
| 7 | 4 | 3 |
| 8 | 5 | 3 |
| 9 | 5 | 4 |
容错数量 = (n - 1) / 2
举个例子,有 5 个 Manager 节点的 Swarm 集群,如果其中 3 个不可用,那么 Manager 节点的数量就不合法。因此在恢复其中一个不可用的 Manager 节点或使用灾难恢复命令恢复群集之前,将无法添加或删除节点。
灾难恢复
灾难不可控制,如果突发事件导致 Manager 节点不可用的数量超过容错数量,为了恢复 Swarm 到正常状态,该如何处理呢?

1、从备份中恢复
在 备份 Swarm 数据 后, 使用如下步骤恢复 Swarm 集群.
关闭要恢复 Swarm 集群目标主机上的 Docker;
在新 Swarm 集群下 移除
/var/lib/docker/swarm目录内容;
将备份内容存储到
/var/lib/docker/swarm目录;
注意:新节点使用与旧的相同的加密密钥进行磁盘存储,此时不能更改磁盘上的存储加密密钥。
在启用自动锁定的 Swarm 情况下,解锁密钥也与旧的 Swarm 相同,并且需要解锁密钥来恢复 Swarm。
在新节点上启动docker。使用以下命令重新初始化集群,以便该节点不尝试连接到旧集群的一部分的节点,可能旧集群不再存在:
docker swarm init --force-new-cluster
校验 Swarm 集群的恢复状况是不是与预期的一样,可以使用
docker service ls来查看。
如果你使用自动锁,参考 rotate the unlock key。
向新的 Swarm 集群中添加 manager 和 worker 节点。
向新的 Swarm 集群中添加原来的备份方案。
2、通过重置 Manager 的法定数量恢复集群
集群对故障具有恢复能力,集群可以从任何数量的临时节点故障(机器重启或重启时崩溃)或其他瞬时错误中恢复。然而,如果集群的 Manger 数量少于法定数量,集群不能自动恢复。现有 Worker 节点上的任务继续运行,但不能管理任务,包括扩展或更新服务以及从集群中加入或删除节点。恢复的最佳方法是将丢失的 Manager 节点重新连接。如果故障严重,没有办法连接丢失的 Manager 节点,该如何处理?
目前唯一方法是使用 Manager 节点中的 --force-new-cluster 操作。这个操作会删除当前 Manager 节点以外的所有 Manager 节点。由于现在只有一个 Manager ,因此达到法定数量,Swarm 集群就能正常工作。然后可以提升 Worker 节点成为 Manager,直到拥有理想的 Manager 数量。
# 示例docker swarm init --force-new-cluster --advertise-addr node01:2377
当你使用 --force-new-cluster 标志运行 docker swarm init 命令时,运行命令的 Docker 引擎将成为能够管理和运行服务的集群的 Manager
节点。它拥有先前关于服务和任务的所有信息,Worker 节点仍然是集群的一部分,并且服务仍在运行。然后你需要添加 Manager 节点以实现以前的任务分配,并确保拥有足够的 Manager 来维护高可用性并防止法定数量不足。
Manager 节点的分配
除了维护奇数个 Manager 节点之外,在安置 Manager 时还要注意数据中心的拓扑结构。为了获得最佳的容错性,可以在至少 3 个可用区中分配 Manager 节点,以支持整套机器或常见维护方案的故障。
| Manager 个数 | 分配 (在 3 个可用分区) |
|---|---|
| 3 | 1-1-1 |
| 5 | 2-2-1 |
| 7 | 3-2-2 |
| 9 | 3-3-3 |
相关问题
1、Manager 节点为什么推荐使用奇数个?
举例,3 个节点和 4 个节点的容错数量都是 1,5 个节点和 6 个节点的容错数量都是 2,同样的效果,选偶数明显没有任何优势,属于浪费资源。
其他问题欢迎讨论 ~
作者:Anoyi
链接:https://www.jianshu.com/p/5c4a79cc04be
Docker Swarm 进阶:集群容错的更多相关文章
- Docker Swarm redis 集群搭建
Docker Swarm redis 集群搭建 环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docke ...
- Docker Swarm部署集群
一.Swarm简介 Swarm是Docker的一个编排工具,参考官网:https://docs.docker.com/engine/swarm/ Swarm 模式简介 要在Swarm模式下运行dock ...
- 从零开始,使用Docker Swarm部署集群教程
本文首先从Dockerfile创建了一个简单web镜像 然后将web镜像推送到了远程仓库,以备后面集群中不同机器自动下载 之后使用docker-compose.yml配置了一个应用 而后新建了2台虚拟 ...
- docker Swarm mode集群
基本概念 Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具. 使用 Swarm 集群之前需要了解以下几个概念. 节点 运行 Docker 的主机可以主动 ...
- Docker Swarm nginx 集群搭建
环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docker 版本:18.09.1 redis 版本:ng ...
- centos7 docker swarm加入集群失败
提示的错误为 [root@localhost downloads]# docker swarm join --token SWMTKN-1-2ezr0k5ybds1la4vgi2z7j8ykxkmm0 ...
- docker部署rabbitmq集群
docker版本:18.09.6 或以上 rabbitmq镜像版本:rabbitmq:3.9.5-management 一.拉镜像: docker pull rabbitmq:3.9.5-manage ...
- docker~swarm搭建docker高可用集群
回到目录 Swarm概念 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入 ...
- docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群
题目要求 (1)将springboot应用程序打成jar包:Hot.jar (2)利用dockerfile将Hot.jar构建成镜像 (3)构建 Swarm 集群 (4)在 Swarm 集群中使用 c ...
- Docker 搭建 etcd 集群
阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...
随机推荐
- U盘或光盘启动的Win7-8-10的PE系统制作步骤
U盘或光盘启动的Win7-8-10的PE系统制作步骤 1.打开http://www.ushendu.com/下载PE制作工具 2.下载完成后安装到我的电脑, 把准备好的U盘插到电脑上,打开U深度PE制 ...
- IM开发者的零基础通信技术入门(十一):为什么WiFi信号差?一文即懂!
一.本文内容概述 WiFi对于现在的家庭来说,属于司空见惯的上网方式,但很多情况下,家里房间多.空间大.杂物乱的情况下,WiFi的信号就受影响.为什么WiFi信号会受影响?什么情况下该使用何种方式组网 ...
- 「V 曲收集」幸运
标题原为"絮语",但终究是别人的絮语.不过是在他们的演唱下,我有这"幸运"拾起它们吧. 啊,还是加一个维护日志好了. [2022/08/31] 开启日志 ...
- 【Java 温故而知新系列】基础知识-05 面向对象
1.面向对象概述 面向对象(Object-Oriented,简称OO)是一种编程思想,核心思想是将现实世界中的事物抽象为程序中的"对象",通过对象之间的交互来解决问题. 对象 对象 ...
- 求mod运算
求A mod B 要求 B必须是2的次方 方法 A mod B = A & (B - 1) 程序 #include <stdio.h> //10 mod 8 = 2 int add ...
- VS2019上如何使用MFC
打开VS的安装程序 选择 C++桌面开发的MFC模块 安装即可 新建MFC项目 使用 参考:链接 MFC介绍 微软基础类库(英语: Classes,简称MFC)是微软公司提供的一个类库(class l ...
- [BZOJ P2771] 天才ACM
[BZOJ P2771] 天才ACM 传送门 朴素算法 枚举终点 \(r\),对区间 \([l, r]\) 排序求校验值 \(sum\),比较 \(sum\) 和 \(t\) $ sum \le t ...
- RocksDB 二级缓存
本文分享自天翼云开发者社区<RocksDB 二级缓存>,作者:b****n RocksDB 团队正在实现对非易失性介质上的块缓存的支持.可以看作是 RocksDB 当前的易失性块缓存的扩展 ...
- 开源数据库生态遇新变数,天翼云TeleDB提供企业数据管理更优解!
近日,知名开源大规模并行处理 (MPP) 数据库Greenplum的源代码在其官方GitHub页面突然消失,引发了用户和开发者的广泛关注, PostgreSQL生态系统或将产生新变数.开源软件在面对商 ...
- 在 PyTorch 中理解词向量,将单词转换为有用的向量表示
你要是想构建一个大型语言模型,首先得掌握词向量的概念.幸运的是,这个概念很简单,也是本系列文章的一个完美起点. 那么,假设你有一堆单词,它可以只是一个简单的字符串数组. animals = [&quo ...