转载自http://blog.csdn.net/lifetragedy/article/details/51869032
ActiveMQ的集群
内嵌代理所引发的问题:
- 消息过载
- 管理混乱
如何解决这些问题——集群的两种方式:
- Master slave
- Broker clusters
ActiveMQ的集群有两种方式:
- MASTER/SLAVE模式
- Cluster模式
Pure Master Slave
Pure master slave的工作方式:
当master broker失效的时候。Slave broker 做出了两种不同的相应方式
- 启动network connectors和transport connectors
- slave broker停止,slave broker只是复制了master broker的状态
在任何情况下我们都应该先尝试连接master,故在客户端我们这样配置:
Pure Master Slave具有以下限制:
- 只能有一个slave broker连接到master broker。
- 在因master broker失效后slave才接管(保证消息完全拷贝)
- 要想恢复master,停止slave,拷贝slave中的数据文件到master中,然后重启;
- Master broker不需要特殊的配置。Slave broker需要进行以下配置:
Shared File System Master Slave
如果你使用共享文件系统,那么你可以使用Shared File System Master Slave。如下图所示:
客户端使用failover Transport 去连接 broker,例如:
其中/sharedFileSystem是文件共享的系统文件目录
JDBC Master Slave
JDBC Master Slave的工作原理跟Shared File System Master Slave类似,只是采用了数据库作为持久化存储
客户端调用:
Broker clusters-静态
Broker clusters ,网络型中介(network of brokers)
连接到网络代理的两种方式:
- 静态的方法配置访问特定的网络代理
- 发现中介(agents)动态的探测代理
静态网络代理
Static:(uri1,uri2,uri3,…)?key=value 或是Failover:(uri1, … , uriN)?key=value
下面给出一个配置实例:
几种集群对比
- broker的集群在多个broker之前fail-over和 load-balance,master-slave能fail-over,但是不能load- balance
- 消息在多个broker之间转发,但是消息只存储在一个broker上,一旦失效必须重启,而主从方式master失效,slave实时备份消息。
- jdbc方式成本高,效率低
- master-slave方式中pure方式管理起来麻烦
因此,我们把MASTER/SLAVE和BROKER CLUSTER两者相结合,可以得到一个完全解决方案:即又可以做到集群又可以做到任何一个BROKER如果发生宕机节点消息也不丢失。
Master/Slave集群搭建-传统式
一般activemq的Master Slave是基于KAHADB的阻塞来做的,先看一下原理
注意红色加粗的地方,这是传统的Master Slave的一个缺陷。这样做太不安全了!
下面给出核心配置:
master配置(不要忘了改conf目录下的jetty.xml文件中的端口)