我想问一个有关本文档中描述的最佳实践的问题:
http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf
使用多个查询路由器。使用跨多个服务器的多个mongos进程。常见的部署是将mongos进程共定位在应用程序服务器上,从而允许应用程序和mongos进程之间进行本地通信。mongos进程的适当数量将取决于应用程序和部署的性质。
有关我们的部署的背景知识。我们有很多应用服务器节点。它们每个都使用无状态RESTful WS运行一个基于JVM的进程。正如最佳实践所建议的那样,每个单个应用程序服务器节点都运行自己的mongos
进程,这意味着JVM进程的数量始终等于进程的数量mongos
。
所有mongos
进程都连接到3台配置服务器和几个mongo分片(每个分片内都有副本集)。即使我们使用分片部署,也没有真正分片集合。实际上,我们有大量的数据库,这些数据库在创建时就分布在所有分片上(这是目前分片的主要用例)。
由于最佳实践还表明“适当的mongos进程数量将取决于应用程序和部署的性质”,我开始怀疑我们的用法mongos
实际上是否合适,或者让我们拥有几个专用mongos
节点是否更好?我们的应用服务器无需mongos
本地运行即可连接到它们。
您对决定mongos
与应用程序服务器实例数量或MongoDB集群大小相关的多少个实例合适的最佳方法有何看法?
最近,我们开始研究无状态Web服务的集群管理,我的意思是指诸如Docker,Apache Mesos和Kubernetes之类的工具。如果我们使用的是Docker,那么通常不建议在容器内运行多个进程。考虑到这一事实,要确保应用程序服务器容器和mongos
容器始终位于同一物理节点上并具有相同数量的进程,将变得非常困难。这使我想知道这种最佳实践是否仍然适用于我刚刚描述的集群体系结构。如果没有,您能否建议mongos
在这种体系结构中定位和部署流程的更好方法是什么?