2012-11-15 101 views
1

我想了解MongoDB中副本集的概念。mongoDB複製集

以2個mongoDB實例A(primary)和B(secondary)爲例。

如果我的客戶正在愉快地查詢A我明白寫入被複制到B但是如果服務器A變得不可訪問會發生什麼?

雖然就mongo複製而言,我可以看到B被選爲新的主節點,客戶如何知道現在將其查詢傳送給B而不是A?這一切都是在內部完成mongo?

我問,因爲我的客戶的配置有一個uri指向A,但沒有爲B.是否正確?

回答

3

以2個mongoDB實例A(primary)和B(secondary)爲例。

您不應該使用兩個實例作爲副本集的一部分。你應該有一個arbiter或另一箇中學,以便選舉可以發生。

請參閱here獲取細節,here獲取複製基礎知識,here獲取關於選舉的信息。

如果我的客戶在快樂地查詢我的理解是寫入得到複製到B,但如果一個服務器變得不可訪問,會發生什麼?

服務應該failover與服務器B成爲主節點。但是,有兩個實例,服務器B將無法選擇自己爲主,因爲沒有多數。

雖然在蒙戈複製的方面,我可以看到,B獲得當選爲新的主,如何在客戶端知道現在渠道的查詢B和不成?這一切都是在內部完成mongo?

這爲駕駛員意識到副本集配置通常通過駕駛員執行。有關驅動程序文檔,請參閱here(取決於您使用的驅動程序)。

+0

感謝您的回覆。關於偶數個mongo實例的好處 - 我錯過了,但它在提供的gotchas鏈接中提到。我正在使用C#驅動程序http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial。我看到它提到了在連接字符串中指定多個服務器。如果所有的服務器都是同一個集合的一部分(並且你在連接字符串中指定了replicaSet的名字),這聽起來不是必要的 - 那麼爲什麼你會提供多個服務器呢? – obaylis

+0

我並不是C#驅動程序中的專家,但我強烈建議您按照相應的文檔。球隊裏的球員都很徹底。 –

+0

我會試試看。謝謝你的幫助。 – obaylis