Статьи

Создание топологий кластера ActiveMQ Broker с использованием Fuse Fabric

Fuse Fabric — это очень мощная платформа интеграции с открытым исходным кодом (iPaaS), разработанная
Red Hat (ранее
FuseSource ). Если вы не знаете, что такое Fabric, загляните на веб-сайт проекта:
http://fuse.fusesource.org/fabric/ .

Представление Fabric в этом посте означало бы просто повторить документацию веб-сайта Fabric, поэтому я позабочусь об этом.

Вместо этого, эта запись в блоге попытается немного углубиться в структуру: команда mq-create. Я надеюсь, что этот пост будет полезен всем, кто использует Fabric и хочет настроить высокодинамичные брокерские сети с использованием Fabric. Давайте прямо в это …

Команда fabric: mq-create позволяет создавать экземпляры посредника, которые запускаются в своих собственных контейнерах OSGi. Для справки по общему типу использования:

fabric:mq-create --help

В Fabric каждый брокер имеет имя брокера и входит в группу брокеров. Имя посредника — это последний аргумент, указанный в команде mq-create, и имя отдельного посредника. Имя группы указывается с помощью аргумента —group. Если этот аргумент опущен, брокер получает имя группы по умолчанию, которое называется «default». Эти понятия имен брокеров и групповых имен важны, как будет показано в следующих разделах.

fabric: mq-create создает новый профиль Fabric, который содержит указанную конфигурацию посредника. Имя профиля совпадает с именем брокера, которое указано в качестве последнего аргумента mq-create. Этот профиль может быть легко развернут в одном или нескольких контейнерах.

Команда fabric: mq-create довольно мощная и может также использоваться для создания более сложных топологий брокера. Вот краткий обзор некоторых наиболее распространенных топологий.

Одиночная пара брокер-ведущий

fabric:mq-create --create-container broker1,broker2 MasterSlaveBroker

Эта команда создает профиль Fabric с именем MasterSlaveBroker. в этом профиле он настраивает брокера ActiveMQ с тем же именем MasterSlaveBroker. Поскольку аргумент —group не был указан, имя группы будет «default». Опция —create-container broker1, broker2 также развертывает этот профиль в двух новых экземплярах контейнера OSGi, называемых broker1 и broker2. Поскольку оба экземпляра контейнера развертывают один и тот же профиль, они создают экземпляр посредника с тем же именем посредника и тем же именем группы и, таким образом, образуют пару главный / подчиненный.

Примечание: опция —create-container действительно необязательна. Также возможно сначала создать профиль Fabric с помощью mq-create, а затем развернуть этот профиль в другом контейнере с помощью команд fabric: container-create- *.

Брокерская сеть с двумя взаимосвязанными парами Master / Slave

Расширение предыдущей топологии для создания двух пар посредников, которые связаны между собой с помощью сетевого соединителя. Каждая пара состоит из экземпляра главного и подчиненного брокера. Это можно создать, вызвав:

fabric:mq-create
    --group network-brokers1
    --create-container broker1_1,broker1_2
    --networks network-brokers2
    --networks-password admin
    --networks-username admin
    MasterSlaveBroker1
 
fabric:mq-create
    --group network-brokers2
    --create-container broker2_1,broker2_2
    --networks network-brokers1
    --networks-password admin
    --networks-username admin
    MasterSlaveBroker2

Эти команды создают два профиля Fabric. Каждый профиль конфигурирует брокера ActiveMQ с именами MasterSlaveBroker1 и MasterSlaveBroker2. Каждая конфигурация посредника также устанавливает имя группы, чтобы экземпляры посредника были частью этой группы. Кроме того, MasterSlaveBroker1, который является частью группы сетевых брокеров1, настраивает сетевой соединитель для экземпляров брокера в группе сетевых брокеров2 и наоборот.

Используя —create-container, мы создаем в каждой команде два контейнера OSGi, каждый из которых развертывает соответствующий профиль Fabric и создает экземпляры посредника. Два контейнера в каждом аргументе —create-container сформируют пару главный / подчиненный посредник, так как они оба используют одно и то же имя посредника (либо MasterSlaveBroker1, либо MasterSlaveBroker2) и одно и то же имя группы (либо network-brokers1, либо network-brokers2).

По умолчанию брокеры, созданные с помощью mq-create, защищены и требуют аутентификации. Поэтому при настройке сетевого моста необходимо указать учетные данные для имени пользователя и пароля, чтобы успешно установить сетевой мост. Имя пользователя и пароль указываются с использованием аргументов —networks-password admin —networks-username admin.

Всего эти две команды создают четыре экземпляра посредника, из которых только два будут экземплярами главного посредника, а две другие будут подчиненными экземплярами. Каждая пара ведущий / ведомый принадлежит одной группе брокеров. Сетевой мост между двумя мастерами будет установлен в обоих направлениях. Если один из главных посредников умирает или отключается, подчиненный посредник вступает во владение в течение нескольких секунд, и сетевые мосты восстанавливаются от и к новому главному посреднику.

Полностью подключенная брокерская сетка

Приведенный выше пример устанавливает пару ведущий / ведомый для каждой группы брокеров, где одновременно активен только один экземпляр. Также возможно настроить несколько активных экземпляров посредника в одной группе. Чтобы экземпляр посредника был активным независимо от других экземпляров, ему просто необходимо иметь уникальное имя посредника в той же группе. Эти экземпляры также могут быть объединены в сеть с использованием полной топологии сетки.

