LVM + MongoDB的。 降低备份创build的速度

直到最近,我们一直在使用SAS磁盘上的RAID10将mongo备份归档到隐藏SECONDARY服务器上的LVM快照

目前,从500Gb数据量的快照操作需要花费很长时间。

最终档案大约是100Gb,在30分钟内创build第一个35Gb之后,磁盘速度令人难以置信。 直到存档达到52 Gb的那一刻,它工作了6个多小时。 我知道在主卷上的活动I / O期间执行LVM快照可能会减慢磁盘操作速度,但无法成像,可能会使速度减慢数十倍!

现在我正在考虑如何提高备份的速度

作为一个潜在的解决scheme,我看到了在备份服务器上停止mongodb并从“离线”服务器/卷运行LVM快照的方式。 然后再次启用它,并与主副本集重新同步。

但是,这种方式可能会导致一个问题,当php-mongo驱动程序没有正确反应副本集中的服务器列表更改。 而且我们需要在所有连接的客户端上重新启动php-fpm以解决这个问题,并使php迅速看到新的变化。

请您介绍一下如何在主动I / O负载下对数据500Gb +进行mongo备份的最佳方法。

先谢谢你!

对于LVM快照速度的减慢,如果您正在大量文件上进行大量随机分布式写入操作(如果您在大型MongoDB数据集中插入/读取文档,那么LVM确实很难跟上)。 数据库上的修复 / 压缩 (或从头开始重新同步节点 )可以帮助改变文件的数量(压缩将“碎片整理”文件中的数据,修复/重新同步将重写从头开始的数据),但这可能只是一个渐进的改进。

就你提出的解决scheme而言,这听起来像是一个很好的解决scheme,但我build议你从隐藏的节点上创build你正在备份的节点 ,然后你可以消除对驱动程序的担忧并设置更改。 驱动程序使用isMaster命令来确定一个集合的布局,并且当一个节点被隐藏时,它不会被该命令返回。

然后,您可以closures节点,执行快照,然后重新启动一次,让其重新同步。