ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

云原生存储备份演练:Velero 结合 CSI Snapshot 秒级快照与容灾实战

云原生存储备份演练:Velero 结合 CSI Snapshot 秒级快照与容灾实战 云原生存储备份演练Velero 结合 CSI Snapshot 秒级快照与容灾实战在以微服务和容器化为主体的云原生架构中“无状态应用”可以依靠 Kubernetes 的 Deployment 和 HPA 实现秒级弹性与故障自愈。然而支撑企业核心业务运转的**有状态工作负载StatefulSets、向量数据库 Milvus、模型元数据库、配置中心 etcd、中间件有状态存储**才是决定大促数据安全与灾难恢复能力的“定海神针”。在很多团队的日常运维中对有状态卷的备份往往停留在传统的“Restic/Kopia 文件级逐文件扫描打包”阶段。在大促前夕面对动辄数 TB 的核心存储卷时传统的逐文件扫描备份不仅需要耗费数小时的漫长时间还会对宿主机的磁盘 IO 造成巨大的读写压力更为致命的是在备份执行期间由于数据卷持续有写操作发生恢复出来的备份数据极易存在文件系统级或数据库事务级的数据不一致损坏。为了在大促封网前实现核心有状态数据的秒级无损一致性快照Application-Consistent Snapshot与跨可用区/跨云异地容灾恢复Cross-Region Disaster Recovery我们必须利用Velero深度整合Kubernetes CSI VolumeSnapshot 机制与底层存储快照能力如 Ceph RBD / 云盘快照。[大促前夕核心有状态应用 (Milvus / PostgreSQL / PVC)] │ ▼ [Velero 备份编排引擎 (触发大促封网前全量一致性备份)] ├── 步骤 1: 触发 Pod 预备份 Hook (FLUSH TABLES WITH READ LOCK) ├── 步骤 2: 调用 Kubernetes CSI VolumeSnapshot API (秒级创建快照) ├── 步骤 3: 释放写锁应用恢复正常对外服务 (写阻塞时间 0.5秒) └── 步骤 4: 异步将快照元数据与 K8s 资源清单加密备份至异地对象存储 (S3) │ ┌───────────────────────┴───────────────────────┐ ▼ ▼ [本地机房数据损坏 ➔ 秒级快照回滚] [整个主可用区宕机 ➔ 异地灾备集群拉起] - 基于 VolumeSnapshot 10 秒克隆出新 PVC - 异地集群一键执行 velero restore - 绑定原应用 Pod业务瞬时原地复活 - 15 分钟内完成全站核心状态异地重建CSI VolumeSnapshot 底层机制与事务一致性直接对正在运行的数据库文件系统打底层快照相当于对服务器执行“暴力拔电”。如果此时有写操作正处于内核 Page Cache 或数据库 WAL 缓冲区中快照恢复后可能出现日志坏页。生产级 CSI 备份必须遵循严格的应用一致性三步走模型Pre-backup Hook预冻结通知应用或数据库将内存中的脏页强制刷盘fsync并加读锁暂停新事务CSI Snapshot 创建指针打标底层存储Ceph RBD / AWS EBS利用写时复制Copy-on-Write, COW技术在毫秒级记录当前的 Block 指针状态并生成快照 IDPost-backup Hook解除冻结快照句柄获取成功后立即释放应用写锁整个写阻塞窗口控制在200ms 以内。Kubernetes VolumeSnapshotClass 与 Velero 配置在集群中部署 CSI 快照驱动与VolumeSnapshotClassapiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: ceph-rbd-snapclass labels: velero.io/csi-volumesnapshot-class: true # 声明为 Velero 默认快照驱动 driver: rbd.csi.ceph.com deletionPolicy: Retain parameters: clusterID: c1829381-0182-4912-b102-391823910283 csi.storage.k8s.io/snapshotter-secret-name: csi-rbd-secret csi.storage.k8s.io/snapshotter-secret-namespace: kube-system在有状态应用如核心数据库的 Pod Annotation 中注入应用一致性冻结钩子apiVersion: apps/v1 kind: StatefulSet metadata: name: promo-milvus-etcd namespace: ai-storage spec: template: metadata: annotations: # Velero 备份前钩子: 触发数据库落盘与短暂停写 pre.hook.backup.velero.io/command: [/bin/sh, -c, etcdctl snapshot save /tmp/consistent-snap.db] pre.hook.backup.velero.io/container: etcd # 备份后钩子: 清理临时快照文件 post.hook.backup.velero.io/command: [/bin/sh, -c, rm -f /tmp/consistent-snap.db] post.hook.backup.velero.io/container: etcd生产级 Velero 大促前夕快照备份脚本在大促封网前 12 小时执行全量核心命名空间的一致性快照备份并将快照与清单同步推送到异地冷备对象存储#!/bin/bash # /opt/scripts/promo_disaster_backup.sh # 触发大促封网期核心状态全量快照备份 TIMESTAMP$(date %Y%m%d%H%M) BACKUP_NAMEpromo-golden-backup-${TIMESTAMP} echo [大促容灾] 开始创建黄金状态备份: ${BACKUP_NAME}... velero backup create ${BACKUP_NAME} \ --include-namespaces ai-storage,promo-production,ai-serving \ --snapshot-volumestrue \ --csi-snapshot-timeout10m \ --include-cluster-resourcestrue \ --storage-location remote-oss-disaster-bucket \ --ttl 720h0m0s \ --wait echo [大促容灾] 检查备份完成状态与快照列表... velero backup describe ${BACKUP_NAME} --details异地灾备集群拉起与恢复演练在灾备可用区AZ-Disaster的全新空集群中通过一行命令执行全站核心状态异地无损重建# 在异地灾备集群执行秒级状态恢复 velero restore create --from-backup promo-golden-backup-202609250000 \ --restore-volumestrue \ --wait # 验证 PVC 是否通过底层快照秒级克隆重建完毕 kubectl get pvc -n ai-storage kubectl get statefulsets -n ai-storage存储容灾演练的三项铁律快照必须演练可恢复性Restore Verification没有经过实际恢复测试的备份只是一串数字。封网前必须在隔离测试集群中完整拉起一次备份数据并验证业务数据完整性校验和Checksum快照跨地域异步镜像加密底层存储快照必须开启跨地域异步同步并在写入异地 S3 桶时启用 AES-256 服务端加密与防篡改对象锁定Object Lock / WORM保留灾难演练计时台账详细记录 RTO恢复时间目标控制在 15 分钟内与 RPO数据恢复点目标控制在 1 分钟内为大促指挥部提供坚实的数据底座保障。
返回列表