2014-02-21 43 views
0

假設我有一個主副本P和三個副主副本S1,S2S3的副本集。假設一個應用程序用這個constructor創建一個Mongo clent。 種子列表是{P,S1,S2}。請注意,該列表不包含S3帶種子的MongoClient構造函數

假設應用程序使用secondPreferred並且S1S2均已關閉。請問PS3

javadoc說It will find all members (the master will be used by default),我猜查詢會去S3。這是對的嗎 ?

回答

2

種子列表正好是,驅動程序將查詢該列表以瞭解副本集的地圖。這意味着它實際上可以使用不在該列表上的成員,即它可以使用S3

當驅動程序必須檢測副本集中的更改時,無論是通過故障轉移還是通過啓動它都將查詢種子列表中的一個成員,基本上是rs.status(),並且它會將結果本身存儲一段時間司機認爲值得刷新它,或者發生某種事情迫使司機刷新它(即故障轉移)。

所以答案是肯定的,它會爲S3

+0

謝謝。順便說一句,看起來{P}和{P,S1,S2,S3}種子沒有區別。這是對的嗎 ? – Michael

+1

@Michael一般**最好**的做法是在連接中有足夠的**種子**,以便節點關閉時,有些東西可以告訴你哪些節點是** up **。在你提到的具體情況下,即使* unseeded,請求也會轉到'S3',因爲'P'已經啓動,並且知道'S3'是一個成員。但是,這仍然不是**保證**只是由'secondaryPreferred'單獨。剩下的取決於你的配置。所以請求**可以**優先選擇「P」。這完全取決於你如何設置。 –

+0

@NeilLunn感謝您的解釋。你能舉個例子嗎?如果's3''啓動時,帶'secondPreferred'和無標籤的查詢將會轉到'P'? – Michael