Как загрузить дистрибутив в кластере RabbitMQ?
Привет я создаю три сервера RabbitMQ работающих в кластере на EC2
Я хочу масштабировать базу кластера RabbitMQ по использованию ЦП, но когда я публикую сообщение, только один сервер использует ЦП, а другой RabbitMQ-сервер не использует ЦП
Итак, как я могу распределить нагрузку по кластеру RabbitMQ
2 ответа:
Кластеры RabbitMQ предназначены для улучшения масштабируемости, но система не является полностью автоматической.
Когда вы объявляете очередь на узле в кластере, очередь создается только на этом узле . Таким образом, если у вас есть одна очередь, независимо от того, на какой узел вы публикуете, сообщение будет в конечном итоге на узле, где находится очередь.
Чтобы правильно использовать кластеры RabbitMQ, необходимо убедиться, что вы делаете следующие вещи:
- имеют несколько распределенных очередей между узлами, так что работа распределяется несколько равномерно,
- подключите своих клиентов к разным узлам (в противном случае вы можете перенаправить все сообщения через один узел), и
- Если вы можете, попробуйте подключить издателей/потребителей к узлу, который содержит очередь, которую они используют (чтобы минимизировать передачу сообщений внутри кластера).
В качестве альтернативы, посмотрите наочереди высокой доступности . Они похожи на обычные очереди, но очередь содержимое зеркально отражается на нескольких узлах. Таким образом, в вашем случае вы будете публиковать на одном узле, RabbitMQ будет зеркально отражать публикации на другом узле, и потребители смогут подключаться к любому узлу, не беспокоясь о том, что кластер застрянет с внутренними передачами.
Это не совсем так. Ознакомьтесь с документацией по этому вопросу.
Сообщения, опубликованные в очереди, реплицируются на все зеркала. Потребители подключаются к ведущему узлу независимо от того, к какому узлу они подключаются, а зеркала отбрасывают сообщения, которые были подтверждены на ведущем узле. Таким образом, зеркальное отображение очередей повышает доступность, но не распределяет нагрузку между узлами (все участвующие узлы выполняют всю работу).