Рекомендации по использованию
In this article:
Рекомендации по использованию#
В этом разделе приводится рекомендации по работе с сервисами брокера сообщений.
RabbitMQ#
Варианты запуска сервиса#
Одиночный экземпляр сервиса, развёрнутый на одном экземпляре виртуальной машины в выбранной зоне доступности.
Отказоустойчивый сервис, развёрнутый в кластере минимум из трёх экземпляров виртуальных машин в трёх зонах доступности.
Архитектура отказоустойчивого решения#
Все узлы кластера, где развёрнут отказоустойчивый сервис RabbitMQ, равноценны с точки зрения их функциональности. Узел может представлять собой либо RAM-узел (RAM node), либо дисковый узел (disc node, или disk node). В первом случае его состояние хранится в оперативной памяти (за исключение случаев использования очередей Persistent Queue, либо когда размер очереди слишком велик и не помещается в оперативную память). Во втором случае данные хранятся и на диске, и в оперативной памяти.
Во избежание потери данных кластер должен иметь по крайней мере один дисковый узел.
В К2 Облаке из трёх узлов кластера два представляют собой RAM node, а один — disc node.
Кроме того, в целях обеспечения максимальной отказоустойчивости политика репликации настроена таким образом, что все очереди реплицируются на все узлы кластера (ha-node = all
, ha-sync-mode = automatic
).
Таким образом, даже потеря двух из трёх узлов кластера не должна приводить к потере данных.
Аутентификация и безопасность#
При развёртывании нового сервиса RabbitMQ необходимо задать пароль пользователя admin
, чтобы после его создания вы могли подключиться к веб-интерфейсу RabbitMQ и управлять его настройками.
Пользователь admin
имеет разрешения на чтение и запись во все очереди любого виртуального хоста (vhost
), а также право назначать и изменять разрешения другим пользователям.
Кроме пользователя admin
при развёртывании сервиса создаётся встроенный пользователь guest
, которые имеет аналогичные права.
Однако RabbitMQ позволяет подключаться с этой учётной записью только при использовании localhost
, т.е. для неё запрещены удалённые подключения.
Вы можете оставить пользователя guest
без изменений (не изменять пароль по умолчанию и разрешения), так как никто посторонний не сможет подключиться от его имени.
Мы не рекомендуем использовать учётную запись admin
для работы с сервисом RabbitMQ из ваших приложений.
Для этих целей лучше создать отдельных пользователей и ограничить им соответствующим образом права.
Избегайте утечек пароля пользователя admin
, так как данная учётная запись имеет неограниченные привилегии.
Если одной или нескольким виртуальным машинам, на которых работает PaaS RabbitMQ, назначен Elastic IP-адрес, то данный сервис может потенциально оказаться публично доступным. Поэтому обязательно используйте группы безопасности облака, чтобы ограничить доступ к вашим сервисам только адресами и сетями, из которых вы работаете.
Подключение к сервису#
После развёртывания сервис RabbitMQ принимает клиентские подключения по протоколу TCP на порту 5672 на каждом экземпляре виртуальной машины, на котором он запущен.
В случае отказоустойчивого решения на стороне приложения необходимо указать адреса всех виртуальных машин кластера, чтобы при сбое любого узла происходило автоматическое переключение на работоспособный узел кластера.
Для простоты и удобства использования отказоустойчивого сервиса RabbitMQ в него встроена инсталляция HAProxy. Это позволяет отслеживать состояние сервиса и автоматически направлять запросы на работающие экземпляры. Сервис HAProxy выполняется на каждом из узлов кластера на порту tcp/5000. Таким образом, вы можете просто обращаться к этому порту на любом из узлов — механизм HAProxy его правильно направит к работающему экземпляру RabbitMQ.
Кроме того, на порту tcp/15672 активируется управляющий интерфейс, к которому можно обращаться с других узлов, используя утилиту rabbitmqctl
либо браузер.
Чтобы открыть веб-интерфейс для управления настройками RabbitMQ, наберите в браузере адрес http://<vm-address>:15672, где <vm-address>
— приватный или публичный IP-адрес виртуальной машины, на которой работает сервис.
Публичный адрес может понадобиться, если вы подключаетесь через интернет.
Управлять кластером RabbitMQ можно, подключившись к любому экземпляру кластера.
Мониторинг#
Для мониторинга сервиса мы рекомендуем включить облачный сервис мониторинга Prometheus.
Если вы хотите использовать собственный сервер мониторинга, то можете подключить его к экспортёру Prometheus rabbitmq_exporter
, который устанавливается вместе с RabbitMQ и работает на порту tcp/9090.