【问题标题】:MongoDB load balancing and failover of query routersMongoDB 负载均衡和查询路由器的故障转移
【发布时间】:2013-08-30 10:25:33
【问题描述】:

我想知道客户端和查询路由器之间的负载平衡和故障转移如何在 MongoDB 中工作。到目前为止,我还没有找到任何匹配的文档。每个人都说这无关紧要,我不这么认为。每一个软件/硬件都可能死掉,而且你总是有理由不能立即再次启动它。

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

感谢您的帮助, 德克

【问题讨论】:

    标签: mongodb load-balancing failover


    【解决方案1】:

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

    如果您在数据库之上有一个平衡的应用程序层,您可以在每个应用程序服务器上放置一个 mongos,并专门使用它。在这种情况下,单个 mongos 的故障只会影响该应用程序服务器,当然这会在 mongos 无法运行时出现。这种架构同时解决了平衡和 HA 问题。

    您可以使用其他方式,例如 HAProxy 在 mongos 进程前进行负载平衡,但 mongos 进程本身没有内置 HA 功能,因此如果退出,它将影响您使用此架构的所有 API 服务器。

    【讨论】:

      【解决方案2】:

      每个人都说这无关紧要,我不这么认为。

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

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

      这是您真正应该将种子列表放入驱动程序中的连接字符串的地方,在这种情况下,驱动程序将按照它对副本所做的事情做一些事情,并尝试连接到列表中的其他成员恢复正常。

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

      如果您为应用程序配置提供更多 mongos 实例 IP,这应该是相当自动化的。

      或者用于 2 个查询路由器之间的负载平衡?

      如果你只想提供一个 IP,你也可以走这条路,但是你必须担心那个负载平衡器,等等……

      【讨论】:

      • 好的,所以在初始化客户端初始化时间时提供 mongos IP 列表是否符合我的要求?到目前为止,我所读到的只是——在 Java 客户端的情况下——通过这种方式,我可以连接到副本集(非分片),并自动检测主节点和辅助节点。
      • FWIW 您可以使用带有多个 A 记录的 DNS 来实现负载平衡,而无需 SPOF
      • 哦,我刚刚注意到我阅读了过时的文档。谢谢你,谷歌! ;-) 因此,在最新版本中,它也会检测查询路由器。 DNS 也可能是这里的一个选项。谢谢大家!
      猜你喜欢
      • 2016-09-20
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2013-11-15
      相关资源
      最近更新 更多