EC2上的RabbitMQ群集:主机名问题

时间:2013-02-06 04:14:23

标签: dns amazon-web-services amazon-ec2 rabbitmq

我想在EC2(amazon linux)上设置一个3节点Rabbit集群。我们希望实施恢复,因此如果我们丢失了服务器,它可以自动替换为另一台新服务器。我们可以使用默认主机名(ip-xx-xx-xx-xx)轻松手动设置群集,以便代理ID为rabbit @ ip-xx-xx-xx-xx。这是因为主机名可通过网络解析。

问题是:如果我们丢失/重启服务器,该主机名将会更改,从而使群集无效。我们在设置自定义static hostname方面没有运气,因为它们无法被群集中的其他计算机解析;这是该文章中唯一有意义的部分。

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

3 个答案:

答案 0 :(得分:1)

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

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

当然,如果你有少量的客户端,你可以在每个盒子的/ etc / hosts文件中添加条目,并根据需要进行更新。

答案 1 :(得分:0)

@Chrskly给出了很好的答案,这是Rabbit社区的普遍共识:

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

我在做什么:

由于DNS前端的一些限制,我选择使用引导脚本使用启动时分配的默认内部dns 来使用任何其他可用计算机初始化计算机和群集。如果我们丢失一台机器,将会出现一台新机器,准备兔子并查找要与其集群的机器的DNS名称。然后它将从集群中删除死节点以进行内务管理。

我在Python中使用了一些自制的init脚本。但是,这很容易用像Chef / Puppet这样的东西来完成。

更新:文档详细信息

  

自:

     

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

     

主机名

的问题      

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

     

sudo -s#成为root

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

     

echo“127.0.0.1 rabbit”>>的/ etc /主机

     

hostname -F / etc / hostname

答案 2 :(得分:0)

自:

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

主机名问题

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

sudo -s#成为root

回声"兔子" >的/ etc /主机名

回声" 127.0.0.1兔子" >>的/ etc /主机

hostname -F / etc / hostname