一个分片的Mongo数据库是否可以在Windows和Linux之间进行拆分(mongos和mongod)?

4
作为一个概念验证项目,我已经设置了一个分片的MongoDB,只有两个分片和三个运行mongos实例的服务器。所有这些都在自己的Windows服务器上,但我想尝试在Linux系统上运行集群,因为我看到一些奇怪的行为,我认为可能与这些系统都在公司ESX服务器上的虚拟机上运行有关。另外,我只是好奇。
阅读尽可能多的文档后,我发现将查询分配给正确的分片的“mongos”实例是轻量级的,并且通常可以在应用程序服务器或具有mongod实例的系统上运行(documentation)。
我的问题是,MongoDB是否可以配置为在Windows服务器上运行mongos实例,而在Linux系统上运行mongod实例(分片)? mongos实例仍然能够将查询分配给分片吗?

我之所以认为这对我有益,是因为我的应用程序是一个 .Net Web API,我想在 IIS 上托管它,因此它必须在 Windows 上运行。在 Linux 上运行分片的好处(这可能是错误的假设)是,Linux 系统需要比 Windows 服务器更少的开销,这意味着如果它在云提供商的虚拟机上运行,它将更便宜。


3
理论上没有任何阻碍,因为机器可以通过标准化的协议进行通信。 - Sammaye
1
我能预见到的唯一问题就是当你尝试维护这些系统时可能会遇到的头痛 :P 除此之外,@Sammaye是正确的:只要实例能够彼此通信即可,这与IP地址、端口、防火墙设置等无关。 - Lix
@Lix:什么头疼?我不明白为什么拥有异构基础设施需要比同构基础设施更多的维护工作? - mnemosyn
@mnemosyn - 这(大多数)只是个玩笑。我猜测可能还有其他的要求/限制阻止了OP在所有实例中使用相同或类似的主机... - Lix
1
我们已经发现,如果集群中的MongoDB版本(即使是次要版本)不同(包括mongos),可能会遇到问题。否则它应该可以正常工作。您尝试过这个吗?是否遇到任何问题? - titogeo
@gTito:我可能不会在近期尝试这个,但我至少想考虑它作为未来项目的一部分。 - Scampbell
1个回答

2

这个应该没有什么不可行的理由。

MongoDB集群通过网络通信。他们甚至不知道集群或副本集中其他成员所运行的操作系统。但要记住,异构体系结构会带来很多维护问题:

  • 数据库的所有成员必须具有相同的版本才能正常工作。这意味着您需要同时更新所有成员。不同的操作系统会增加不必要的复杂性。
  • 当MongoDB进程运行在不同平台上时,它们可能具有不同的性能特征。这使得负载平衡变得更加困难(但也开启了新的可能性)。
  • 还有许多其他原因,serverfault.com上的人可以比我们更好地解释。

顺便说一下,在虚拟化重型数据库服务器通常不是一个好主意。任何磁盘IO是瓶颈的应用程序都更适合在裸机上运行(根据系统管理员的说法,你会在serverfault上找到他们,而不是stackoverflow)。


1
关于运行虚拟化重型数据库服务器的观点很有趣。此外,在虚拟机上运行数据库会增加监控磁盘IO等复杂性,特别是当您无法访问虚拟机所在的(ESX)集群时。 - Scampbell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接