如何自动从RabbitMQ集群中删除死节点


11

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

有什么建议如何基于自动伸缩规则从RabbitMQ集群中删除死节点,在该规则中节点可以上下移动,或者如果您使用竞价型实例?

当节点发生故障时,RabbitMQ不会自动将其从复制列表中删除,我可以Node not running在管理UI中看到。

我设法通过Ansible和userdata自动将扩展实例加入集群。

基础设施图


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

谢谢!我希望您没有销毁其他4个(或大约)问题。也许将它们保留为后续问题,直到它们仍然有意义?
Pierre.Vriens

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

1
@柏林我画了一张图表,代表我想您正在描述的内容,如果您要表达的意思是其他,请告诉我,我会适应的。
理查德·斯莱特

1
嘿@ Pierre.Vriens-我不介意我花几分钟时间,想澄清一下我的假设,从理论上讲,我可以将其添加到答案中,我很可能会这样做。
理查德·斯莱特

Answers:


4

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

一个RabbitMQ插件,它使用多种对等发现机制自动将节点聚类:

  • 领事
  • etcd2
  • DNS A记录
  • AWS EC2标签
  • AWS自动伸缩组

有一个配置的公平位插上得到这个设置,包括设置IAM策略和添加EC2标签,你想成为一方群集实例。

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

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

如果您不使用AWS Autoscaling组,则仍可以使用EC2实例上的标签来获得所需的结果:

[
  {rabbit, [ ... ]},
  {autocluster, [
    {backend, aws},
    {aws_ec2_tags, [{"region", "us-west-2"}, {"service", "rabbitmq"}]},
    {aws_ec2_region, "us-east-1"},
    {aws_access_key, "..."},
    {aws_secret_key, "..."}
  ]}
].

综上所述,我强烈建议使用HashiCorp的Consul作为服务发现机制,从长远来看,在将系统的各个部分相互分离方面,您将获得更大的灵活性。


感谢您提供详细的说明和图表,所以AFAIK rabbitmq/rabbitmq-autocluster plugin也知道一旦节点关闭,也会从复制列表中删除该节点,如果我想再说一遍,我想从2-node群集开始,您建议从3-node群集开始吗?如您在使用策略`rabbitmqctl set_policy ha-all“”的图表中所描述的那样“”'{“ ha-mode”:“ all”,“ ha-sync-mode”:“ automatic”}'``?还是应该在另一个问题中发布它?
柏林

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

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

1
您是否启用了集群清理配置选项?
理查德·斯莱特

谢谢,找到了https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settings,我会尝试的。
柏林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.