去年,我建立了一个 mongoDB 生产集群。它有一个路由器、3 个配置服务器和 3 个分片(包含一个大数据库,数据分布在它们之间)。我们想添加其他分片来形成副本集,但由于各种原因(例如存储空间),我们仍然没有这样做。在这种情况下,备份是一件很麻烦的事。我认为 mongodump 是我唯一的选择(否则我必须关闭所有东西)。但 mongorestore 迫使我在一台服务器上恢复所有内容,然后才重新分片所有内容。
我想知道是否有可能部署一台与集群其他部分分离的新服务器,该服务器将接收之前介绍的集群的完整数据库?它必须是同步的(异步或同步)。
这只是一个临时的解决方案,但我在文档或网络上没有找到任何信息......如果我们的集群出现问题,它将允许我们的服务器做好准备。
谢谢。
答案1
我认为 mongodump 是我唯一的选择(否则我必须关闭一切)
mongodump
就生产影响、易用性或效率而言,使用 备份分片集群通常不是最佳选择。使用 ,您可以有效地导出集合数据和索引定义mongodump
,然后使用 在另一个环境中重建数据库mongorestore
。转储数据可能会对性能/工作集产生重大影响,因为所有数据都已通过 MongoDB 服务器读取;恢复也可能需要更长时间,因为需要重建索引。
替代(且影响较小的)方法是文件系统快照或商业服务,例如MongoDB云管理器完整的备份解决方案应提供持续备份,并定期提供快照和保留策略。例如,请参阅 Cloud Manager 的备份准备指导。
mongorestore 强迫我在单个服务器上恢复所有内容,然后才重新分片所有内容。
MongoDB 手册中有教程使用数据库转储备份分片集群和使用数据库转储恢复分片集群按照记录的方法,您不必在从备份恢复时重新分片,但是有多个步骤来协调每个分片和集群元数据的一致备份和恢复。
如果您使用mongodump
导出所有数据进行备份(而不是遵循分片集群备份程序),mongorestore
则不会重新创建具有分片选项的集合。但是,您可以先设置分片,然后mongorestore
将其设置到现有的分片集合中。例如,如果您想恢复单个分片集合,您可以创建一个具有所需分片键的空集合,然后预分割块在导入数据之前。
我想知道是否有可能部署一台与集群其他部分分离的新服务器,该服务器将接收之前介绍的集群的完整数据库?它必须是同步的(异步或同步)。
你可以使用类似的解决方案Mongo 连接器将数据从分片集群复制到备份 MongoDB 部署。这将确保您有另一个备用部署,但不能满足通常的备份要求,例如能够恢复到以前的快照或时间点。
这只是一个临时的解决方案,但我在文档或网络上没有找到任何信息......如果我们的集群出现问题,它将允许我们的服务器做好准备。
如果您需要临时解决方案,我会强烈建议您使用商业备份服务来备份您的生产数据,直到您有更多时间评估替代方案。
灾难规划应考虑数据和基础设施的容错能力和备份/恢复时间:
对于正常的操作问题(例如硬件/服务器故障),您应该使用副本集来规划适当的冗余和故障转移,以支持每个分片。副本集成员可以分布在多个数据中心和/或地区,具体取决于您对灾难恢复和故障转移的要求。
有效的备份策略将帮助您应对意外情况,因为生产环境中的数据不可用,您需要恢复部分或全部数据。最极端的情况是需要从备份重建分片集群,但更常见的情况是由于用户或软件错误而意外删除或修改数据。
您应该考虑备份自动化、备份隔离、恢复目标(例如快照与时间点)、恢复时间目标和生产影响等方面,以便为您的部署创建最合适的灾难恢复计划。
有关更多信息,我建议阅读 MongoDB 的白皮书备份及其在灾难恢复中的作用。