Когда работает:

fabric:mq-create
    --group BrokerClusterMesh
    --networks BrokerClusterMesh
    --create-container MeshBroker1
    --networks-password admin
    --networks-username admin
    BrokerClusterMesh1
 
fabric:mq-create
    --group BrokerClusterMesh
    --networks BrokerClusterMesh
    --create-container MeshBroker2
    --networks-password admin
    --networks-username admin
    BrokerClusterMesh2

… он снова создаст два профиля брокера с именами BrokerClusterMesh1 и BrokerClusterMesh2. Каждый профиль настраивает брокера ActiveMQ. Обе конфигурации брокера являются частью одной группы BrokerClusterMesh. Используя —create-container, каждый профиль развертывается ровно в одном контейнере OSGi. Поскольку для обоих экземпляров брокера настроено собственное имя брокера (BrokerClusterMesh1 и BrokerClusterMesh2), они будут активными экземплярами брокера в одной группе BrokerClusterMesh. С помощью параметра —network BrokerClusterMesh в каждом посреднике настраивается сетевой мост, который указывает на его собственное имя сетевой группы. По сути, это создаст сетевой мост от каждого брокера ко всем остальным экземплярам брокера в той же группе и сформирует топологию полной сетки. В этом примере создаются только два экземпляра брокера, поэтому это довольно маленькая сетка.Однако вы можете легко добавить другого брокера в группу, например, запустив:

fabric:mq-create
    --group BrokerClusterMesh
    --networks BrokerClusterMesh
    --create-container MeshBroker3
    --networks-password admin
    --networks-username admin
    BrokerClusterMesh3

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

Примечание. Как правило, не рекомендуется создавать большие меши брокера (например,> 4 экземпляра брокера), поскольку в зависимости от варианта использования это вызовет некоторую болтовню в консультативных сообщениях, которыми обмениваются эти экземпляры брокера.

Полная брокерская сетка с парой ведущий / ведомый на каждом брокере

Комбинируя два последних варианта использования, также можно настроить полную сетку брокера, где каждый брокер состоит из пары «главный / подчиненный». Это достигается с помощью следующих команд:

fabric:mq-create
    --group BrokerClusterMeshWithSlave
    --networks BrokerClusterMeshWithSlave
    --create-container MeshBroker1,MeshBroker2
    --networks-password admin
    --networks-username admin
    BrokerClusterMeshWithSlave1
 
fabric:mq-create
    --group BrokerClusterMeshWithSlave
    --networks BrokerClusterMeshWithSlave
    --create-container MeshBroker3,MeshBroker4
    --networks-password admin
    --networks-username admin
    BrokerClusterMeshWithSlave2

Эта команда отличается от предыдущего примера только аргументом —create-container. В предыдущем примере конфигурация посредника развернута только в одном контейнере. Теперь мы развертываем конфигурацию каждого брокера в двух контейнерах. Каждый контейнер в пределах —create-container будет использовать одну и ту же конфигурацию посредника (то есть одно и то же имя посредника и одно и то же имя группы), и поэтому оба экземпляра образуют пару главный / подчиненный посредник. Каждый главный брокер создаст сетевой мост для всех других активных экземпляров брокера в той же сетевой группе.

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

fabric:mq-create
    --group BrokerClusterMeshWithSlave
    --networks BrokerClusterMeshWithSlave
    --create-container MeshBroker5,MeshBroker6
    --networks-password admin
    --networks-username admin
    BrokerClusterMeshWithSlave3

Дополнительные замечания

— Каждый из профилей посредника, созданных в приведенных выше примерах mq-create, создает профиль, в котором родительский профиль mq-base.

— Профиль mq-base содержит файл конфигурации broker.xml, который служит базовой конфигурацией посредника для всех созданных выше экземпляров посредника. Таким образом, вы можете предварительно настроить этот файл broker.xml в mq-base в соответствии с вашими потребностями (например, настроить параметры systemUsage и policy), а затем создать экземпляры вашего брокера с помощью mq-create, и все они будут использовать эту конфигурацию.

— Конфигурация посредника в mq-base не настраивает сетевые мосты. Конфигурация о сетевых мостах не сохраняется в файле broker.xml при использовании mq-create. Вместо этого он сохраняется в файле конфигурации org.fusesource.mq.fabric.server-.properties, который создается при запуске mq-create. В этом файле хранятся все настройки, связанные с сетевым соединителем, с использованием «сети». ключевое слово. Например

network.password=admin
network=BrokerClusterMeshWithSlave
group=BrokerClusterMeshWithSlave
network.userName=admin
broker-name=BrokerClusterMeshWithSlave1

Сетевой мост создается и настраивается на основе этой конфигурации, а не на основе activemq.xml! Это учитывает довольно динамические изменения конфигурации во время выполнения.

— Сетевой соединитель [конфигурация] (http://activemq.apache.org/networks-of-brokers.html) ActiveMQ обеспечивает дальнейшую детальную настройку. Эту конфигурацию можно добавить вручную в файл конфигурации org.fusesource.mq.fabric.server-.properties в каждом профиле, добавив к свойству конфигурации префикс «network». Например, чтобы установить свойство lowerNetworkConsumerPriority = true для сетевого соединителя, можно просто добавить:

network.decreaseNetworkConsumerPriority=true

… to org.fusesource.mq.fabric.server-