【问题标题】:How to properly load-balance with Node.js / Mongoose / MongoDB + ConnectSet?如何正确使用 Node.js / Mongoose / MongoDB + ConnectSet 进行负载平衡?
【发布时间】:2012-09-08 07:10:21
【问题描述】:

我正在使用 Node.js+Express+Mongoose 连接到我的 MongoDB 副本集(3 个实例)。 我的印象是,当我使用 Mongoose 的“connectSet”命令,从而连接到副本集时,我的查询将在我的副本集之间进行负载平衡。

但是,使用nodetime,我可以看到所有查询(包括 find() 查询)都将转到副本集中的 PRIMARY 实例。

我在这里误解了什么吗?我是否缺少一些练习,或者副本集中的设置?我认为副本集的目的是平衡只读查询与集合中的 SECONDARY MongoDB 服务器...

谢谢。

【问题讨论】:

  • 我没有给你答案,但我赞成你只是因为你处于最前沿:)

标签: node.js mongodb mongoose


【解决方案1】:

我的印象是,当我使用 Mongoose 的“connectSet”命令,从而连接到副本集时,我的查询将在我的副本集之间进行负载平衡。

此印象不正确。

默认情况下,MongoDB 读取和写入发送到副本集的主成员。副本集的主要目的是提供高可用性 (HA)。当主节点出现故障时,驱动程序将在现有连接上抛出异常,然后自动重新连接到任何被选为新主节点的节点。

这里的想法是驱动程序将在没有干预和配置更改的情况下找到新的主节点。

是否有一些我遗漏的练习,或者副本集中的设置?

如果您真的想要将查询发送到辅助服务器,您可以在查询上配置一个标记,说明“此查询可以发送到辅助服务器”。实现会有所不同,here's a version 用于 Mongoose。

请注意,向辅助节点发送查询不是默认行为,这里有很多陷阱。 MongoDB 的大多数实现都受到单写锁的限制,因此不需要对读取进行负载平衡。分散读取并不能保证提高性能,并且很容易导致脏读。

在进行这样的负载平衡之前,请确保您绝对需要它。分片可能是更好的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 2012-11-28
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2019-10-20
    • 2012-06-04
    相关资源
    最近更新 更多