Як автоматично видалити мертвий вузол з кластеру RabbitMQ


11

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

Будь-яка пропозиція, як видалити мертвий вузол із кластеру RabbitMQ на основі правила автоматичного масштабування, де вузли можуть підніматися вгору та вниз, або якщо ви використовуєте точкові екземпляри?

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

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

Діаграма інфраструктури


@ Pierre.Vriens, я змінив лише 1 питання, дякую.
Берлін

Мерсі! Ви не знищили інших 4 (або близько того) питань, на які я сподіваюся. Можливо, тримати їх як наступне питання, наскільки вони все ще актуальні?
Pierre.Vriens

Так, питання все ще актуальні, але це найважливіше. Ще одне питання опублікую пізніше :) дякую!
Берлін

1
@ Берлін я намалював схему, яка представляє те, що я думаю, що ви описуєте, якщо ви мали на увазі щось інше, то, будь ласка, повідомте мене, і я буду адаптуватись.
Річард Слейтер

1
Привіт @ Pierre.Vriens - Я не заперечую, що у мене було кілька хвилин і хотілося уточнити своє припущення, теоретично я можу додати це до своєї відповіді, і я цілком можу це зробити.
Річард Слейтер

Відповіді:


4

Спробуйте скористатися плагіном rabbitmq / rabbitmq-autocluster :

Плагін RabbitMQ, який кластеризує вузли автоматично, використовуючи ряд механізмів виявлення однолітків:

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

Для отримання цієї налаштування потрібно підключити трохи конфігурації, зокрема встановлення політики IAM та додавання тегів EC2 до випадків, які ви хочете стати учасниками вашого кластеру.

Якби ви використовували групи автоматичного масштабування AWS, тоді ви додали б таке rabbitmq.config:

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

Якщо ви не використовуєте групи автоматичного масштабування AWS, ви все одно можете досягти бажаного результату, використовуючи теги на своїх екземплярах 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 від HashiCorp в якості механізму виявлення послуг, з часом ви отримуєте значно більшу гнучкість у плані роз’єднання частин вашої системи один від одного.


дякую за детальне пояснення та схему, тож 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, я спробую це.
Берлін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.