2016-11-21 4 views
0

Я пытаюсь настроить RabbitMQ за балансировщик нагрузки F5. У меня есть рабочий узел RabbitMQ с именем узла по умолчанию rabbit @% computername%. Он настроен на прослушивание всех сетевых интерфейсов (все IP-адреса 0.0.0.0:5671, который является портом SSL AMQP), и он работает нормально. Тем не менее, все клиентские приложения, которые подключаются к нему, в настоящее время используют определенное имя узла, например. "%Имя компьютера%". Чтобы воспользоваться преимуществами отказоустойчивости балансировки нагрузки, я хочу обновить все мои клиентские приложения, чтобы использовать сбалансированное по нагрузке имя вместо имени конкретного узла, например. подключитесь с помощью HostName = "balancedname.mycompany.com" вместо "% computername%". Однако, когда я обновляю свои клиентские приложения для подключения к балансируемому по нагрузке имени, соединение терпит неудачу. Как я могу заставить это работать?RabbitMQ с F5 Load Balancer

Я новичок в F5, и я заметил, что адреса членов пула - это IP-адреса ... должны ли они быть именами узлов вместо IP-адресов? Возможно ли это, даже если имя узла может быть полностью произвольным и не обязательно отображать все, что можно разрешить для сети? Я нахожусь в ситуации с хостингом, когда у меня нет доступа на запись к F5, поэтому попробовать все это немного сложно.

Я не нашел очень много информации о балансировке нагрузки в настройке RabbitMQ. Я понимаю, что все очереди RabbitMQ действительно существуют на одном узле, и я настроил F5 в активном пассивном режиме, чтобы трафик всегда направлялся на основной узел, пока он не опустится.

Обновление 1: Кажется, что this issue вернулся, чтобы укусить меня здесь. Я использую аутентификацию EXTERNAL с использованием SSL-сертификата, и поскольку клиенты соединялись с использованием имени баланса нагрузки вместо имени узла, а имя баланса загрузки НЕ использовалось для создания сертификата, оно отклоняло соединение. Я закончил перегенерировать сертификат и использовал имя баланса загрузки, но этого было недостаточно - мне также пришлось добавить запись в файл хостов Windows для сопоставления 127.0.0.1 и :: 1 с DNS-адресом баланса нагрузки.

Обновление 2: Обновление 1 разрешает проблемы с подключением только для запуска клиентских приложений на сервере приложений, который является частью балансировки нагрузки, но удаленные клиенты не работают. Внутреннее исключение гласит: «Цепочка сертификатов была выпущена органом, которому не доверяют». RabbitMQ + SSL сложно. И добавление балансировки нагрузки делает его еще сложнее.

ответ

0

Я отвечаю на свой вопрос в надежде, что он спасет людей некоторое время. В моем сценарии мне было необходимо, чтобы клиенты подключались к балансируемому по нагрузке адресу, например myrabbithost.mycompany.com, и для F5 направлять трафик на один узел до тех пор, пока он встает и переходит к вторичному узлу, если он не работает. Я уже настроил безопасность и аутентифицировал RabbitMQ с помощью самозаверяющих сертификатов. Эти сертификаты имели общие имена, специфичные для каждого хоста, что было проблемой. Чтобы работать с .NET, общее имя в сертификате должно совпадать с именем сервера, к которому подключено (myrabbithost.mycompany.com в моем случае). Я должен был сделать следующее:

  • Создать новый сервер и клиентские сертификаты на RabbitMQ серверах с общими именами myrabbithost.mycompany.com
  • генерировать новые сертификаты для клиентов использовать при подключении, чтобы использовать SSL-аутентификация
  • По-прежнему на серверах RabbitMQ мне приходилось конкатенировать несколько файлов cacert.pem, используемых для центра сертификации, чтобы клиенты могли аутентифицироваться на любом узле с использованием сертификата клиента, сгенерированного любым узлом. Когда я изменил rabbit.config, чтобы использовать «all.pem» вместо «cacert.pem», клиенты смогли подключиться, но он нарушил интерфейс управления, поэтому я изменил параметры rabbitmq_management в rabbit.config, чтобы определить, конкретный файл cacert.pem, и он снова начал работать.

Для того, чтобы установить высокую доступность, я создал кластер RabbitMQ, но также столкнулся с некоторыми проблемами. В дополнение к копированию файла Erlang с основного узла на вторичный узел в C: \ Windows и C: \ users \ myusername мне пришлось убить процесс epmd.exe через диспетчер задач, поскольку команда rabbitmqctl join_cluster терпела неудачу с " узел вниз ". Процесс epmd.exe выдержал остановки RabbitMQ, и это может привести к тому, что rabbitmqctl.bat сообщит о ошибочных ошибках, таких как «узел вниз», даже если он не работает.