为 mongo 数据库集群中的多个 mongo 节点 EBS 卷拍摄 EBS 快照

Taking EBS snapshot for multiple mongo node EBS volumes in mongoDB cluster

我在 mongoDB 分片的同一卷上有日志和数据,因此不需要仅在使用 fsyncLock 锁定后拍摄快照的一致性问题。 EBS 快照将是单个分片的一致时间点。

我想知道在 mongodb 集群中进行备份的首选方式是什么。我探索了两个选项:

  1. 大约在同一时间拍摄 EBS 快照的近似时间点一致备份。优点是,不需要使用写锁。
  2. 停止在系统上写入,然后拍摄快照。这将提供时间点一致的备份。

现在,我想知道它在生产中是如何实际完成的。我读过有关正在使用副本集的辅助节点的信息,但不清楚它如何提供时间点一致的备份。除非所有的从节点都有一致的时间点数据,否则EBS快照不可能是时间点的。例如,如果对于 NodeA 的辅助节点,数据与主节点同步,但 NodeB 的辅助节点的某些数据不是同步的。我在这里遗漏了什么吗?

此外,方法 1 是否会导致不一致的 MongoDB 集群(恢复时),例如崩溃或其他问题?

您的备份将分为多个阶段:

  1. sh.stopBalancer()
  2. mongos 上停止平衡器
  3. 您现在可以备份配置服务器的 config 数据库。无论您是使用 EBS 快照还是 mongodump --oplog
  4. 都没有关系
  5. 现在分片,您可以决定采用哪种方式:
    1. 或者:您使用 mongodump --oplog 备份每个节点。您不需要停止写入,因为您正在对 oplog 和数据库导出进行快照。此备份允许一致的恢复。恢复时,您可以使用 --oplogReplay--oplogLimit 选项来指定时间戳(假设您的 oplog 大小合适并且在备份期间没有滚动)。您可以在所有分片上并行执行转储,恢复由操作日志同步。
    2. 或者您 fsync 并锁定并为每个分片创建一个 EBS 快照(描述 http://docs.mongodb.org/ecosystem/tutorial/backup-and-restore-mongodb-on-amazon-ec2/)。 MongoDB 3.0 无法保证使用 WiredTiger 时数据文件不会发生变化。这里的代价是,您需要停止所有读写操作,因为您必须卸载设备。
  6. 现在用 sh.startBalancer()
  7. mongos 上启动平衡器

由于您不使用副本集,因此您不会遇到滞后问题 secondaries/a 写入不会在整个集群中复制。我最喜欢的选项是使用 mongodump/mongorestore,它可以很好地控制恢复。

更新:

最后,您必须决定要为获得某些收益而支付的费用:

  1. 快照:支付space、写锁和一定程度的一致性以获得快速备份、快速恢复时间,并且备份后不影响性能
  2. 转储:按时间付费并在备份期间驱逐工作集以获得更小的备份以实现一致且更慢的恢复,无写锁

一致的备份

任何分片集群备份过程的第一步应该是:

  • 停止平衡器(包括等待任何正在进行的迁移完成)。通常这是通过 sh.stopBalancer() shell 助手完成的。

  • 备份配置服务器(通常使用与分片服务器相同的方法,如 EBS 或文件系统快照)

我会将分片集群的一致备份定义为分片集群元数据(即存储在您的配置服务器上的数据)与各个分片的备份相对应,并且每个单独的分片都已正确备份。停止平衡器可确保在备份过程中不会发生数据迁移。

假设您的 MongoDB 数据和日志文件在一个卷上,您可以在不停止写入您正在备份的节点的情况下保持一致 EBS snapshot or filesystem snapshot。快照异步发生。创建初始快照后,后续快照是增量的(只需要更新自上一个快照以来更改的块)。

时间点备份

对于活动的分片集群,您只能通过停止对集群的所有写入并为每个分片备份主数据来轻松捕获已写入数据的真实时间点备份。否则,正如您所猜测的那样,如果您从辅助节点备份,则分片之间可能存在不同的复制滞后。从辅助备份更常见,因为在写入快照时会有一些 I/O 开销。

如果您没有为您的分片使用复制(或者更喜欢从主备份)复制滞后警告不适用,但时间仍然是活动系统的近似值,因为快照需要在所有分片上同时启动。

时间点还原

假设您的所有分片都由副本集支持,则可以使用近似时间点一致的备份来协调 恢复 到更具体的时间点-时间使用replica set oplog for each of the shards (plus a config server). This is essentially the approach taken by backup solutions such as MongoDB Cloud Manager (née MMS): see MongoDB Backup for Sharded Cluster。 MongoDB Cloud Manager 利用每个分片上的备份代理使用复制 oplog 进行连续备份,并按计划定期创建完整快照。可以通过从完整数据快照开始然后将相关操作日志重播到请求的时间点来构建时间点恢复。

常见的制作方式是什么?

停机通常不是生产系统理想的备份策略,因此常见的方法是使用快照在近似时间点对 运行 分片集群进行一致备份。跨分片集群协调备份可能具有挑战性,因此备份 tools/services 也值得考虑。如果您的部署不允许快照(例如,如果您的数据 and/or 日志目录分布在多个卷中以最大化可用 IOPS,备份服务也可能更合适)。

注意:您真的应该考虑在生产部署中使用复制,除非这是一个非必要的集群或停机时间是可以接受的。副本集有助于最大化部署的正常运行时间和可用性,并且一些维护任务(包括备份)在没有数据冗余的情况下会更有影响力。