ActiveMQ 5.9版本提供了基于LevelDB的高可用方式,包括数据的高可用和服务的高可用,一站式提供全套服务,很方便。
服务高可用的原理:使用zookeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以提供服务,被视为master,其他的Broker处于待机状态,被视为slave。当master由于死机等原因,不能提供服务,zookeeper会从slave中选举出一个Broker充当master。当原来的master Broker恢复继续提供服务的能力时,重新注册入zookeeper集群,作为slave待机。
这时ActiveMQ的客户端只能访问master的Broker,其他处于slave的Broker不能访问。所以客户端连接Broker应该使用failover协议。
failover:(tcp://broker1:61616,tcp://broker2:61616,tcp://broker3:61616)
这样即使当前的master Broker死机,zookeeper切换另一台机器为master,客户端也不需要重启和修改代码,完全透明。
下面是对zookeeper数据的抓图,可以看到activemq的有3个节点,分别是00000000033,00000000034,00000000032。这个图展现了00000000033的值,可以看到elected的值是null,表明这个节点是slave。