2013-07-11 33 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