2013-08-27 98 views
1

我想知道在MongoDB中,客戶端和查詢路由器之間的負載平衡和故障轉移是如何工作的。到目前爲止我還沒有找到任何匹配的文檔。大家都說這不相關,我不這麼認爲。每一件軟件/硬件都可能會死亡,並且總會有一個原因讓你無法立即重新啓動它。查詢路由器的MongoDB負載平衡和故障轉移

情況很簡單。假設通常使用分片複製集的設置,客戶端連接到查詢路由器並執行操作。如果查詢路由器死亡會發生什麼?是否有自動故障轉移到第二個查詢路由器的方法?還是爲了2個查詢路由器之間的負載平衡

感謝您的幫助, 德克

回答

0

大家說,這是不相關的,我不這麼認爲。

而你的權利如此。 mongos實例的故障轉移非常重要,如果沒有適當的體系結構來處理此問題,您的應用程序可能會出現嚴重故障。它也打破了MongoDB的高可用性。

如果查詢路由器死亡會發生什麼?

這是你應該在種子名單中投入在連接字符串中的驅動程序,在這種情況下,司機會做一些沿着它與副本做的線,並嘗試連接到其他成員在名單上恢復正常。

是否有自動故障切換到第二個查詢路由器的預期方式?

假設您爲應用程序配置提供了更多的mongos實例IP,它應該是非常自動化的。

還是爲了2臺查詢路由器之間的負載均衡?

你可以走這條路線,以及如果你想有一個只供應一個單一的IP,但你必須要擔心負載均衡,等等,等等...

+0

好的,所以當初始化客戶端初始化時間時,提供mongos IP列表是否符合我的要求? 到目前爲止,我讀過的所有內容都是 - 對於Java客戶端 - 通過這種方式,我可以連接到具有自動檢測主副本的副本集(非分片)。 – user2722141

+0

FWIW您可以使用具有多個A記錄的DNS來在沒有SPOF的情況下實現負載均衡 – Mason

+0

哦,我剛剛注意到我讀了過時的文檔。謝謝Google! ;-)因此,在最近的版本中它也會檢測查詢路由器。 DNS也可能是一個選項。感謝大家! – user2722141

1

有一些驅動程序(我確定在JAVA和Python中)支持自動故障轉移和重新連接,如果你爲它們提供適當的mongos進程列表。在JAVA驅動程序中還內置了一些roundrobin均衡功能,但這些功能在所有驅動程序中都不存在。例如C++驅動程序也沒有。檢查您計劃使用的給定驅動程序的功能。

如果數據庫上方有一個平衡的應用程序層,則可以在每個應用程序服務器上放置一個mongos,並將其用於專用。在這種情況下,單個mongos的失敗只會影響該應用程序服務器,當然,當mongos無法正常工作時,這將失效。該體系結構一次解決了平衡和HA問題。 Oherway您可以使用HAProxy在mongos進程前面進行負載平衡,但是沒有內置在mongos中的HA功能處理它們自己,所以如果一出去就會影響所有使用此體系結構的API服務器。