簡體   English   中英

Mongodb集群並在主數據庫關閉時從輔助數據庫讀取

[英]Mongodb cluster and reading from secondary when primary is down

這不是僅詢問mongo cluster的基本問題。 我認為這不是重復的,我有一個mongodb 3節點集群,並且我的URL是PlayFramework conf文件中以下幾行的內容

mongodb.uri = "mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj"

默認情況下,配置副本時,所有讀取和寫入操作僅在Primary上發生,這就是我想要的。 但是,我希望在沒有剩余主節點的情況下將讀取數據轉到輔助節點,也就是說,當2個節點出現故障時,將沒有主節點,只有一個輔助節點。

我不想修改我的代碼以實現每個讀取查詢的目的。 我在輔助節點上嘗試了以下操作,但無濟於事

db.getMongo().setReadPref('primaryPreferred')

我到底需要做些什么才能使這項工作呢?

我不想修改我的代碼以實現每個讀取查詢的目的。 我在輔助節點上嘗試了以下操作,但無濟於事:

db.getMongo().setReadPref('primaryPreferred')

您具有正確的讀取首選項,但是需要在連接字符串或驅動程序中進行設置。 mongo shell中設置讀取首選項僅會影響當前的shell會話,而對遠程連接沒有影響。

mongodb.uri =“ mongodb:// mongodb1:27017,mongodb2:27017,mongodb3:27017 / myproj”

您需要按照MongoDB的連接字符串URI格式添加一些其他參數:

  • (必需) replicaSet=...選項指示驅動程序應使用“副本集”連接模式,而不是默認的直接連接模式。 此參數啟用副本集監視,讀取首選項和發現拓撲更改。 提供的副本集名稱必須與為您的部署配置的副本集名稱匹配。 有關官方支持的MongoDB驅動程序預期的連接行為的完整詳細信息,請參閱服務器發現和監視(SDAM)規范。 規范的基本原理部分包括有關所選方法的常見問題的答案。
  • (必需) readPreference=primaryPreferred選項指示從主數據庫讀取但在沒有可用的主數據庫時使用輔助數據庫的首選項。
  • (可選)在MongoDB 3.4+中,您可以指定maxStalenessSeconds=...選項,該選項在使用輔助讀取首選項時限制最大復制延遲(或過時)。 默認情況下,沒有最大陳舊性,因此驅動程序在基於讀取首選項選擇輔助節點時將不會考慮復制滯后。 如果您打算將primaryPreferred用作讀取的故障轉移選項,則應謹慎設置max staleness:您需要確保至少有一個具有可接受的過時性的輔助服務器。

因此,假設的副本集名稱mongocluster和數據庫myproj建議的連接字符串是:

mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/mypr‌oj?replicaSet=‌mongocluster&readPreference=primaryPreferred

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM