我计划在AWS VPC上使用Ansible在Amazon内部负载均衡器作为指向其连接的前端的情况下创建RabbitMQ集群。

任何建议如何基于自动缩放规则从RabbitMQ集群中删除死节点,其中节点可以上升或下降,或者如果您使用的是竞价型实例?

当节点发生故障时,RabbitMQ不会自动将其从复制列表中删除,我可以在管理UI中看到Node not running。 br />
我设法通过Ansible和userdata自动将一个扩展实例加入集群。



评论

@ Pierre.Vriens,我只更改了一个问题,谢谢。

谢谢!您没有破坏我希望的其他4个(或大约)问题。也许将它们保留为后续问题,以至于它们仍然有意义?

是的,这些问题仍然有意义,但这是最重要的。我稍后再发表另一个问题:)谢谢!

@柏林我画了一张图表,代表了我认为您正在描述的内容,如果您要表达的是其他意思,请告诉我,我会适应的。

嘿@ Pierre.Vriens-我不在乎我有几分钟的时间想澄清我的假设,从理论上讲,我可以将其添加到答案中,我很可能会做到这一点。

#1 楼

考虑使用Rabbitmq / rabbitmq-autocluster插件:


RabbitMQ插件,该插件使用多种对等发现机制自动将节点群集:




领事,
etcd2
DNS A记录
AWS EC2标签
AWS Autoscaling组



有一个要进行此设置,可以插入一些相当的配置以进行设置,包括设置IAM策略以及将EC2标签添加到要加入群集的实例中。

如果要使用AWS Autoscaling Groups,则可以将以下内容添加到您的rabbitmq.config中:

[
  {rabbit, [ ... ]},
  {autocluster, [
    {backend, aws},
    {aws_autoscaling, true},
    {aws_ec2_region, "us-west-2"}
  ]}
].


如果不使用AWS Autoscaling组,您仍然可以使用EC2实例上的标签来获得所需的结果:
综上所述,我强烈建议您使用HashiCorp的Consul作为服务发现机制,从长远来看,在解耦系统各部分方面,您将获得更大的灵活性。来自e其他。

评论


感谢您提供详细的说明和图表,因此AFAIK Rabbitmq / rabbitmq-autocluster插件将知道在节点关闭后也可以从复制列表中删除该节点,如果再问一件事,我想从2节点开始群集,建议您使用策略`rabbitmqctl set_policy ha-all“”'{“ ha-mode”:“ all”,“ ha-sync-mode”:“ automatic “}'`?还是应该在另一个问题中发布它?

–柏林
17-3-25在22:06



可能还有另一个问题,因为注释中的格式并不是那么容易使用。我一直建议客户在采用云时使用大量的小型实例,而不是相反的实例。这是因为在云中预计会出现故障,如果您有2节点群集,而1发生故障,则损失了50%的容量,而如果您有3节点群集,而1发生了故障,则损失仅33%。

–Richard Slater
17 Mar 26 '17在8:47

我已经使用Rabbitmq / rabbitmq-autocluster插件配置了集群,并且运行良好,但是当节点出现故障RabbitMQ不会将其从复制列表中删除时,为什么会这样?

–柏林
17年4月1日在15:13

您是否启用了集群清理配置选项?

–Richard Slater
17年4月1日在16:18

谢谢,找到了它https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settings,我会尝试的。

–柏林
17年4月1日在22:50