ActiveMQ Pure Master / Slave - не синхронизировано
Что у меня есть: 1 главный брокер и 1 подчиненный брокер в ActiveMQ 5.4.0
Что я использую: waitForSlave на главной стороне и URI аварийного переключения на ведомой стороне (в URI главного соединителя)
Что я хочу сделать: я хочу подождать некоторую задержку (например, 5 секунд) в случае крошечных сбоев сети между ведущим и ведомым, прежде чем запускать ведомые соединители транспортера
Так что я положил это в конфиге ведомого:
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="slave"
dataDirectory="${activemq.base}/data"
useJmx="true"
persistent="true"
populateJMSXUserID="true"
masterConnectorURI="failover://(tcp://master:61616)?initialReconnectDelay=1000&maxReconnectDelay=30000"
shutdownOnMasterFailure="false"
advisorySupport="false">
Кажется, что это работает, но после зависания сети между ведущим и ведомым, ведомое устройство успешно восстанавливает соединение, и затем ведущий регистрирует много:
2010-10-18 17:08:44,421 | ERROR | Slave Failed | org.apache.activemq.broker.ft.MasterBroker | ActiveMQ Task
java.lang.IllegalStateException: Cannot lookup a connection that had not been registered: ID:master-1040-634226732611718750-0:0
at org.apache.activemq.broker.MapTransportConnectionStateRegister.lookupConnectionState(MapTransportConnectionStateRegister.java:93)
at org.apache.activemq.broker.TransportConnection.lookupConnectionState(TransportConnection.java:1412)
at org.apache.activemq.broker.TransportConnection.processRemoveConsumer(TransportConnection.java:561)
at org.apache.activemq.command.RemoveInfo.visit(RemoveInfo.java:76)
at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:309)
at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:218)
at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
С рабской стороны все хорошо. Поэтому после этого я попытался остановить мастер, чтобы увидеть, способен ли подчиненный стать мастером после этих "зависаний сети".
Хозяину потребовалось много времени для выключения (10 секунд), а затем в журналах ведомых устройств появляется сообщение об ошибке:
2010-10-18 17:09:32,915 | WARN | Async error occurred: java.lang.IllegalStateException: Cannot lookup a connection that had not been registered: ID:master-1049-634226732657812500-0:3 | org.apache.activemq.broker.TransportConnection.Service | VMTransport: vm://slave#5
java.lang.IllegalStateException: Cannot lookup a connection that had not been registered: ID:master-1049-634226732657812500-0:3
at org.apache.activemq.broker.MapTransportConnectionStateRegister.lookupConnectionState(MapTransportConnectionStateRegister.java:93)
at org.apache.activemq.broker.TransportConnection.lookupConnectionState(TransportConnection.java:1412)
at org.apache.activemq.broker.TransportConnection.processRemoveSession(TransportConnection.java:600)
at org.apache.activemq.command.RemoveInfo.visit(RemoveInfo.java:74)
at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:309)
at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:218)
at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
Есть ли способы синхронизировать мои магазины кахи (это отдельные магазины)? Основная проблема заключается в том, что ведомый никогда не поворачивает мастер после отказа мастера, он остается заблокированным в этом сообщении:
2010-10-18 17:09:33,681 | WARN | Transport (master/172.21.60.61:61616) failed to tcp://master:61616 , attempting to automatically reconnect due to: java.net.SocketException: Software caused connection abort: socket write error | org.apache.activemq.transport.failover.FailoverTransport | ActiveMQ Transport: tcp://master/172.21.60.61:61616
Я полностью застрял с этими проблемами синхронизации, любая помощь приветствуется!
С уважением
1 ответ
После многих тестов кажется, что с нашей текущей инфраструктурой / средой невозможно выполнить то, что я хочу.
Это будет работать с общим хранилищем данных, но с уникальным хранилищем данных для каждого брокера, я всегда unsynchro.