RabbitMQ 集群文档
https://www.rabbitmq.com/clustering.html
描述了一个过程,您可以通过该过程为集群部署配置文件,以便在您的 rabbitmq 节点 boot.eg 时自动创建集群
[{rabbit,
[{cluster_nodes, {['rabbit@rabbit1', 'rabbit@rabbit2', 'rabbit@rabbit3'], ram}}]}].
您在 /etc/rabbitmq/rabbitmq.config 的 3 个节点中的每一个上应用此文件,然后在每个节点上启动 rabbitmq,显然会形成一个集群。
这似乎不太好用,例如
如果你启动 rabbit2,而 rabbit3 还没有启动,服务将不会在 rabbit2 上启动,因为它正在尝试使用 rabbit3 创建一个集群。
同样,如果您只在rabbit1上应用配置,并预先启动rabbit2和rabbit3,则rabbit1将仅与rabbit2形成一个集群,根据文档(我不明白为什么):
RabbitMQ will try to cluster to each node provided, and stop after it can cluster with one of them.
这似乎可行的唯一方法是,如果您在所有 3 个节点上应用配置文件,并让它们在完全相同的时间启动。我正在尝试使用 Ansible 部署它,它按顺序创建节点,所以这不起作用。
我在这里想念什么?
我还使用 Puppet 部署 RabbitMQ 集群,实际上您不必同时启动所有节点。
我通常做的,到目前为止为我工作的是:
.
我们聚集在一起的节点(因为我不想依赖可用的 DNS)* 部署 rabbitmq.config
.
要创建 erlang cookie,我通常使用http://passwordsgenerator.net/并将其设置为创建 20 个仅与大写字符一致的字符串。然后,将此字符串放入 /var/lib/rabbitmq/.erlang.cookie,如下所示:
这应该适合你。在 3.2、3.3 和 3.5 版本上测试。
我在这方面取得了一些进展。
该问题似乎与在 rabbitmq.config 文件中使用ram节点而不是磁盘节点的选择有关。从文档中:
当我将配置文件更改为使用“disc”而不是“ram”时,集群创建更加稳定。