2013-07-11 32 views
0

tldr:爲了在MongoDB replicaset配置中使用彈性IP,我需要做些什麼?如何在EC2中使用彈性IP配置mongodb複製集?

我們有一個在EC2上運行的三節點MongoDB複製集。其中一個實例昨天被AWS退役,因此我們被迫停止並重新啓動EC2實例。

不幸的是,當我們第一次配置replicaset時,我們對AWS來說是相當新的,並且不知道這些實例的公有DNS地址可能會發生變化。我們在複製數據庫配置中使用每個實例的公有DNS,並在我們的代碼中使用所有應用程序連接字符串。在昨天閱讀了該主題後,我嘗試通過爲實例分配彈性IP並將複製集配置更改爲使用該IP來使節點重新聯機。在經歷了一些痛苦後,我能夠獲得其他兩個節點的備份並以該配置運行,但具有彈性IP的實例拒絕重新加入複製套件,並且mongod.log中的錯誤爲:

[rsStart] replSet info self not present in the repl set configuration 

還沒有更多閱讀,我發現我不應該在配置中使用實際的彈性IP,而是彈性IP的公有DNS名稱。我的問題是,在我再次將所有內容全部脫機以嘗試此更改之前,爲了在複製組配置中使用彈性IP,我需要做些什麼?我在這個10Gen頁面上發現了一些信息:http://docs.mongodb.org/ecosystem/platforms/amazon-ec2/#communication-across-regions,這讓我想我可能需要混淆實例和/或主機文件的主機名,但是我一直無法找到任何描述我的確切場景的人。

有什麼想法?

回答

2

原來是一個非常簡單的修復;一旦我將複製數據庫配置更改爲使用彈性IP的公有DNS,mongo節點就會恢復在線狀態。我不必觸摸主機名或主機文件。

+0

這也解決了內部專用IP,因此您不需要爲外部流量收費。 – Zambonilli

0

您不應該爲複製等內部流量使用彈性IP。對於此流量,您將被收取$ 0.01/GB,而使用內部IP則是免費的。

如果您使用的是類似副本集的東西,那麼您確實應該在VPC中運行。與正常的EC2實例不同,即使停止,VPC中的實例仍保留相同的私有IP地址和彈性IP地址。

+2

您可以連接公共DNS,在該區域內,它將解析爲內部IP。 – datasage

+0

@datasage是的,但正如OP指出的那樣,如果停止實例,公共DNS可能會更改。 VPC通過確保可用於設置複製等內容的靜態內部IP以及自動重新附加EIP來解決此問題。 – ceejayoz

+0

@ceejayoz什麼datasage在談論的是彈性IP的公共DNS - 它給你最好的兩個:它是靜態的,但它解析爲同一地區內的內部IP。我同意VPC會緩解這個問題,但是當我們啓動時,它不是一種選擇,而移動到VPC本身就是一個項目。 – jamshehan