2012-09-07 26 views
2

我使用Node.js + Express + Mongoose連接到我的MongoDB副本集(3個實例)。 我的印象是,當我使用Mongoose的「connectSet」命令,從而連接到副本集時,我的查詢將在我的副本集之間進行負載平衡。如何正確地使用Node.js/Mongoose/MongoDB + ConnectSet進行負載平衡?

但是,使用nodetime,我可以看到所有查詢(包括find()查詢)將轉到副本集中的PRIMARY實例。

我誤解了一些東西嗎?是否有一些我缺少的練習,或副本集中的設置?我認爲副本集的目的是平衡只讀查詢與集中的SECONDARY MongoDB服務器...

謝謝。

+0

我沒有你的答案,但我只是因爲你在流血的邊緣而贊成你:) – jcollum

回答

4

我的印象是,當我使用Mongoose的「connectSet」命令,從而連接到副本集時,我的查詢將在我的副本集之間進行負載平衡。

此印象不正確。

默認情況下,MongoDB讀取&寫入被髮送到副本集的主要成員。副本集的主要目的是提供高可用性(HA)。當主節點關閉時,驅動程序將在現有連接上拋出異常,然後自動重新連接到選擇新主節點的節點。

這裏的想法是,驅動程序將在沒有干預和配置更改的情況下找到新的主節點。

是否有一些練習我缺少或副本集中的設置?

如果你真的要發送到查詢的輔助,你可以是各國查詢配置標誌「此查詢可以被髮送到一個次要的」。對於Mongoose,實施此操作將有所不同,here's a version

請注意,發送查詢到輔助節點不是默認行爲,這裏有很多缺陷。 MongoDB的大部分實現都受到單個寫入鎖的限制,因此不需要對讀取進行負載均衡。不能保證傳播讀取能夠提高性能,並且很容易導致髒讀。

在進行這樣的負載平衡之前,請確保您絕對需要它。分片可能是更好的選擇。