文件存储灾备

CephFS Mirror 是 Ceph 文件系统的一个功能,旨在实现不同 Ceph 集群之间的异步数据复制,从而提供跨集群的灾难恢复。其核心功能是以主备模式同步数据,确保在主集群发生故障时,备份集群能够快速接管服务。

WARNING
  • CephFS Mirror 基于快照执行增量同步,默认快照间隔为每小时一次(可配置)。主备集群之间的差异数据通常是一个快照周期内写入的数据量。
  • CephFS Mirror 仅提供底层存储数据的备份,无法处理 Kubernetes 资源的备份。请结合平台的 备份与恢复 功能对 PVC 和 PV 资源进行备份。

术语

术语说明
Primary Cluster当前提供存储服务的集群。
Secondary Cluster备份集群。

备份配置

前提条件

  • 准备两个适合部署 Alauda Build 版本 Rook-Ceph 的集群,分别为 Primary 集群和 Secondary 集群,确保集群间网络互通。
  • 两个集群使用的平台版本(v3.12 及以上)必须保持一致。
  • 在 Primary 和 Secondary 集群中分别创建分布式存储服务
  • 在 Primary 和 Secondary 集群中创建同名的文件存储池。

操作步骤

在 Secondary 集群启用文件存储池的 Mirror 功能

在 Secondary 集群的 Control 节点执行以下命令:

命令行
输出
kubectl -n rook-ceph patch cephfilesystem <fs-name> \
--type merge -p '{"spec":{"mirroring":{"enabled": true}}}'

参数说明

  • <fs-name>:文件存储池名称。

获取 Peer Token

该令牌是建立两个集群间镜像连接的关键凭证。

在 Secondary 集群的 Control 节点执行以下命令:

命令
输出
kubectl get secret -n rook-ceph \
$(kubectl -n rook-ceph get cephfilesystem <fs-name> -o jsonpath='{.status.info.fsMirrorBootstrapPeerSecretName}') \
-o jsonpath='{.data.token}' | base64 -d

参数说明

  • <fs-name>:文件存储池名称。

在 Primary 集群创建 Peer Secret

获取 Secondary 集群的 Peer Token 后,需要在 Primary 集群创建 Peer Secret。

在 Primary 集群的 Control 节点执行以下命令:

命令
输出
kubectl -n rook-ceph create secret generic fs-secondary-site-secret \
--from-literal=token=<token> \
--from-literal=pool=<fs-name>

参数说明

  • <token>:在步骤 2中获取的令牌。
  • <fs-name>:文件存储池名称。

在 Primary 集群启用文件存储池的 Mirror 功能

在 Primary 集群的 Control 节点执行以下命令:

命令
示例
输出
kubectl -n rook-ceph patch cephfilesystem <fs-name> --type merge -p \
'{
  "spec": {
    "mirroring": {
      "enabled": true,
      "peers": {
        "secretNames": [
          "fs-secondary-site-secret"
        ]
      },
      "snapshotSchedules": [
        {
          "path": "/",
          "interval": "<schedule-interval>"
        }
      ],
      "snapshotRetention": [
        {
          "path": "/",
          "duration": "<retention-policy>"
        }
      ]
    }
  }
}'

参数说明

  • <fs-name>:文件存储池名称。
  • <schedule-interval>:快照执行周期,详情请参考官方文档
  • <retention-policy>:快照保留策略,详情请参考官方文档

在 Primary 集群部署 Mirror Daemon

Mirror Daemon 持续监控文件存储池(已启用 Mirror)的数据变化,定期创建快照并将快照差异通过网络推送至 Secondary 集群。

在 Primary 集群的 Control 节点执行以下命令:

命令
输出
cat << EOF | kubectl apply -f -
apiVersion: ceph.rook.io/v1
kind: CephFilesystemMirror
metadata:
  name: cephfs-mirror
  namespace: rook-ceph
spec:
  placement:
    tolerations:
    - key: NoSchedule
      operator: Exists
  resources:
    limits:
      cpu: "500m"
      memory: "1Gi"
    requests:
      cpu: "500m"
      memory: "1Gi"
  priorityClassName: system-node-critical
EOF

故障切换

当 Primary 集群发生故障时,可以直接继续使用 Secondary 集群中的 CephFS。

前提条件

已将 Primary 集群的 Kubernetes 资源备份并恢复至 Secondary 集群,包括 PVC、PV 以及应用的工作负载。