Как загрузить-распределение в кластере RabbitMQ?

Привет, я создаю три сервера RabbitMQ, работающих в кластере на EC2.

Я хочу масштабировать базу кластера RabbitMQ на основе использования ЦП, но когда я публикую сообщение, только один сервер использует ЦП, а другой сервер RabbitMQ не использует ЦП.

так как я могу распределить нагрузку по кластеру RabbitMQ


person jayesh    schedule 05.05.2012    source источник


Ответы (2)


Кластеры RabbitMQ предназначены для повышения масштабируемости, но система не является полностью автоматической.

Когда вы объявляете очередь на узле в кластере, очередь создается только на этом одном узле. Таким образом, если у вас есть одна очередь, независимо от того, на каком узле вы публикуете сообщение, оно окажется на узле, где находится очередь.

Чтобы правильно использовать кластеры RabbitMQ, вам необходимо убедиться, что вы делаете следующие вещи:

  • иметь несколько очередей, распределенных по узлам, чтобы работа распределялась несколько равномерно,
  • подключайте своих клиентов к разным узлам (в противном случае вы можете в конечном итоге направлять все сообщения через один узел) и
  • если возможно, попытайтесь подключить издателей/потребителей к узлу, содержащему используемую ими очередь (чтобы свести к минимуму передачу сообщений внутри кластера).

Кроме того, взгляните на Очереди высокой доступности. Они похожи на обычные очереди, но содержимое очереди зеркально отражается на нескольких узлах. Таким образом, в вашем случае вы будете публиковать на одном узле, RabbitMQ будет отражать публикации на другом узле, а потребители смогут подключаться к любому узлу, не беспокоясь о том, что кластер застопорится внутренними переносами.

person scvalex    schedule 05.05.2012
comment
Привет, Сквалекс. для нескольких очередей, распределенных по узлам, чтобы работа распределялась несколько равномерно, нужно ли добавлять сервер Linux для запуска программы балансировки нагрузки для решения программы? Или нужно изменить исходный код приложения, чтобы добавить rabbitmq информацию об имени всех узлов в программу для балансировки нагрузки? - person Chen Yu; 24.05.2012
comment
Я бы посоветовал изменить исходный код приложения, чтобы добавить «rabbitmq» информацию об именах всех узлов в программу для балансировки нагрузки, но есть люди, которые успешно использовали балансировщики нагрузки. - person scvalex; 24.05.2012
comment
Прежде чем найти ваш пост, я думаю, что rabbitmq очень мощный. Но после этого, я думаю, это не происходит автоматически, как вы сказали. Это не просто в использовании. - person Chen Yu; 24.05.2012

Это не совсем так. Ознакомьтесь с документацией по этому вопросу.

Сообщения, опубликованные в очереди, реплицируются на все зеркала. Потребители подключаются к мастеру независимо от того, к какому узлу они подключаются, а зеркала отбрасывают сообщения, которые были подтверждены мастером. Таким образом, зеркалирование очередей повышает доступность, но не распределяет нагрузку между узлами (каждый из участвующих узлов выполняет всю работу).

person overthetop    schedule 12.04.2018