跳到主要内容

容灾排障:实例、同步、切换和演练

容灾排障要沿着资源关系看:DisasterInstance 派生 DataSyncResourceSync,用户动作创建 DisasterOperation,演练创建 DisasterDrill

快速定位

现象优先检查
实例停在 Pending基础配置、集群、仓库、策略是否存在
实例停在 Initializing首次 DataSync 或 ResourceSync 是否失败
实例 ConfigError命名空间、策略、恢复策略、集群引用
DataSync 失败AppBackup/AppRestore、Velero、对象存储
ResourceSync 失败目标集群 CRD、资源冲突、modifier
Failover 失败DisasterOperation steps、目标副本、最终同步
Reprotect 失败反向集群访问、反向策略、角色状态
实例 Failedreason=RoleDriftDetected管理面期望主备、两个下游集群 Deployment/StatefulSet 副本
Drill 失败备份可用性、目标命名空间、清理残留

如果错误信息里出现 expectedPrimary=... role=Standby ... expectedSecondary=... role=Standby ... both clusters are scaled to zero,说明两个下游集群都被采样为 0 副本。详细判定逻辑和修复方式见 主备角色漂移与副本一致性检查

必查资源

kubectl get disasterinstance,datasync,resourcesync,disasteroperation,disasterdrill -A
kubectl get events -A --sort-by=.lastTimestamp | tail -100
kubectl -n disaster-system logs deploy/disaster-operator --tail=300

查看某个实例:

kubectl get disasterinstance <name> -o yaml
kubectl get datasync,resourcesync -l testudo.softcdata.com/instance=<name>
kubectl get disasteroperation -l testudo.softcdata.com/instance=<name>

Failover 卡住

按 step 排查:

  • PreCheck:实例和同步状态是否健康。
  • PauseSchedules:是否有并发操作。
  • ScaleDownSource:源集群访问和 workload 权限。
  • FinalSync:最后一次备份恢复是否成功。
  • ScaleUpTarget:目标集群资源和副本。
  • CheckReplicas:Pod 是否 Ready,是否需要跳过 Ready 检查。
  • SwitchRoles:status 更新和角色关系。

演练清理失败

检查:

  • 演练命名空间是否有 finalizer。
  • PVC/PV 是否被保护策略阻止删除。
  • 临时 Ingress 或 Service 是否仍被外部控制器占用。
  • Drill 对象状态是否允许再次 cleanup。

处理原则

  • 不要直接手改 status。
  • 不要在一个实例上并发触发多个高风险操作。
  • 保留失败 operation 和 events,直到定位完成。
  • 修改恢复策略后先手动同步,再执行 Failover。
  • 对生产问题,先判断是否需要 Cancel,避免自动重试扩大影响。