如何在EC2中使用弹性IP配置mongodb副本集?

时间:2013-07-11 18:59:43

标签: mongodb amazon-ec2

tldr:在我的MongoDB replicaset配置中使用弹性IP需要做什么?

我们在EC2上运行了一个三节点MongoDB复制集。该集合中的一个实例昨天被AWS淘汰,因此我们被迫停止并重新启动EC2实例。

不幸的是,当我们第一次配置replicaset时,我们对AWS很新,并且不知道实例的公共DNS地址可能会发生变化。我们在replicaset配置中以及代码中的所有应用程序连接字符串中使用了每个实例的公共DNS。在昨天阅读了这个主题后,我尝试通过为实例分配弹性IP并更改replicaset配置以使用该IP来使节点重新联机。经过一些痛苦之后,我能够让其他两个节点重新启动并运行该配置,但是具有弹性IP的实例拒绝重新加入replicaset,mongod.log中的错误说:

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

more 读取之后,我发现我不应该在配置中使用实际的弹性IP,而是使用弹性IP的公有DNS名称。我的问题是,在我再次使所有内容脱机以尝试此更改之前,我需要做什么才能在replicaset配置中使用弹性IP ?我在10Gen页面上找到了一些信息:http://docs.mongodb.org/ecosystem/platforms/amazon-ec2/#communication-across-regions让我觉得我可能需要弄乱实例的主机名和/或hosts文件,但我找不到任何描述我的确切场景的人

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

原来这是一个非常简单的修复;一旦我更改了replicaset配置以使用弹性IP的公共DNS,mongo节点就会重新联机。我没有触及主机名或主机文件。

答案 1 :(得分:0)

永远不要将弹性IP用于复制等内部流量。对于此流量,您将收取0.01美元/ GB的费用,而使用内部IP则是免费的。

如果您使用的是副本集,那么您真的应该在VPC中运行。与普通的EC2实例不同,即使停止,VPC中的实例也会保留相同的私有IP地址和弹性IP地址。