前一篇中写了一些ActiveMQ基本的集群搭建,此篇打算写一些我参与搭建过的ActiveMQ的集群方案,如果不好求轻喷。
1.读写分离+全局Broker集群方案
架构图:
这种架构情况下,两个hub提供写入,且组成一个failover集群,三个broker组成一个读的集群
broker-hub1的配置:
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.13.12:61616,tcp://192.168.13.13:61616,tcp://192.168.13.14:61616,tcp://192.168.13.15:61666)" duplex="true"/>
</networkConnectors>
然后更改brokerName
broker-hub2的配置:<networkConnectors>
<networkConnector uri="static:(tcp://192.168.13.13:61616,tcp://192.168.13.14:61616,tcp://192.168.13.15:61666)" duplex="true"/>
</networkConnectors>
然后更改brokerName
broker1-3配置:
只需更改brokerName
最后启动5个节点,运行上一篇文章中程序【更改ip地址】,即可测试。
个人认为此种解决方案,适合于对数据丢失可以容忍的轻快下,比如抢购排队的厂家下可以考虑。因为这种场景依旧会出现上篇文章中提到的丢数据问题。
2 读写分离+Master Slave+Broker cluster
左边用的是Master+Slave的高可用集群,然后右边的读集群用的Broker Cluster。
配置如下:
在Master Slave的集群配置下,在Master和每天Slave中加入
<networkConnectors>
<networkConnector uri="static:(tcp://192.168.13.14:61616,tcp://192.168.13.15:61616,tcp://192.168.13.15:61666)" duplex="true"/>
</networkConnectors>
起到Broker1-3可以读取Master Slave集群的数据
Broker1-3只需更改BrokerName即可。
这种架构的情况下使用起来较为灵活,如果需要大量的并发写入,可以向三个Broker写入,然后Master Slave充当一个中转站的角色。如果要写入不可丢失的数据,则可以向Master Slave集群中写入,虽说性能不高,但是比较安全。
吐槽一下,网上有很多关于两个Master Slave组一个读写集群,个人认为那个不太实用,至于为什么,可以自己实践一下