ActiveMQ 高可用
ActiveMQ的高可用原理
使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以提供服务,被视为 Master,其他的 Broker 处于待机状态,被视为Slave。如果Master因故障而不能提供服务,Zookeeper会从Slave中选举出一个Broker充当Master。
Slave连接Master并同步他们的存储状态,Slave不接受客户端连接。所有的存储操作都将被复制到 连接至 Master的Slaves。如果Master宕了,得到了最新更新的Slave会成为 Master。故障节点在恢复后会重新加入到集群中并连接Master进入Slave模式。
集群 http://activemq.apache.org/replicated-leveldb-store
集群搭建: 新建 /mq_cluster 将原始的解压文件复制三个,修改端口 (jetty.xml)
增加IP 到域名的映射(/etc/hosts 文件)
修改 为相同的borkername
改为 replica levelDB (3个都配,这里列举一个)
<persistenceAdapter>
<replicatedLevelDB
directory="{activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:63631"
zkAddress="localhost:2191,localhost:2192,localhost:2193"
zkPassword="123456"
sync="local_disk"
zkPath="/activemq/leveldb-stores"
hostname="wh-mq-server"
/>
</persistenceAdapter>
改端口 02 节点 =》 61617 03 节点 =》 61618
修改并保存之后,就是修改jetty的端口号(修改ACTIVEMQ_HOME/bin/jetty.xml文件),因为实在同一台服务器上,不修改的话,第二个和第三个jetty将启动不了。第activemq-1依然使用默认端口8161,activemq-2使用8162,activemq-3使用8163端口,如下图:
想要启动replica leavel DB 必须先启动所有的zookeper 服务
主要说zookeper 复制三份后改配置文件,并让之自动生成 myid 文件,并将zk的端口改为之前表格中对应的端口 。这是conf 下的配置文件
具体的配置为
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2191 // 自行设置
server.1=192.168.17.3:2888:3888
server.2=192.168.17.3:2887:3887
server.3=192.168.17.3:286:3886
dataDir=/zk_server/data/log1 // 自行设置
//批量启动zk脚本
#!/bin/sh // 注意这个必须写在第一行
cd /zk_server/zk_01/bin
./zkServer.sh start
cd /zk_server/zk_02/bin
./zkServer.sh start
cd /zk_server/zk_03/bin
./zkServer.sh start
到这里,ActiveMQ高可用就配置好了,如果没启动zookeeper的话,先启动zookeeper,然后分别启动activemq-1,activemq-2,activemq-3。进入ACTIVEMQ_HOME/data下,查看activemq.log文件,如果没有报错则说明启动成功!在zookeeper上,可以看到如下数据:
查看我的节点状态
get /activemq/leveldb-stores/00000000003
其中elected不为空的节点表示为Master,由该activemq对外提供服务。