2012-11-13 38 views
6

我有一個初級和使用ELB AWS 2個次級。閱讀和寫作的最佳做​​法是什麼?MongoDB的複製組和ELB

1)我創建一個單一的LB與初級次級在ELB的所有節點,並讓蟒蛇(pymongo)處理整理讀寫呢?

2)或做一個地方ELB下的所有二級和分配主要以彈性IP?這將需要腳本跟蹤節點類型並在故障切換時重新分配。

我希望選項1

感謝

+1

爲什麼你會使用負載均衡器 - 通常你給客戶端的所有成員的列表,它會發現每個成員的狀態是什麼,並直接請求相應 –

+0

嗨弗雷德裏克,謝謝,你的上面簡潔的評論真的爲我發光 - 請你能快速檢查我的答案,以確保它是正確的。 – danday74

+0

@FrederickCheung約,你必須蒙戈實例在專用網絡中,並需要公開蒙戈未做情況下從Internet訪問的情況下怎麼辦? – Jonathan

回答

5

這要看您的具體情況。隨着MongoDB的驅動程序,您不必跟蹤哪個節點客戶端連接到 - 你只需要它通知設定的副本,它會自動連接到主和處理故障轉移。

如果你要分發讀取負載,那麼你可以設置閱讀偏好,讓應用程序從二級閱讀,但你將只能夠寫入到主。這意味着,設置爲ELB所有傳入連接是不必要的,甚至可能會傷害你,因爲它可能會導致寫入發送到二級(他們會失敗)。使用讀取首選項將允許您分發讀取,所以在您的情況下,我會建議不要使用ELB。

在一般情況下,我會看看http://www.slideshare.net/jrosoff/mongodb-on-ec2-and-ebs。您可能會發現它很有幫助。

+1

所以...如果我有一個代表組三個節點....我與蒙戈連接...什麼IP地址,我給?假設任何人都可能倒下。我是否應該在當前小學附加一個elastip知識產權,並且始終監督主要誰? – Tampa

1

我在同一條船上,但我運行在一個單一的replicaset 3種蒙戈情況下,2默認和1個仲裁者。設置ElasticIP是一個糟糕的主意b/c,這意味着你的mongo服務器將有一個公共連接,這是你不想要的。

我結束了創建該偵聽27017和轉發給replicaset兩個默認成員的ELB,而不是實際的負載平衡,而容錯。因此,如果27017運行狀況檢查失敗,備用數據庫可以處理後續請求。加上ELB,你可以創建一個DNS CNAME記錄並指向你的應用程序來使用它,在我的情況下,我使用'docstore'。這樣,您就不需要指定像docstore-1和docstore-2的實際蒙戈實例等

+0

請說明一下,我有一個私人子網中的3個mongo實例,並且需要使它們可用,並且希望通過一個ip/elb cname來完成它,這可能嗎? – Jonathan

0

我想答案是,你不使用負載平衡器。您的客戶端提供所有副本集成員(主要和次要)的詳細信息,並連接到當前的主要成員,無論哪個成員。

How do you connect to a replicaset from a MongoDB shell?

mongo --host replicaSetName/host1[:porthost1],host2[:porthost1],host3[:porthost3] databaseToConnect 

在這裏,我們使用命令行客戶端連接到副本集(而不是單個節點),但它可能是的NodeJS,MongoChef(支持副本集)或任何客戶端你正在連接。