块存储灾难恢复
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
操作步骤
引导 Peer(Primary <-> Secondary)
-
启用 Primary 集群块存储池的镜像功能
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
<block-pool-name>:块存储池名称。
-
该令牌是建立集群间镜像连接的关键凭证。
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
-
在对端集群创建 Peer Token Secret
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
-
<token>:从步骤 2获取的令牌。在 Primary 集群中,使用从 Secondary 集群获取的令牌配置此字段。
在 Secondary 集群中,使用从 Primary 集群获取的令牌配置此字段。
-
<block-pool-name>:块存储池名称。
-
-
为块存储池 Patch Peer Secret
在 Primary 和 Secondary 集群的 Control 节点上执行以下命令:
参数说明:
<block-pool-name>:块存储池名称。
-
部署 Mirror Daemon
该守护进程负责监控和管理 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 集群:
-
缩减所有在 Primary 集群使用镜像 PVC 的应用 Pod。
-
更新 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、应用工作负载等。
操作步骤
-
缩减主站点正在运行的应用(如有),确保所有工作负载使用的持久卷不再被主集群使用。
-
在主站点更新 VolumeReplication CR,将 replicationState 从 primary 修改为 secondary。
-
缩减 Secondary 站点的应用。
-
在 Secondary 站点更新 VolumeReplication CR,将 replicationState 从
primary修改为secondary。 -
在主站点确认 VolumeReplication 状态标记为卷已准备好使用。
-
卷标记为准备好使用后,在主站点将 replicationState 从 secondary 修改为 primary。
-
在主站点重新扩展应用。