MongoDB Sharded Cluster 中 router 该如何部署

今天和亚飞讨论了 MongoDB Sharded Cluster 中 router 的部署问题。

我觉得 router 作为整个集群的一部分,应该纳入集群规划,部署到固定的几台主机,供 APP 进行调用。

亚飞觉得 router 作为连接 config 和 shard 的纽带,其实可以随 APP 一起部署,这样 APP 只需要统一配置 127.0.0.1 就可以对 mongodb 进行调用。

通过对官方文档的研究,发现了官方文档中的两段话:

A mongos has no persistent state and consumes minimal system resources.

The most common practice is to run mongos instances on the same systems as your application servers, but you can maintain mongos instances on the shards or on other dedicated resources.

大概意思为,router 对主机性能影响很小,建议随应用部署,当然也可以根据自己的需求部署到其他地方。

好吧,既然官方都建议这么做了,何乐而不为呢。要说弊端,那就是当 shard 需要横向扩展的时候,每个 router 都需要手动添加配置。

所以最终的建议为:

如果 MongoDB Sharded Cluster 是使用 Ansible 之类支持幂等操作的工具来部署的,可以将 router 随 APP 一起部署,若到时候 shard 需要横向扩展,只需要再次部署即可。

如果 MongoDB Sharded Cluster 是手动部署,手动进行配置的,还是将 router 规划入集群管理比较好,这样即使结构发生什么变化,也是在可控的范围内进行修改。