块存储灾难恢复
RBD Mirror 是 Ceph 块存储(RBD)的一项功能,支持不同 Ceph 集群之间的异步数据复制,实现跨集群的灾难恢复(DR)。其核心功能是以主备模式同步数据,确保主集群故障时备份集群能够快速接管服务。
- RBD Mirror 基于快照进行增量同步,默认快照间隔为每小时一次(可配置)。主备集群间的差异数据通常对应于一个快照周期内的写入。
- RBD Mirror 仅提供底层存储数据备份,不包含 Kubernetes 资源备份。请使用平台的 备份与恢复 功能备份 PVC 和 PV 资源。
术语
备份配置
前提条件
- 准备两个能够部署 Alauda Build 版本 Rook-Ceph 的集群:Primary 集群和 Secondary 集群。
- 两个集群必须运行相同的平台版本(v3.12 及以上)。
- 在 Primary 和 Secondary 集群中分别创建分布式存储服务。
- 在 Primary 和 Secondary 集群中创建同名的块存储池。
- 请确保以下两个镜像已上传至平台私有镜像仓库:
quay.io/csiaddons/k8s-controller:v0.12.0-><registry>/csiaddons/k8s-controller:v0.12.0quay.io/csiaddons/k8s-sidecar:v0.12.0-><registry>/csiaddons/k8s-sidecar:v0.12.0
网络前提条件
Primary 和 Secondary 集群之间的同步通过 Ceph 的 Public 网络进行,因此站点间 Public 网络必须满足以下要求:
- 每个集群必须拥有独立的 Public 网络段,Primary 和 Secondary 集群的 Public 网络必须完全可路由且相互可达。
- Public 网络的持续带宽利用率不应超过 60%,以保证复制突发和故障切换场景下的充足余量。
- 两站点间的往返时延(RTT)应小于 30 毫秒。
- 两个 Public 网络间的丢包率应低于 0.05%,以保证复制性能的稳定和可预测。
操作步骤
引导对等节点(Primary <-> Secondary)
-
启用 Primary 集群块存储池的镜像功能
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
<block-pool-name>:块存储池名称。
-
该令牌是建立集群间镜像连接的关键凭证。
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
-
在对等集群创建令牌 Secret
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
-
<token>:从步骤 2获取的令牌。在 Primary 集群中,使用从 Secondary 集群获取的令牌配置该字段。
在 Secondary 集群中,使用从 Primary 集群获取的令牌配置该字段。
-
<block-pool-name>:块存储池名称。
-
-
为块存储池打补丁配置对等 Secret
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
<block-pool-name>:块存储池名称。
-
部署镜像守护进程
该守护进程负责监控和管理 RBD 镜像同步进程,包括数据同步和错误处理。
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
-
验证镜像状态
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
<block-pool-name>:块存储池名称。
配置卷复制环境
该功能支持高效的数据复制和同步,无需中断主应用操作,提升系统可靠性和可用性。
-
部署 CsiAddons Controller
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
<registry>:平台镜像仓库地址。
-
启用 CsiAddons sidecar
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
等待所有 csi pod 成功重启:
-
创建 VolumeReplicationClass
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
<scheduling-interval>:调度间隔(例如,schedulingInterval: "1h" 表示每小时执行一次)。
为 PVC 启用镜像功能
在 Primary 集群的 Control 节点上执行以下命令:
<vr-name>:VolumeReplication 对象名称,建议与 PVC 名称相同。<namespace>:VolumeReplication 所属命名空间,必须与 PVC 命名空间一致。<pvc-name>:需要启用镜像的 PVC 名称。
注意
启用后,Secondary 集群中的 RBD 镜像将变为只读状态。
计划迁移
使用场景:数据中心维护、技术更新、灾难规避等。
迁移切换
迁移切换是指将生产环境切换到备份设施(通常为恢复站点)或反向切换的过程。
迁移切换时,应停止对主站点镜像的访问,并将镜像在 Secondary 集群上设为主状态,以便恢复访问。
前提条件
- 已备份并恢复 Primary 集群的 Kubernetes 资源到 Secondary 集群,包括 PVC、PV、应用工作负载等。
操作步骤
按以下步骤将工作负载从 Primary 集群计划迁移到 Secondary 集群:
-
缩减所有使用镜像 PVC 的应用 Pod(Primary 集群)。
-
更新 Primary 集群所有启用镜像的 PVC 的 VolumeReplication,将
spec.replicationState设置为secondary。 -
在 Secondary 集群为所有启用镜像的 PVC 创建 VolumeReplication。
<vr-name>:VolumeReplication 对象名称,建议与 PVC 名称相同。<namespace>:VolumeReplication 所属命名空间,必须与 PVC 命名空间一致。<pvc-name>:需要启用镜像的 PVC 名称。
-
检查 VolumeReplication CR 状态,确认镜像在 Secondary 站点被标记为
primary。 -
镜像标记为
primary后,PVC 即可使用。此时可扩展应用以使用该 PVC。
灾难恢复
使用场景:自然灾害、断电、系统故障及崩溃等。
故障切换(突发停机)
发生灾难恢复时,在 Secondary 站点创建 VolumeReplication CR。
由于与 Primary 站点连接丢失,operator 会自动向驱动发送 GRPC 请求,强制将数据源标记为 Secondary 站点的 primary。
前提条件
- 已备份并恢复 Primary 集群的 Kubernetes 资源到 Secondary 集群,包括 PVC、PV、应用工作负载等。
操作步骤
-
在 Secondary 集群为所有启用镜像的 PVC 创建 VolumeReplication。
<vr-name>:VolumeReplication 对象名称,建议与 PVC 名称相同。<namespace>:VolumeReplication 所属命名空间,必须与 PVC 命名空间一致。<pvc-name>:需要启用镜像的 PVC 名称。
-
检查 VolumeReplication CR 状态,确认镜像在 Secondary 站点被标记为
primary。 -
镜像标记为
primary后,PVC 即可使用。此时可扩展应用以使用该 PVC。
故障恢复后的回切
当 Primary 站点故障集群恢复后,若需从 Secondary 站点回切,按以下步骤操作:
前提条件
- 已备份并恢复 Primary 集群的 Kubernetes 资源到 Secondary 集群,包括 PVC、PV、应用工作负载等。
操作步骤
-
缩减 Primary 站点正在运行的应用(如有),确保所有工作负载使用的持久卷不再被 Primary 集群使用。
-
在 Primary 站点将 VolumeReplication CR 的 replicationState 从
primary更新为secondary。 -
缩减 Secondary 站点的应用。
-
在 Secondary 站点将 VolumeReplication CR 的 replicationState 从
primary更新为secondary。 -
在 Primary 站点确认 VolumeReplication 状态标记为卷已准备好使用。
-
卷标记为准备好后,在 Primary 站点将 replicationState 从
secondary改回primary。 -
在 Primary 站点重新扩展应用。