1

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

问题是:如果我们丢失/重新启动服务器,此主机名将更改,从而使集群无效。我们没有运气设置自定义静态主机名,因为集群中的其他机器无法解析它们;那是那篇文章中唯一没有意义的部分。

有没有人通过恢复实现在 EC2 上完成 RabbitMQ 集群?任何建议表示赞赏。

4

3 回答 3

1

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

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

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

于 2013-02-06T23:17:47.280 回答
0

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

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

我在做什么:

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

我在 Python 中使用了一些自制的初始化脚本。但是,这可以通过 Chef/Puppet 之类的工具轻松完成。

更新:来自文档的详细信息

从:

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

主机名问题

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

sudo -s #成为root

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

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

主机名 -F /etc/主机名

于 2013-02-08T16:02:56.947 回答
0

从:

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

主机名问题

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

sudo -s #成为root

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

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

主机名 -F /etc/主机名

于 2015-01-28T09:12:18.553 回答