使用 MinIO 为 MongoDB 创建快照备份

Snapshot Backups for MongoDB Using MinIO

随着数据量和频率以空前速度持续增长和加速,对象存储继续作为数据堆栈的支柱,推动着各种数据产品的创新和效率提升。其中,MongoDB 在 NoSQL 领域脱颖而出,提供了一种多功能且可扩展的解决方案,专门用于管理非结构化和半结构化数据,例如 JSON 文件。它擅长解决应用程序系统持续处理小而关键数据(例如电子商务交易、研发、物联网传感器读数等)提出的特定需求。

现代数据基础设施唯一真正的备份存储是高性能、开源且可通过行业标准 S3 API 访问的对象存储。VeeamCommvault 不断地验证了这一断言。

我们已经介绍了如何使用 MinIO Jumbo 加速 MongoDB 备份。此方法利用了 mongodump,这是一个用于备份和恢复小型 MongoDB 部署的强大工具。但是,此方法不建议用于捕获大型企业部署的快照。这是因为,当要备份的数据大于系统内存时,mongodump 可能会对性能产生不利影响。此外,mongodump 不适合用于分片集群,因为它无法保证跨多个分片的交易原子性。

鉴于这些限制,Ops Manager 是大型备份的首选方法。Ops Manager 属于 MongoDB Enterprise Advanced 中提供的付费订阅工具套件。Ops Manager 专注于通过读取 Oplog 数据以指定的时间间隔创建快照,从而持续备份副本集和分片集群。它还提供点时间恢复功能。与其他 MongoDB 备份工具相比,Ops Manager 的独特之处在于其灵活性,因为它可以部署在您的基础设施上,从而实现一定程度的可移植性和潜在的成本节约。

本教程将重点介绍如何使用 Ops Manager 备份在 MongoDB Enterprise Server 上运行的副本集,并使用 MinIO 作为快照存储和额外的 Oplog 存储。

了解 MongoDB 备份基础知识

Ops Manager 可以执行完整备份和增量备份,完整备份对于初始备份、删除后备份或块大小更改场景是必要的。完整备份后跟增量备份是一种非常常见的策略,因为它提供了成本和网络效率。

当您为 MongoDB 部署启用备份时,您正在创建用于定期获取 MongoDB 副本集或分片集群数据快照的工作流程。

以下是该工作流程的一些关键要素

  • 数据快照:Ops Manager 定期在用户计划的时间间隔内获取数据目录的快照。
  • 监控:MongoDB 代理监控您的部署,并提供内置工具来评估查询和模式性能等指标。
  • 数据传输:备份守护程序将这些快照从您的 MongoDB 部署复制并发送到 MinIO。
  • 增量更改:为了使备份保持最新,Ops Manager 使用 WiredTiger 的增量备份游标工具来捕获自每个副本集操作日志(Oplog)中上次快照以来对数据所做的任何更改。这些日志由 MongoDB 代理跟踪,并且压缩的批次或切片存储在 MinIO 中。
  • 恢复:在发生数据丢失或其他问题时,Ops Manager 允许您从这些快照恢复 MongoDB 数据。
图表改编自“Ops Manager 架构”。https://mongodb.ac.cn/docs/ops-manager/current/core/system-overview

在备份流程的规划阶段,MongoDB 强烈建议您通过其支持门户创建工单。他们可以帮助您为您的部署规划合适的架构。在几乎所有情况下,对象存储都扮演着关键角色。

为 MongoDB 快照备份设置 MinIO

要利用 MinIO 满足您的备份需求,您需要启动并运行 MinIO 服务器。如果您尚未设置 MinIO,请继续在您选择的平台上安装它。安装 MinIO 后,您可以使用 Web 控制台或 mc 命令行工具访问它。如果您选择 mc,此处 是安装步骤。

创建一个存储快照的桶。不要创建子文件夹,因为 Ops Manager 不支持这些文件夹。您需要先为您的快照存储创建一个桶。

然后,再为您的 Oplog 存储创建另一个桶。

配置 MongoDB 将快照备份到 MinIO

本教程的先决条件是有效的 Ops Manager 和一个您打算备份的副本集。如果您尚未安装 Ops Manager,请参考MongoDB 的指南

您可以使用 Ops Manager 创建新的部署,但本教程假设您已经拥有现有的副本集。如果您尚未这样做,请按照MongoDB 的指南来监控现有部署。您需要将 Ops Manager 代理下载到 MongoDB 部署正在运行的服务器上,但向导将引导您完成此过程。

接下来的几个配置可以在 Ops Manager 的 Admin 面板中完成。单击备份面板以打开快照存储选项。

