2013-02-06 30 views
1

我想在EC2(亚马逊linux)上设置3节点的Rabbit群集。我们希望实施恢复,所以如果我们失去了一台服务器,它可以被另一台新的服务器自动取代。我们可以使用默认主机名(ip-xx-xx-xx-xx)轻松手动设置群集,以便代理ID为rabbit @ ip-xx-xx-xx-xx。这是因为主机名可以通过网络解析。EC2上的RabbitMQ群集:主机名问题

问题是:如果我们丢失/重新启动服务器,则此主机名将会更改,使集群无效。我们还没有运气设置自定义static hostname,因为它们不能被集群中的其他机器解决;那是那篇文章中唯一没有意义的部分。

有没有人在EC2上完成了一个RabbitMQ集群的恢复实施?任何建议表示赞赏。

回答

0

@Chrskly了很好的答案,那是兔子界的普遍共识:即

处理DNS或其他服务器的识别主要是我听到的
  • 初始化脚本。
  • 如果没有DNS或主机名别名的帮助,我们无法使用弹性IP,因为亚马逊上的内部IP/DNS仍在旋转,并且保持静态的公共IP/DNS名称不能用作兔子的主机名,除非正确别名。
  • 通过脚本托管文件操作也是一个选项。这需要伴随一个脚本,该脚本可以在启动时识别其他服务器的DNS,因此在使事情更具“固态”配置方面不会节省太多工作。

我在做什么:

由于对DNS前方一定的局限性,我选择使用引导脚本使用的默认内部DNS其他任何可用的机器分配给初始化机和集群在推出。如果我们丢失了一台机器,会出现一个新机器,准备兔子并查找要与之集群的机器的DNS名称。然后,它将从集群中删除该死的节点,以便管理。

我在Python中使用了一些自制init脚本。不过,这可以通过厨师/木偶等方式轻松完成。

更新:从细节文档

来源:

http://www.rabbitmq.com/ec2.html

与主机名

RabbitMQ的名称中使用的 系统当前的主机数据库目录问题。如果主机名更改,则会创建一个新的空数据库。 为避免数据丢失,建立固定且可解析的主机名至关重要。例如:

须藤-s#成为根

回声 “兔子”>的/ etc /主机名

回声 “127.0.0.1兔子” >>/etc/hosts中

主机名-F的/ etc /主机名

+0

不错,很高兴你有你想要的东西。 – chrskly

+0

在@Amit的答案中增加了一些细节:如何使用主机名编写解决方案。 – alph486

1

您可以在三个盒子的外部DNS服务中创建三个A记录,并在配置中使用它们。例如,rabbit1.alph486.com,rabbit2.alph486.com和rabbit3.alph486.com。这些甚至可能是ec2私有IP地址。如果所有的盒子都在同一个地区,它会更快,更便宜。如果您丢失了一个盒子,只需更新DNS记录即可。

此外,您可以分配一个弹性IP到三个框。然后,当你丢失一个盒子时,你需要做的就是将弹性IP分配给它的替换。

当然,如果您的客户端数量较少,则可以将条目添加到每个框上的/ etc/hosts文件中并根据需要进行更新。

+0

感谢您的回应!是的,我们尝试过使用主机来实现这一目的和思想的DNS。我想尽量避免在解决方案上使用任何新东西(DNS)。私有IP可能会工作,但默认的内部IP仍然可以改变主机在机器上的位置,所以它并没有真正帮助我们。主机文件的工作,但有点hacky,因为我们不得不查询亚马逊,并仍在本地发布时写入文件。 虽然很好的答案,证实了我的怀疑需要什么! – alph486

0

来自:

http://www.rabbitmq.com/ec2.html

与主机名的问题

RabbitMQ的名称使用该系统的当前主机名的数据库目录。如果主机名更改,则会创建一个新的空数据库。为了避免数据丢失,建立一个固定且可解析的主机名至关重要。例如:

须藤-s#成为根

回声 “兔子”>的/ etc /主机名

回声 “127.0.0.1兔子” >>/etc/hosts中

主机名-F/etc/hostname