Ceph对象网关:什么是最好的备份策略?

问题描述

我有一个由Rook管理的Ceph集群,上面有一个RGW存储。我们正在尝试找出该商店的最佳备份策略。我们正在考虑以下选项:使用rclone通过S3接口备份对象,使用s3fs-fuse(尚未测试,但已知s3fs-fuse不够可靠),以及使用NFS-Ganesha重新导出RGW存储为NFS共享。 我们将有大量的RGW用户和大量的存储桶,因此这三种解决方案对我们来说都无法很好地扩展。另一种可能性是执行支持RGW存储的RADOS池的快照并备份这些快照,但是在这种情况下RTO会更高。快照的另一个问题是,似乎不可能在所有RGW支持池中一致地执行快照。我们从不从RGW存储中删除对象,因此,如果我们从元数据池开始快照,此问题似乎就不会那么大-即使我们稍微在数据池上创建快照,它所引用的所有数据也将保留在原位。后来。它不会是超级一致的,但也不应被破坏。目前尚不清楚如何使用这种快照方案来及时还原单个对象(说实话,目前还不清楚如何使用该方案来还原单个对象),但这似乎值得尝试。 我们还有什么其他选择?我想念什么吗?

解决方法

我们计划在 2021 年实施 Ceph。 最初,我们预计不会有大量用户和存储桶。 在等待 https://tracker.ceph.com/projects/ceph/wiki/Rgw_-_Snapshots 期间,我成功地测试了该解决方案,以利用“八达通”版本中的多站点配置 + 同步策略 (https://docs.ceph.com/en/latest/radosgw/multisite-sync-policy/) 来解决对象存储保护问题。 假设您将 Prod 站点中的所有区域都同步到 DRS,

  • 在 DRS 中创建一个区域,例如“backupZone”,而不是 Zone Sync'd from 或任何其他 Prod 或 DRS 区域;
  • 此备份区的端点位于 2 个或更多 DRS 集群中 节点;
  • 使用 (https://rclone.org/s3/) 编写一个 bash 脚本:对于每个 DRS 区域中的“bucket”,在 backupZone 中创建一个启用版本的“bucket”-p 并安排同步,例如一天两次,从“bucket”到“bucket”-p;
  • 保护对backupZone端点的访问,以免普通
    用户(或集成)可以访问它们,只能从
    中的其他节点访问 集群(显然)和运行基于 rclone 的脚本的服务器;
  • 当出现故障时,只需从 *-p 中恢复所有对象 再次使用 rclone 将存储桶复制到原始存储桶或 文件系统。

这可以防止以下故障:

基础设施:

  • 存储桶或池失败;
  • 对象普遍损坏;
  • 网站丢失

人为错误:

  • 删除版本或对象;
  • 删除存储桶
  • 消除整个池

注意事项:

  • 仅将每个对象的最新版本同步到受保护的对象 (*-p) 存储桶,但如果脚本多次运行,您将拥有 对象随时间变化的最新状态;
  • 当 prod 存储桶中的对象被删除时,rnode 只是标记 同步时带有 DeleteMarker 的对象
  • 这不能缩放!!随着桶数的增加,时间 同步变得站不住脚

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...