在此配置中,快照将存储在 MinIO 中。配置正确后,您的 S3 存储应类似于以下内容。您需要使用高级配置选项。

  • S3 桶名称 - 您为快照存储创建的 MinIO 桶
  • 区域覆盖 - 设置为 us-east-1
  • S3 端点 - 对于本教程,请勿在 Minio 主机 URL 中使用 https。指定 MinIO S3-API 的端口号,而不是 MinIO 控制台的端口号。
  • 路径样式访问 - 选中
  • AWS 访问密钥 - MinIO 用户名
  • AWS 密钥 - MinIO 密码
  • <主机名>:<端口> - 副本集成员的逗号分隔列表
  • 确认 MongoDB 无法为 MinIO 提供支持 - 选中

虽然快照存储桶的必要性似乎显而易见,但 Oplog 存储选项可能并不明显。作为对前面概述的工作流程的解释和回顾,MongoDB 代理会持续监控您的副本集并跟踪主副本集 Oplog(操作日志)中的任何更改。其他副本集将复制并将其应用于自己的 Oplog。MongoDB 代理跟踪所有副本集的 Oplog,然后将这些新的 Oplog 条目传输到 Ops Manager。这些 Oplog 条目以称为 Oplog 切片的压缩包的形式发送,这些切片需要存储才能使 Ops Manager 正常运行。

导航到 Admin 面板,然后导航到 Oplog 存储面板以配置 Ops Manager 的 Oplog 存储。选择添加新的 s3 Oplog 存储,然后选择高级配置面板。

配置正确后,您的 Oplog S3 存储面板应类似于以下屏幕截图。您绝对需要将 Oplog 存储设置为与快照存储不同的桶。所有其他必需字段都应该与快照存储配置面板中的字段相同。

您现在可以启用持续备份。

您将首先被要求启用HEAD 目录(如果您尚未这样做)。这可以在 Admin 下的备份初始配置中完成。默认目录是副本集的 dbpath

通过单击 Ops Manager 开始页面上的持续备份来启动 Ops Manager 备份向导。

单击绿色的开始设置按钮以开始此过程。

您需要先安装 MongoDB 代理。我们在教程的前面假设您已经完成了此操作,但如果您尚未完成,则必须现在进行。最低要求是监控实例和备份实例各一个。在生产环境中,这两个实例应在同一台服务器上激活,并且该服务器必须与将要监控的 mongod 实例位于不同的服务器上。

完成安装代理的指南,进行配置,并在验证后单击下一步按钮以继续。

下一个屏幕将指导您在您已添加到项目的副本集上启用备份。请注意,备份只能在 MongoDB Enterprise 上启用。如果您使用的是社区版,则需要进行升级,或者使用前面提到的 mongodump

如果成功,您现在应该能够在您的部署中看到已启用备份。

首次配置 Ops Manager 时,系统会要求您配置 Ops Manager 快照计划。如果您的需求发生了变化,您可以随时通过导航到 Admin,然后导航到 Ops Manager 配置来编辑计划。您无法创建按需快照,并且初始备份功能已被弃用。本质上,您启用备份,然后等待第一个备份运行。

如何恢复备份

Ops Manager 允许您从完整的计划快照或快照之间特定时间点恢复数据,这适用于分片集群和副本集。基于快照的恢复是最简单的方法,它涉及 Ops Manager 直接从 MinIO 读取数据。

相比之下,使用 Ops Manager 进行时间点恢复涉及从 MinIO 获取快照数据,将其应用于存储的 Oplog 直到指定的时间点,然后将组合交付给 Ops Manager。Ops Manager 中的配置选项允许您指定每个备份保留多少 Oplog 数据,这会影响时间点恢复的持续时间。

要配置 Ops Manager 从“持续备份”面板进行恢复,只需点击部署并选择恢复选项即可。按照向导的步骤选择您的恢复点,并决定是恢复到另一个集群还是下载文件。

结论

本综合指南探讨了 MongoDB Ops Manager 和 MinIO 之间的协同作用,展示了每个在保护 MongoDB 数据方面发挥的关键作用。虽然mongodump对于较小的部署仍然是一个可行的选项,但 Ops Manager 是更大规模企业场景的首选。它能够无缝创建和恢复 MongoDB 资源的快照,结合 MinIO 高性能、开源和与 S3 API 兼容的存储,构成了强大的备份策略的基础,确保 MongoDB 数据即使在遇到意外挑战时也能保持安全和可访问。

最后,请记住保持 MongoDB 和 MinIO 安装的更新,以利用最新的功能(例如 Ops Manager)和安全更新。在 Slack 上或通过电子邮件发送至 hello@min.io 展示您的 MongoDB 和 MinIO 备份架构。