RabbitMQ自动configuration集群

RabbitMQ集群文档

https://www.rabbitmq.com/clustering.html

描述了一个过程,通过这个过程,您可以为集群部署一个configuration文件,以便在您的rabbitmq节点boot.eg中自动创build一个集群

[{rabbit, [{cluster_nodes, {['rabbit@rabbit1', 'rabbit@rabbit2', 'rabbit@rabbit3'], ram}}]}]. 

您将这个文件应用于/etc/rabbitmq/rabbitmq.config中的每个节点上,然后在每个节点上启动rabbitmq,并显然会形成一个集群。

这似乎不太好,例如

如果你启动rabbit2,并且rabbit3尚未启动,那么这个服务将不会在rabbit2上启动,因为它正在尝试使用rabbit3创build一个群集。

同样的,如果你只在兔子1上应用configuration,并且已经预先启动了兔子2和兔子3,兔子1将只与兔子2形成一个簇,根据文档(我不明白为什么):

 RabbitMQ will try to cluster to each node provided, and stop after it can cluster with one of them. 

这似乎工作的唯一方法是如果您应用所有3个节点上的configuration文件,并让他们在同一时间启动。 我正在试图用Ansible来部署这个,它依次创build节点,所以这是行不通的。

我在这里错过了什么?

我也使用Puppet部署RabbitMQ集群,而且实际上并不需要在同一时间启动所有节点。

我通常做的,迄今为止为我工作的是:

  • 安装RabbitMQ(RPM或DEB)
  • 在每个节点上设置主机文件,为所有三个节点添加条目。 例:

 192.168.1.11 dev-c1n01-rabbitmq.example.com dev-c1n01-rabbitmq 192.168.1.12 dev-c1n02-rabbitmq.example.com dev-c1n02-rabbitmq 192.168.1.13 dev-c1n03-rabbitmq.example.com dev-c1n03-rabbitmq 

我们正在群集在一起的节点(因为我不想依靠DNS可用)*部署rabbitmq.config

 [ {rabbit, [ {cluster_nodes, {['rabbit@dev-c1n01-rabbitmq', 'rabbit@dev-c1n02-rabbitmq', 'rabbit@dev-c1n03-rabbitmq'], disc}}, {cluster_partition_handling, pause_minority}, {disk_free_limit, 2147483648}, {heartbeat, 0}, {tcp_listen_options, [binary, {backlog, 1024}, {nodelay, true}, {keepalive, true} ]}, {vm_memory_high_watermark, 0.6}, {default_user, <<"admin">>}, {default_pass, <<"somedefaultpass">>} ]}, {kernel, [ ]} , {rabbitmq_management, [ {listener, [ {port, 15672} ]} ]} ]. % EOF 
  • 部署erlang.cookie

要创builderlang cookie,我通常使用http://passwordsgenerator.net/并将其设置为仅创build大写字符的20个string&#x3002; 然后,把这个string放到/var/lib/rabbitmq/.erlang.cookie中,像这样:

 echo -n 'LCQLSHVOPZFHRUXMMAPF' > /var/lib/rabbitmq/.erlang.cookie 
  • 启动节点(顺序无关紧要,只要它们具有相同的erlang.cookie和rabbitmq.config)

这应该适合你。 testing3.2,3.3和3.5版本。

我在这方面取得了一些进展。

这个问题似乎与在rabbitmq.config文件中使用RAM节点而不是磁盘节点有关。 从文档:

RAM节点是高级用例; 设置你的第一个群集时,你应该不使用它们。 您应该有足够的光盘节点来处理您的冗余要求,然后在需要时添加额外的RAM节点进行缩放。

只包含RAM节点的集群是脆弱的; 如果群集停止,您将无法再次启动,并将丢失所有数据。 RabbitMQ将阻止在许多情况下创buildRAM节点的群集,但不能完全阻止它。

当我改变configuration文件使用“光盘”而不是“ram”时,群集创build更加稳定。

 [{rabbit, [{cluster_nodes, {['rabbit@rabbit1', 'rabbit@rabbit2', 'rabbit@rabbit3'],disc}}]}].