0

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

4

1 回答 1

1

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

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

这可以防止以下故障:

基础设施:

  • 桶或池故障;
  • 对象普遍腐败;
  • 网站丢失

人为错误:

  • 删除版本或对象;
  • 拆除水桶
  • 消除整个池

笔记:

  • 只有每个对象的最新版本会同步到受保护的 (*-p) 存储桶,但如果脚本运行多次,您将获得对象的最新状态;
  • 当 prod 存储桶中的对象被删除时,rnode 只会在同步时使用 DeleteMarker 标记该对象
  • 这不能缩放!随着存储桶数量的增加,同步时间变得难以维持
于 2020-12-20T10:57:56.447 回答