用于分片+冗余MongoDB环境的硬件

时间:2013-08-19 16:58:40

标签: performance mongodb hardware

我正在尝试从头开始规划一个新的数据库环境,我想知道需要多少台服务器以及它们应该提供多少性能。

由于我希望它快速,我正在考虑使用SSD内存和大量RAM。但是,闪存很昂贵,可以弥补服务器成本的最大部分。因此,应该从一开始就将整个系统设置为水平扩展,这样我就可以在需要更多存储/性能时添加更多节点。

要开始,我正在考虑使用2个分片,每个分片由主设备和副本从设备组成,以实现冗余。 MongoDB文档建议使用1个主服务器和2个服务器,但我担心它们不在可用预算中,因为这些服务器中的每一个都将配备大约200 GB的RAM和6x400 GB的SSD作为Raid 10。

使用分片时,还建议使用3个配置服务器来实现故障保护/高可用性。与上面相同,我认为1个主人和1个奴隶作为开始。

  • 您建议使用哪种硬件来配置服务器 上?它们是否应该与中的分片节点具有相同的性能 cpu / memory / harddisk的条款?或者我可以将它们置于虚拟化或 在更便宜的硬件上?
  • 我描述的设置是否有意义?怎么样 关于分片节点上RAM与硬盘的比例?目前,将两倍数量的光盘放入1个碎片(1个主机,1个从机)并跳过分片直到我真正需要它可能会更容易和更便宜。但是(如上所述) - 系统应该从一开始就准备好进行分片,因为存储需求可能会在一夜之间发生变化。或者是否可以将其设置为全部,但目前仅在1个分片上运行?
  • 因为我只打算使用2台而不是3台服务器 高可用性/故障保护我可能也需要仲裁器。他们 还需要专用硬件吗?或者我可以在为配置服务器和分片节点提供服务的虚拟mashine中使用一个仲裁器吗?或者你认为绝对必须使用3个单独的服务器进行冗余?

2 个答案:

答案 0 :(得分:5)

摇滚乐。听起来像一个很棒的设置。鉴于您的配置选择,我无法想象会过多地限制您的选择的预算。

  • 配置服务器不需要专用的物理服务器。这些运行相当轻松。您的mongos和配置服务器之间需要低延迟。您将始终希望确保主机可靠,并为灾难做好准备。确保仔细检查分片环境的备份过程。备份需要在分片群集的移动部分之间进行协调。如果可能,请在同一数据中心的虚拟服务器上运行配置服务器。

  • 是的,如果您打算在一台计算机上运行多个分片,那么您所描述的硬件是有意义的。这台功能强大的机器上的单个MongoDB将使机器大部分处于空闲状态。单个mongod进程不能使用那么多的RAM,I / O或CPU。你会想要“核心碎片”主机。在MongoHQ中,我们通过在容器中运行每个mongod来实现此目的,我们可以将它与同一台机器上的其他实例隔离开来。根据您的规范,您可以在一台主机上运行多达10个分片,如果您想要拉伸主机,则可以运行更多分片。

  • 您可以使用单个分片启动此操作,然后再迁移到分片群集。这是我们推荐的分片方法:除非必须,否则不要进行分片。通过延迟分片,可以提高对系统进行更改的灵活性。当分片到位时,你已经承诺了一条特定的路径,没有灵活性(当你知道未来时这是可以的)。通过延迟分片,你没有权衡。

  • 仲裁者不需要专用硬件。您可以在虚拟机上运行它们。这些不需要相同级别的备份要求,但应具有良好的正常运行时间。

  • 使用3台服务器不是实时正常运行时间的要求。但是,当一个数据主机停机几个小时后,您将被降级为单个数据主机。虽然降级到单个数据主机,但单个主机可以正常工作。因为您只有一秒钟的数据在运行,所以您的中断风险更高。话虽如此,对于大多数用例来说,2个节点加一个仲裁器是可以的,并且如果其中一个数据节点出现故障,它们将保持运行状态。

希望这有帮助!我们在MongoHQ上运行类似的配置,并且非常满意我们从主机获得的性能水平。

答案 1 :(得分:1)

我将在这里提出一些想法。

如果不知道你的工作集,这个答案几乎没用,也许它可能会产生一些指示。

  

您建议使用哪种硬件来配置服务器?

配置服务器,尽管更好地使用自己的硬件(服务器,而不是虚拟机)可以在大多数商用硬件上轻松运行,但您不需要任何花哨的东西。他们所做的就是存储您的集合配置,即使这样,它们也不会一直使用,mongos将缓存集群配置的间隔。

  

或者我可以将它们放在虚拟化或更便宜的硬件上吗?

我不会把它们放在虚拟化上,因为这通常表示它们要么在同一服务器上物理连接,要么关闭。你需要将它们放在真正的冗余服务器上,但是,你可以为它们获得廉价的硬件。

确保在分片和配置服务器之间建立一个合适的网络应该是自然的知识。

  

我描述的设置是否有意义?

不知道没有理解你的工作集,但是,你认为MongoDB必须完全适合你的内存声音。这是不真实的,只有工作集会(http://docs.mongodb.org/manual/faq/storage/#what-is-the-working-set),如果你正确地玩牌,它可以是特定时间范围内(通常是10分钟)数据的绝对分数。

  

分片节点上RAM与硬盘的比率如何?

稍微多一点,MongoDB可以使用该服务器,但我敢打赌它会在大部分时间闲置,我打赌你还没有真正计算出你的工作集。

  

目前,将两倍数量的光盘放入1个分片(1个主机,1个从机)并跳过分片直到我确实需要它可能会更容易和更便宜。

是。如果您需要这些磁盘,这是一个安全的选择。我要说你应该真的考虑一下你是否做过。

  

系统应该从头开始准备分片

如上面的答案所述,你可以创建一个成员分片集,然后从那里放大。

  

由于我只打算使用2台而不是3台服务器来实现高可用性/故障安全,我可能也需要仲裁器。

是的,使用3台服务器对于自动故障转移通常非常可靠,这在这里很重要。如果大多数服务器进行故障转移(50%或更多),则必须手动修复副本集。

这意味着在每个分片的两个服务器环境中,您实际上没有自动故障转移,因此MongoDB实际上不会完全填充其中一个核心优势:自动故障转移(这也是repilica集的核心目的......)。

不仅如此,您的用户必须等到您完成修复该设置,我相信这本身就存在问题。

  

他们还需要专用硬件吗?

不,正如我的评论(以及文档中)所述,仲裁者不需要在专用硬件上运行。但是,据说这可能很有用,特别是如果您希望通过将仲裁器拆分到另一个数据中心来创建故障转移冗余。

仲裁服务器可以在服务器的基础上运行,因此如果您决定将其拆分,请不要使用200多GB的RAM和6x400GB的SSD。刚刚得到一个......好吧,手机可以在技术上运行仲裁器(如果MongoDB支持Android和iOS)。

  

或者您正在使用3个单独的服务器进行冗余,绝对必须在您看来?

事实并非如此,但如上所述,在发生故障转移时会出现问题。

一个好的选择是将你的仲裁器实际放到你的应用服务器上,甚至可能每个应用服务器都有一个。