作为概念验证类型的项目,我设置了一个分片的MongoDB,只有两个分片,三个服务器运行mongos实例.所有这些都在他们自己的
Windows服务器上,但我想尝试在
Linux系统上运行集群,因为我看到一些奇怪的行为,我认为可能与系统都在VM上运行的事实有关企业ESX服务器.而且,我只是好奇.
在阅读了尽可能多的文档之后,我发现将查询分派给正确的分片的“mongos”实例是轻量级的,通常可以在应用服务器或具有mongod实例的系统上运行(documentation).
我的问题是,可以配置MongoDB以便mongos实例在Windows服务器上运行,而mongod实例(分片)可以在Linux系统上运行吗? mongos实例是否仍然能够向Shards发送查询?
在我的情况下,这将是有益的一个原因是我的应用程序是一个.Net Web API,我想在IIS中托管,所以它必须在Windows上运行.在Linux上运行分片的好处可能是一个不正确的假设,即Linux系统比Windows服务器需要更少的开销,这意味着如果从云提供商在VM上运行它会更便宜.
最佳答案 没有理由不这样做.
MongoDB集群通过网络进行通信.他们甚至不知道集群或副本集的其他成员运行的操作系统.但请记住,异构架构存在一些维护问题:
>数据库的所有成员必须具有相同的版本才能正常协同工作.这意味着您需要同时更新所有内容.不同的操作系统增加了不必要的复杂性.
> MongoDBs进程在不同平台上运行时可能具有不同的性能特征.这使得负载平衡变得更加困难(但也开辟了新的可能性)
>很多其他原因,serverfault.com的家伙可以比我们更好地解释.
顺便说一句,虚拟化重型数据库服务器通常不是一个好主意.任何以磁盘IO为瓶颈的应用程序在裸机上运行得更好(根据系统管理员,您将在serverfault上找到,而不是在stackoverflow上).