use*_*270 7 database mongodb nosql
我试图弄清楚mongos服务器的不同实例是如何协同工作的.
如果我有1个配置服务器和一些分片,例如4个,每个分片只由一个节点组成(当然是主服务器),并且有4个mongos服务器...... mongos服务器是否在它们之间进行通信?是否有可能一个mongos将其负载重定向到另一个mongos?
当您有多个 mongos 实例时,它们不会自动在彼此之间进行负载平衡。他们甚至不知道彼此的存在。
大多数编程语言的 MongoDB 驱动程序允许在创建连接时指定多个 mongos 实例。在这种情况下,驱动程序通常会 ping 所有这些并连接到具有最低延迟的那个。这通常是地理上最接近的一个。当所有网络距离相同时,当前最不忙的通常会先响应。然后驱动程序将保持与那个 mongos 的连接,除非程序明确重新连接或无法再访问 mongos(在这种情况下,驱动程序通常会自动从初始列表中选择另一个)。
这意味着当您拥有大量低负载客户端而不是一个高负载客户端时,使用多个 mongos 实例通常只是一种有效的扩展方法。当您希望您的一个高负载客户端使用多个 mongos 实例时,您需要通过创建到每个 mongos 实例的单独连接并实现您自己的机制来在它们之间分配查询来自己实现这一点。
从 MongoDB 2.4 开始,mongos服务器仅提供路由服务来将读/写查询定向到适当的分片。该mongos服务器通过配置服务器发现你的分片群集的配置。您可以在 MongoDB 文档中找到更多详细信息:分片集群查询路由。
我试图弄清楚 mongos 服务器的不同实例是如何一起工作的。
该mongos服务器目前不直接相互交谈。他们确实通过您的配置服务器协调一些活动:
mongos都可以开始平衡回合,但一次只能激活一个回合)如果我有 1 个配置服务器
您应该始终在生产中使用 3 个配置服务器。如果您以某种方式丢失或损坏了您的配置服务器,您将不得不合并您的数据并重新分片您的数据库。保存在配置服务器上的分片集群元数据是每个分片上应该存在哪些分片数据范围的最终来源。
一些分片,例如四个分片,每个分片仅由一个节点组成(当然是主节点)
理想情况下,如果您想要最佳正常运行时间,每个分片都应该由副本集支持。副本集提供自动故障转移,对于管理目的(例如,进行备份或离线添加索引)非常有用。
一个 mongos 是否有可能将其负载重定向到另一个 mongos?
不,mongos不执行任何负载平衡。典型的建议是为mongos每个应用服务器部署一个。
从应用程序/驱动程序的角度来看,您可以mongos在连接字符串中指定多个用于故障转移。应用程序驱动程序通常会连接到最近的可用mongos(通过网络 ping 时间),并在当前mongos连接失败的情况下尝试重新连接。