基于文件拷贝的初始同步在Percona服务器MongoDB中大幅超越逻辑初始同步
在之前的文章《大规模可扩展性:Percona服务器MongoDB的基于文件拷贝初始同步》中,我们展示了Percona服务器MongoDB中新的基于文件拷贝的初始同步(FCBIS)的一些早期基准测试结果。这些初步结果已经表明,与默认的逻辑初始同步相比有显著改进。
在这篇文章中,我们通过更结构化的比较扩展了测试。我们使用不同大小的数据库执行了多次初始同步操作,从几GB到几百GB,再到几TB。我们还测试了不同数量的索引和集合的影响。
对于每个测试,我们测量了执行初始同步所需的时间:停止一个节点,删除数据目录,然后重新启动它,这会触发初始同步。在提供的图表中,您可以看到两种方法之间的时间比较。
重要说明
FCBIS功能仅在Percona服务器MongoDB的ProBuild中可用,从版本8.0.12-4和7.0.22-12开始。Percona服务器MongoDB的ProBuild是一个包含专门构建的企业功能的构建版本。它包装在由Percona创建和测试的软件包中,可供Percona客户使用。非付费的Percona软件用户也可以从Percona ProBuilds中受益,但他们需要从Percona提供的源代码构建,这些源代码对所有人开放。
使用方法
FCBIS方法是将数据文件从源节点物理复制到目标节点。它比默认的逻辑初始同步快得多,特别有利于大型数据集。使用这种初始同步方法可以加速集群扩展并提高恢复性能。
Percona的基于文件拷贝的初始同步实现与MongoDB Enterprise Advanced兼容,并具有相同的配置参数。
要选择初始同步方法,请在目标节点的配置文件中指定initialSyncMethod参数:
|
|
您只能在启动时设置此服务器参数。如果要返回默认行为,可以将参数设置为logical或直接删除配置。
测试环境
我们在AWS上使用EC2实例部署了一个3节点副本集(主-从-从)。以下是规格:
- 实例类型:t3.xlarge
- vCPU:4
- 内存:16 GB
- 存储:1.2TB,gp2,3600 IOPS
对于所有测试,我们使用了Percona服务器MongoDB 8.0.12-4,采用默认设置。使用POCDriver创建模拟集合和数据。
第一次测试:具有不同索引的小型数据集
让我们看看FCBIS如何影响具有不同数量索引的非常小的数据集。只创建了一个集合。
| 集合数 | 1 | 1 | 1 | 1 |
|---|---|---|---|---|
| 索引/集合 | 1 | 2 | 5 | 10 |
| 数据大小 | 30GB | 30GB | 30GB | 30GB |
| 存储大小 | 10GB | 10GB | 10GB | 10GB |
| 文档大小 | 500字节 | 500字节 | 500字节 | 500字节 |
| 逻辑同步(分钟) | 4 | 5 | 8 | 12 |
| FCBIS(分钟) | 2 | 2 | 3 | 3 |
在添加更多索引时,FCBIS的时间增加比逻辑同步更慢。在逻辑初始同步期间,索引重建需要更多时间。在物理拷贝中,文件稍多,但索引不需要重建。因此,我们创建的索引越多,逻辑同步增加得越快。
第二次测试:300GB数据集与不同索引
现在尝试使用具有几个集合的较大数据集。
| 集合数 | 2 | 2 | 2 | 2 |
|---|---|---|---|---|
| 索引/集合 | 2 | 3 | 4 | 5 |
| 数据大小 | 300GB | 300GB | 300GB | 300GB |
| 存储大小 | 100GB | 100GB | 100GB | 100GB |
| 文档大小 | 10KB | 10KB | 10KB | 10KB |
| 逻辑同步(分钟) | 25 | 26 | 28 | 29 |
| FCBIS(分钟) | 9 | 11 | 12 | 12 |
测试证实FCBIS比逻辑同步快2到3倍。它们还证实了拥有更多索引的影响。
第三次测试:1.5TB数据集与不同索引
现在转向副本集的大规模测试,使用1.5TB数据集。
| 集合数 | 5 | 5 | 5 | 5 |
|---|---|---|---|---|
| 索引/集合 | 1 | 4 | 7 | 10 |
| 数据大小 | 1.5TB | 1.5TB | 1.5TB | 1.5TB |
| 存储大小 | 500GB | 500GB | 500GB | 500GB |
| 文档大小 | 10KB | 10KB | 10KB | 10KB |
| 逻辑同步(分钟) | 111 | 125 | 129 | 131 |
| FCBIS(分钟) | 44 | 46 | 46 | 48 |
同样,FCBIS比逻辑同步快2到3倍。每个集合的索引越多,比率越高。
第四次测试:3TB数据集与不同索引
现在转向副本集的超大规模测试,使用3TB数据集和不同的索引。
| 集合数 | 60 | 60 | 60 |
|---|---|---|---|
| 索引/集合 | 0 | 5 | 10 |
| 数据大小 | 3TB | 3TB | 3TB |
| 存储大小 | 1TB | 1TB | 1TB |
| 文档大小 | 8KB | 8KB | 8KB |
| 逻辑同步(分钟) | 212 | 235 | 275 |
| FCBIS(分钟) | 87 | 93 | 102 |
再次确认了相同的行为。在超大规模下,FCBIS更可取,我们创建的索引越多,逻辑同步越慢。
第五次测试:增加集合数量的影响
在最后一个测试中,目标是测试增加集合数量对数据大小的影响,但保持每个集合的索引数相同。
| 集合数 | 1 | 5 | 10 | 20 | 40 | 60 | 80 | 100 |
|---|---|---|---|---|---|---|---|---|
| 索引/集合 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
| 数据大小 | 4GB | 30GB | 66GB | 123GB | 230GB | 330GB | 426GB | 530GB |
| 存储大小 | 2GB | 10GB | 22GB | 41GB | 76GB | 110GB | 142GB | 177GB |
| 文档大小 | 3KB | 3KB | 3KB | 3KB | 3KB | 3KB | 3KB | 3KB |
| 逻辑同步(分钟) | 1 | 4 | 9 | 17 | 35 | 54 | 82 | 96 |
| FCBIS(分钟) | 2 | 2 | 3 | 5 | 9 | 13 | 17 | 21 |
正如预期的那样,两种方法随着数据量的增加都需要更长时间,但逻辑同步随着集合数量的增加几乎呈指数增长,而FCBIS看起来是线性的。比率从2倍到4倍,并且在更大的数据集上应该会进一步增加。
结论
在大型数据集上,与逻辑初始同步相比,基于文件拷贝的方法可以提供2到4倍的初始同步速度提升,特别是在有大量集合和更多索引的情况下。这意味着添加新的副本集成员或在故障后恢复节点可以在以前所需时间的一小部分内完成。
对于运行大型MongoDB部署的环境,基于文件拷贝的初始同步是一个改变游戏规则的功能,与传统的逻辑方法相比,提供了显著的效率和操作优势。
请记住,结果可能受到外部因素的影响,如网络开销、存储资源和MongoDB特定的调优。无论如何,我们可以说在大多数使用案例中,FCBIS绝对更快。
我们很期待听到您在Percona服务器MongoDB中使用新的基于文件拷贝的初始同步方法的经验。您的反馈和性能结果对我们继续改进软件非常宝贵。请在我们的社区论坛https://forums.percona.com/c/mongodb/percona-server-for-mongodb/17上分享您的想法、基准测试和遇到的任何问题。我们期待听到您的意见,并感谢您对Percona社区的贡献!