我试图弄清楚mongos服务器的不同实例如何一起工作。
如果我有1个configserver和一些分片(例如4个),那么每个分片都仅由一个节点(当然是主节点)组成,并且有4个mongos服务器... mongos服务器在它们之间进行通信吗?一个mongos是否有可能将其负载重定向到另一mongos?
最佳答案
当您有多个mongos实例时,它们不会自动在彼此之间进行负载平衡。他们甚至不知道彼此的存在。
用于大多数编程语言的MongoDB驱动程序允许在创建连接时指定多个mongos实例。在那种情况下,驱动程序通常将对所有这些命令执行ping操作,并以最低的延迟连接到该驱动程序。这通常是地理位置最接近的地方。当所有网络距离相同时,当前最不繁忙的网络通常会首先响应。然后,驱动程序将保持与该mongo的连接,除非程序明确地重新连接或不再能够访问mongo(在这种情况下,驱动程序通常会自动从初始列表中选择另一个mongo)。
这意味着,当您有大量的低负载客户端而不是一个高负载客户端时,使用多个mongos实例通常仅是一种有效的扩展方法。如果您希望一个高负载客户端使用许多mongos实例,则需要自己创建一个与每个mongos实例的单独连接,并实现自己的机制以在其中分配查询。
关于mongodb - mongos实例如何在群集中一起工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21081039/