Все почалося тоді коли частина кроликів переїхала в kubernetes, а інша частина в інший DC. Почали відбуватися дивні речі, а саме постійні перепідключення php воркерів. З-за чого в розробників Sentry почав сваритися як старий дід на ринку. Раніше таких проблем не було, кролики жили разом в одній мережі з іншими серверами й все працювало як годинник.
Після пошуків, спілкування з колегами здається знайшов в чому проблема. Почав детальніше перевіряти підключення і дізнався про heartbeat.
heartbeat – параметр, який дозволяє перевіряти зв’язок між клієнтом та сервером, тобто час від часу (періодично) сервер й клієнт відправляють пінги (порожні повідомлення) для перевірки доступності одне одного. Коли декілька пінгів буде втрачено, підключення розривається і воркер повинен перевстановити зєднання.
Для розв’язання даної проблеми потрібно налаштувати heartbeat з боку клієнта і сервера, якщо збоку сервера не налаштовано, а на клієнті так, тоді клієнт передасть ці параметри серверу, і сервер знатиме про них.
Приклад heartbeat коли він вимкнутий:
В офф документації написано що це не є дуже добре,не потрібно так робити якщо середовище використовує пакети перевірки активності TCP на кожному хості. І виставляти значення в 5 секунд і нижче також не рекомендується. Зазвичай дане значення виставляється в 15, 30, 60 секундах, проте в моєму випадку буде 120c.
Приклад графіку підключення коли пульсація налаштована:
Для додавання даного параметра з боку сервера необхідно потрібно внести зміни в конфігураційний файл кролика а на клієнтській частині все залежить від обраної мови програмування та відповідних бібліотек.
Так як кролик має два види конфігураційного фалу, це старий зразок та новий, розглянемо обидва.
З боку сервера додаваємо в файл /etc/rabbitmq/rabbitmq.config наступний параметр, спершу це новий зразок:
heartbeat = 60
і старий зразок конфігураційного файлу:
[ {rabbit, [ {heartbeat, 60}, ]} ].
Для кращого розуміння потрібно вчитуватись в офф документацію, проте коротка замітка допоможе не тільки мені.
Корисні посилання
- https://groups.google.com/g/rabbitmq-users/c/djNpSuQoznY/discussion
- https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/best-practices-rabbitmq.html
- https://shivama205.medium.com/rabbitmq-best-practices-67a27ef72a57
- https://www.rabbitmq.com/heartbeats.html