MongoDB负载均衡和查询路由器的故障转移

时间:2013-08-27 15:14:49

标签: mongodb load-balancing failover

我想知道客户端和查询路由器之间的负载balacing和故障转移如何在MongoDB中工作。到目前为止,我还没有找到任何匹配的文档。每个人都说这不相关,我不这么认为。每一件软件/硬件都会死掉,而且总会有一个原因让你无法再次提起它。

情况很简单。假设通常使用分片复制集进行设置,客户端连接到查询路由器并执行操作。如果查询路由器死了会怎么样?是否有自动故障转移到第二个查询路由器的预期方法?或者用于2个查询路由器之间的负载平衡?

谢谢你的帮助, 德克

2 个答案:

答案 0 :(得分:1)

如果为它们提供适当的mongos进程列表,有一些驱动程序(我相信在JAVA和Python中)支持自动故障转移和重新连接。在JAVA驱动程序中还内置了一些roundrobin平衡,但这些功能并不存在于所有驱动程序中。例如C ++驱动程序也没有。检查您计划使用的给定驱动程序的功能。

如果数据库上方有一个平衡的应用程序层,则可以在每个应用程序服务器上放置一个mongos并专门用于它。在这种情况下,单个mongos的故障将仅影响该应用程序服务器,并且当mongos不起作用时,这将会消失。该架构可立即解决平衡问题和HA问题。

Oherway你可以使用例如HAProxy在mongos进程前进行负载均衡,但mongos进程中没有内置的HA功能,所以如果一个出去就会影响所有使用这种架构的API服务器。

答案 1 :(得分:0)

  

每个人都说这不相关,我不这么认为。

你的权利。 mongos实例的故障转移非常重要,如果没有适当的架构来处理这个问题,你的应用程序可能会出现严重故障。它还打破了MongoDB的高可用性。

  

如果查询路由器死了会怎么样?

这是您应该将种子列表放入驱动程序中的连接字符串的位置,在这种情况下,驱动程序将根据其对副本的操作执行某些操作,并尝试连接到列表中的其他成员恢复正常。

  

是否有自动故障转移到第二个查询路由器的预期方法?

如果您为应用程序配置提供更多mongos实例IP,则应该非常自动化。

  

或者两个查询路由器之间的负载均衡?

如果您想要只提供一个IP,那么您也可以使用该路由,但是您必须担心该负载均衡器,依此类推......等等...