Global 集群灾难恢复
概述
此解决方案用于涉及 global 集群的灾难恢复场景。global 集群作为平台的控制平面,负责管理其他集群。为确保 global 集群发生故障时平台服务持续可用,此解决方案会部署两个 global 集群:主集群和备用集群。
灾难恢复机制基于将主集群的 etcd 数据实时同步到备用集群。如果主集群因故障变得不可用,服务可以快速切换到备用集群。
从 ACP 4.5 开始, etcd Synchronizer 更名为 Global Cluster Disaster Recovery。从 Customer Portal 下载插件时,请搜索 Global Cluster Disaster Recovery。重命名之前发布的插件软件包在上传后,平台中仍会显示 etcd Synchronizer。
支持的灾难场景
- 主集群发生不可恢复的系统级故障,导致其无法运行;
- 承载主集群的物理机或虚拟机发生故障,导致主集群无法访问;
- 主集群所在位置发生网络故障,导致服务中断;
不支持的灾难场景
global集群内部所部署的应用发生故障;- 存储系统故障导致的数据丢失(不在 etcd 同步范围内);
主集群和备用集群的角色是相对的:当前为平台提供服务的集群是主集群(DNS 指向该集群),另一个集群则是备用集群。故障转移后,这两个角色会互换。
注意事项
-
此解决方案仅同步
global集群的 etcd 数据,不包括 registry、chartmuseum 或其他组件的数据; -
监控和日志数据也不会同步。请勿将业务集群的监控或日志数据存储在主集群或备用集群中:请在专用业务集群中安装用于聚合业务集群数据的 VictoriaMetrics Center 和日志存储,并让每个
global集群仅收集、存储和查询自身的指标与日志。主集群中的可观测性数据在故障转移后不可用,因此依赖这些数据的备用集群无法观测其刚刚接管的平台; -
为便于故障排查和管理,建议采用类似
standby-global-m1的样式为节点命名,以指示节点所属的集群(主集群或备用集群)。 -
不支持对集群内的应用数据进行灾难恢复;
-
两个集群之间必须具备稳定的网络连接,以确保 etcd 同步可靠;
-
如果两个集群基于异构架构(例如 x86 和 ARM),请使用双架构安装包;
-
以下命名空间不参与 etcd 同步。如果在这些命名空间中创建资源,用户必须手动备份:
-
如果两个集群都设置为使用内置镜像仓库,则必须分别向每个集群上传容器镜像;
-
如果主集群部署了 DevOps Eventing v3(knative-operator)及其实例,则必须在备用集群中预先部署相同的组件。
流程概览
- 为平台访问准备统一域名;
- 将域名指向主集群的 VIP,并安装主集群;
- 临时将 DNS 解析切换到备用 VIP,以安装备用集群;
- 将主集群的 ETCD 加密密钥复制到之后将作为备用集群控制平面节点的节点上;
- 安装并启用 etcd 同步插件;
- 验证同步状态并定期检查;
- 发生故障时,将 DNS 切换到备用集群以完成灾难恢复。
所需资源
-
一个统一域名,该域名将作为
Platform Access Address,以及用于在该域名上提供 HTTPS 服务的 TLS 证书和私钥; -
每个集群各准备一个专用虚拟 IP 地址——一个用于主集群,另一个用于备用集群;
- 预先配置负载均衡器,将端口
80、443、6443、2379和11443上的 TCP 流量路由到相应 VIP 后面的控制平面节点。
- 预先配置负载均衡器,将端口
操作步骤
步骤 1:安装主集群
安装 DR Environment 的主集群时,
- 首先,记录按照安装 Web UI 指南设置的所有参数。安装备用集群时,必须保持部分选项一致。
- 必须预先配置 User-provisioned Load Balancer,将发送到虚拟 IP 的流量进行路由。
Self-built VIP选项不可用。 Platform Access Address字段必须是域名,而Cluster Endpoint必须是虚拟 IP 地址。- 两个集群都必须配置为使用
An Existing Certificate(必须使用同一个),如有必要,请申请合法证书。Self-signed Certificate选项不可用。 - 当
Image Repository设置为Platform Deployment时,Username和Password字段都不得为空;IP/Domain字段必须设置为用作Platform Access Address的域名。 Platform Access Address的HTTP Port和HTTPS Port字段都必须为 80 和 443。- 进入安装指南的第二页(步骤:
Advanced)时,Other Platform Access Addresses字段必须包含当前集群的虚拟 IP。
请参考以下文档完成安装:
步骤 2:安装备用集群
-
临时将域名指向备用集群的 VIP;
-
登录主集群的第一个控制平面节点,并将 etcd 加密配置复制到备用集群的所有控制平面节点:
-
按照与主集群相同的方式安装备用集群
安装 DR Environment 的备用集群时, 以下选项必须与主集群设置相同:
Platform Access Address字段。Certificate的所有字段。Image Repository的所有字段。- 重要:确保镜像仓库的凭据和 管理员用户的凭据与主集群中的设置相匹配。
并确保已按照步骤 1 中的 NOTES OF DR (Disaster Recovery Environment) INSTALLING 进行操作。
请参考以下文档完成安装:
步骤 3:启用 etcd 同步
-
如适用,请配置负载均衡器,将端口
2379转发到相应集群的控制平面节点。仅支持 TCP 模式;不支持 L7 转发。INFO无需通过负载均衡器进行端口转发。 如果备用集群可以直接访问活动 global 集群,请通过 Active Global Cluster ETCD Endpoints 指定 etcd 地址。
-
使用 VIP 访问备用 global 集群 Web Console,并切换到管理员视图;
-
导航到 Marketplace > Cluster Plugins,选择
global集群; -
找到 Global Cluster Disaster Recovery(对于重命名前发布的软件包,显示为 etcd Synchronizer),点击安装并配置参数:
- 未通过负载均衡器转发端口
2379时,必须正确配置 Active Global Cluster ETCD Endpoints; - 使用 Data Check Interval 的默认值;
- 除非正在进行故障排查,否则请保持 Print detail logs 开关处于禁用状态。
- 未通过负载均衡器转发端口
验证同步 Pod 是否在备用集群上运行:
出现“Start Sync update”后,重新创建其中一个 Pod,以重新触发具有 ownerReference 依赖关系的资源同步:
检查同步状态:
输出说明:
LOCAL ETCD missed keys:主集群中存在但备用集群中缺失的键。通常由同步过程中资源顺序导致的 GC 引起。重启一个 etcd-sync Pod 即可修复;LOCAL ETCD surplus keys:仅存在于备用集群中的额外键。从备用集群删除这些键之前,请与运维团队确认。
如果安装了以下组件,请重启其服务:
-
Log Storage for Elasticsearch:
-
Advanced Monitoring(原 Monitoring for VictoriaMetrics):
灾难恢复流程
此操作步骤将卸载 etcd 同步插件。卸载前,请确认备用集群的数据与主集群一致。如果备用集群缺少主集群中的数据时卸载插件,可能导致 owner 引用解析错误,并可能删除业务集群节点 Machine 对象;对于 immutable-OS 集群,这会销毁底层虚拟机。如果一致性检查报告存在缺失或多余的键,请勿卸载插件;先解决不一致问题或联系技术支持。
-
如有必要,重启备用集群上的 Elasticsearch:
-
验证备用集群中的数据一致性(检查方式与步骤 3相同)。如果检查报告存在缺失或多余的键,则备用集群与主集群不一致:请勿继续执行下一步。先解决不一致问题或联系技术支持。在两个集群上,还需确认没有处于非运行状态的
Machine节点,并在继续之前解决此类问题: -
卸载 etcd 同步插件;
-
移除两个 VIP 上针对
2379的端口转发; -
将平台域名 DNS 切换到备用 VIP,该 VIP 现在成为主集群;
-
验证 DNS 解析:
-
清除浏览器缓存并访问平台页面,确认页面反映的是原备用集群;
-
重启以下服务(如果已安装):
-
Log Storage for Elasticsearch:
-
Advanced Monitoring(原 Monitoring for VictoriaMetrics):
-
cluster-transformer:
-
-
如果业务集群将监控数据发送到主集群,请在业务集群中重启 warlock:
-
在原主集群上,重复启用 etcd 同步中的操作步骤,将其转换为新的备用集群。
常规检查
定期检查备用集群上的同步状态:
如果存在缺失或多余的键,请按照输出中的说明解决。
上架软件包
使用 violet 向备用集群上架软件包时,必须指定参数 --dest-repo <VIP addr of standby cluster>。
否则,软件包将被上架到主集群的镜像仓库,导致备用集群无法安装或升级扩展。
另请注意,必须提供备用集群镜像 registry 的身份验证信息,或提供 --no-auth 参数。
有关 violet push 子命令的详细信息,请参阅上架软件包。