- ActiveMQ集群方式master和broker集群
高可用 | 负载均衡 | |
Master/Slave(主从) | 是 | 否 |
broker cluster | 否 | 是 |
结合上面的情况,如果说要搭建高可用和负载均衡服务,需要结合Master和Broker两种集群方式.
节点B、C和A之间搭建broker集群方式,B和C搭建主从集群.当节点B获取资源成为master时,节点A和B对外提供服务,节点A和B之间消息同步,A接受的消息,B和消费,反之亦然.当节点B挂了,节点C获取资源成为主节点和节点A负载均衡提供服务,当节点A挂了时,只会有单节点提供服务,不影响服务的运行.注意节点A不可当做生产者提供服务,只可当做消费者连接,如果将节点A连接消费者,当节点A挂了,并且消费者的消息还未同步到节点B或者C时,会导致消息丢失.节点B和C既可以当做消费者连接也可以当做生产者连接,因为他们会将消息持久化,哪怕主节点挂了,从节点也可以读取到消息.
- 集群方式
Broker-Cluster集群可以采用静态连接和动态连接两种方式.Static和Dynamic
Master/Slave集群
消息的存储三种方式 : kahaDB ,levelDB,数据库。
(1) kahaDB 可以通过文件共享来实现 高可用,需要对linux进行配置,介绍采用采用这种方式
(2)levelDB 是 activeMq 支持的一种高可用策略 ,需要搭建至少三个(奇数个)节点的zk集群 ,我们的activeMq 也是需要三个。
(3)基于数据库实现activeMq高可用 。
- 集群搭建
先复制三份activemq安装文件activemq01,activemq02,activemq03
activemq01和activemq02,activemq03采用broker集群方式连接.
activemq02和activemq03采用kahaDB文件共享Master方式集群,文件路径/home/iflytek/activemq/activemq/kahadb
修改activemq01/conf的activemq.xml文件,指定动态连接02和03
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<!--<transportConnector name="amqp" uri="amqp://127.0.0.1:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://127.0.0.1:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://127.0.0.1:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>-->
</transportConnectors>
<networkConnectors>
<networkConnector name="loacl_network" uri="static:(tcp://127.0.0.1:61617,tcp://127.0.0.1:61618)" />
</networkConnectors>
修改activemq02/conf的activemq.xml文件,指定动态连接02和03
<persistenceAdapter>
<kahaDB directory="/home/iflytek/activemq/activemq/kahadb"/>
</persistenceAdapter>
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<!--<transportConnector name="amqp" uri="amqp://127.0.0.1:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://127.0.0.1:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://127.0.0.1:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>-->
</transportConnectors>
<networkConnectors>
<networkConnector name="loacl_a" uri="static:(tcp://127.0.0.1:61616)" />
</networkConnectors>
activemq03的配置参考activemq02,注意修改端口为 61618和8163
集群部署视频参考:activemq集群搭建
- 项目集成activemq