Как автоматически удалить мертвый узел из кластера RabbitMQ

11

Я планирую создать кластер RabbitMQ, используя Ansible на AWS VPC с внутренним балансировщиком нагрузки Amazon в качестве интерфейса для подключения к нему.

Любое предложение, как удалить мертвый узел из кластера RabbitMQ на основе правила автомасштабирования, где узлы могут идти вверх и вниз, или если вы используете точечные экземпляры?

Когда узел выходит из строя, RabbitMQ не удаляет его из списка репликации автоматически, я вижу Node not runningв пользовательском интерфейсе управления.

Мне удалось автоматически присоединить к кластеру масштабированный экземпляр через Ansible и userdata.

Схема инфраструктуры

Берлин
источник
@ Pierre.Vriens, я перешел только на 1 вопрос, спасибо.
Берлин,
Merci! Вы не уничтожили остальные 4 (или около того) вопроса, я надеюсь. Может быть, держать их в качестве следующего вопроса, насколько они все еще актуальны?
Pierre.Vriens
Да, вопросы по-прежнему актуальны, но этот самый важный. Я опубликую другой вопрос позже :) спасибо!
Берлин,
1
@ Берлин Я нарисовал диаграмму, которая представляет то, что я думаю, что вы описываете, если вы имели в виду что-то еще, пожалуйста, дайте мне знать, и я буду адаптироваться.
Ричард Слейтер
1
Эй, Пьер. Вринс - я не против, что у меня было несколько минут, и я хотел уточнить мое предположение, теоретически я мог бы добавить его к своему ответу, и я вполне могу это сделать.
Ричард Слейтер

Ответы:

4

Рассмотрите возможность использования плагина rabbitmq / rabbitmq-autocluster :

Плагин RabbitMQ, который автоматически кластеризует узлы с использованием ряда механизмов обнаружения одноранговых узлов:

  • Консул ,
  • etcd2
  • DNS A записи
  • Теги AWS EC2
  • Группы автоматического масштабирования AWS

Существует справедливый бит конфигурации для подключения , чтобы получить эту настройку , включая настройки политик IAM и добавление тегов EC2 в случаях , которые вы хотите быть участником в кластер.

Если бы вы использовали AWS Autoscaling Groups, вы бы добавили следующее rabbitmq.config:

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

Если вы не используете AWS Autoscaling Groups, вы все равно можете достичь желаемого результата, используя теги на ваших экземплярах 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, "..."}
  ]}
].

Учитывая все вышесказанное, я настоятельно рекомендую использовать Consul by HashiCorp в качестве механизма обнаружения служб, и в долгосрочной перспективе вы получите значительно большую гибкость в плане отделения ваших частей системы друг от друга.

Ричард Слейтер
источник
спасибо за подробное объяснение и диаграмму, поэтому AFAIK также rabbitmq/rabbitmq-autocluster pluginбудет знать, как удалить узел из списка репликации, когда узел не работает, еще одна вещь, если я могу спросить, я подумал начать с 2-nodeкластера, вы предлагаете начать с 3-nodeкластера как вы описываете в своей диаграмме с политикой `rabbitmqctl set_policy ha-all" "'{" ha-mode ":" все "," ha-sync-mode ":" автоматический "}'`? или я должен опубликовать это в другом вопросе?
Берлин,
1
Возможно, другой вопрос, так как форматирование в комментариях не так просто в использовании. Я всегда советовал клиентам при внедрении облака использовать большее количество маленьких экземпляров, а не наоборот. Это связано с тем, что в облаке ожидается сбой, если у вас кластер с 2 узлами и 1 отказ, вы потеряли 50% своей емкости, тогда как если у вас кластер с 3 узлами и 1 отказ, вы потеряете только 33%.
Ричард Слейтер,
Я настроил свой кластер, используя rabbitmq/rabbitmq-autocluster pluginего, и он работает довольно хорошо, однако, когда узел выходит из строя, RabbitMQ не удаляет его из списка репликации, есть идеи, почему?
Берлин,
1
Вы включили опцию конфигурации Cluster Cleanup?
Ричард Слейтер
спасибо, нашел https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settings, попробую.
Берлин,