четверг, апреля 24, 2014

ActiveMQ Master/Slave and Broker Networks cluster

В предыдущей статье мы рассмотрели высоко-нагруженый кластер ActiveMQ для распределения нагрузки. Однако эта конфигурация все таки обладает следующим недостатком. При выходе из строя одного из узлов ActiveMQ, сообщения размещенные в нем становятся более недоступны, и будут вычитаны только после того как конкретный инстанс ActiveMQ будет снова поднят. Проблема может быть решена с помощью конфигурации Master/Slave, в которой два, или больше инстанса ActiveMQ имеют общее хранилище. Пара Master/Slave может быть связана с аналогичной парой, размещенной на другом хосте, и связаны с помощью  Broker Networks. Схематично это выглядит следующим образом.
Для простоты развертывания все производится на одной машине. Инстансы ActiveMQ инстансы разделены по портам.
Ниже будут представлены настройки каждого из узлов кластера



instance1:

<networkConnectors>
 <networkConnector name="instance1-instance3-instance4" uri="masterslave:(tcp://localhost:61619,tcp://localhost:61620)" />
</networkConnectors>
<persistenceAdapter>
 <kahaDB directory="${activemq.data}/../../../kahadb1" />
</persistenceAdapter>

instance2:

<networkConnectors>
 <networkConnector name="instance2-instance3-instance4" uri="masterslave:(tcp://localhost:61619,tcp://localhost:61620)" />
</networkConnectors>
<persistenceAdapter>
 <kahaDB directory="${activemq.data}/../../../kahadb1" />
</persistenceAdapter>

instance3:

<networkConnectors>
 <networkConnector name="instance3-instance1-instance2" uri="masterslave:(tcp://localhost:61617,tcp://localhost:61618)" />
</networkConnectors>
<persistenceAdapter>
 <kahaDB directory="${activemq.data}/../../../kahadb2" />
</persistenceAdapter>

instance4:

<networkConnectors>
 <networkConnector name="instance4-instance1-instance2" uri="masterslave:(tcp://localhost:61617,tcp://localhost:61618)" />
</networkConnectors>
<persistenceAdapter>
 <kahaDB directory="${activemq.data}/../../../kahadb2" />
</persistenceAdapter>

Обратите внимание:

  • instance1 и instance2 настроены на одну директорию kahadb1, и связаны с помощью networkConnectors с instance3 и instance4.
  • instance3 и instance4 настроены на одну директорию kahadb2, и связаны с помощью networkConnectors с instance1 и instance2.
клиентский url в таком случае будет выглядеть так:

failover:(tcp://machine1:masterAport,tcp://machine2:masterBport,tcp://machine1:slaveBport,tcp://machine2:slaveAport)?randomize=false

т.е. в нашем случае:
failover:(tcp://localhost:61617,tcp://localhost:61619,tcp://localhost:61618,tcp://localhost:61620)?randomize=false

Комментариев нет: