2017-06-15 57 views
1

我有3個在AWS,1個主節點和2個輔助節點上運行的mongo實例。我們希望所有讀查詢去輔助節點,因此創建貓鼬連接,當我們使用這些配置選項:readPreference secondaryPreferred不僅從Secondary節點讀取

options = { 
    db: { 
     readPreference: 'secondaryPreferred', 
     native_parser: true 
    }, 
    replset: { 
     strategy: 'ping', 
     auto_reconnect: false, 
    } 
}; 
mongoose.connect(databaseUrl, options); 

問題:通過這些設置,讀取查詢到兩個主要節點,而2個輔助節點正在運行。

當我們使用readPreference: 'secondary'時,它的工作方式與我們預期的一樣:所有讀取查詢都只發送給輔助節點。

請幫我解釋這是因爲與蒙戈文檔提到:

secondaryPreferred:在大多數情況下,操作從二級會員閱讀,但如果沒有次要部件可用,操作從主讀取。

順便說一句,我看到一些相同的問題,但他們都還沒有一個明確的解決方案。 :(

我們使用:

  • 貓鼬:v4.9.5
  • 蒙戈服務器:V3.2
  • 節點:v5.12.0
+1

除非您真正瞭解這意味着什麼和所有含義,否則您應該只是從「主要」中讀取。如果你必須提出這個問題,那麼你應該堅持閱讀小學。似乎是偏好設置按設計工作。 –

+0

我需要配置從'secondary'讀取,因爲'write'操作符的'primary'當前滿載。如果這些設置按照設計工作,那麼爲什麼它會從'primary'和'secondary'中讀取。 – HuyTran

+0

這並不足以單獨做到這一點。如果你的主要負載很重,那麼「分片」是你應該看的第一個地方。次要讀數「按設計」意味着數據不能保證是最新的。只有當你接受,作爲一個給定的事實,你的應用程序可以忍受,這真的是一個有效的選擇。次要讀取不用於擴展,就像複製不會替代備份一樣。 –

回答

0

對於誰具有同樣的問題的人, 我確認這個行爲起源於節點驅動程序,Python驅動程序和Java驅動程序似乎沒有展示過。 Mongo開發人員修復了該錯誤並等待合併掌握。您可以查看此票:https://jira.mongodb.org/browse/NODE-1049