Apache ActiveMQ实战(2)-集群

转载自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,故在客户端我们这样配置: 

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false  

Pure Master Slave具有以下限制:
  • 只能有一个slave broker连接到master broker。 
  • 在因master broker失效后slave才接管(保证消息完全拷贝)
  • 要想恢复master,停止slave,拷贝slave中的数据文件到master中,然后重启;
  • Master broker不需要特殊的配置。Slave broker需要进行以下配置:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <broker masterConnectorURI="tcp://masterhost:62001" shutdownOnMasterFailure="false">   
  2. ...   
  3. <transportConnectors>   
  4. <transportConnector uri="tcp://slavehost:61616"/>   
  5. </transportConnectors>   
  6. </broker>   


Shared File System Master Slave


如果你使用共享文件系统,那么你可以使用Shared File System Master Slave。如下图所示:


客户端使用failover Transport 去连接 broker,例如:                                                            

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. failover:(tcp://broker1:61616,tcp://broker2:6161 7,broker3:61618)  

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <broker useJmx="false" xmlns="http://activemq.org/config/1.0">   
  2. <persistenceAdapter>   
  3. <journaledJDBC dataDirectory="/sharedFileSystem/broker"/>   
  4. </persistenceAdapter>   
  5. …   
  6. </broker>  

其中/sharedFileSystem是文件共享的系统文件目录


JDBC Master Slave


JDBC Master Slave的工作原理跟Shared File System Master Slave类似,只是采用了数据库作为持久化存储



客户端调用:


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. failover:(tcp://broker1:61616,tcp://broker2:616167,broker3:61618)  


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <beans>   
  2. <broker xmlns="http://activemq.org/config/1.0" brokerName="JdbcMasterBroker">   
  3. <persistenceAdapter>   
  4. <jdbcPersistenceAdapter dataSource="#mysql-ds"/>   
  5. </persistenceAdapter>   
  6. </broker>   
  7. <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   
  8. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>   
  9. <property name="url" value="jdbc:mysql://localhost:3306/test?relaxAutoCommit=true"/>   
  10. <property name="username" value="username"/>   
  11. <property name="password" value="passward"/>   
  12. <property name="poolPreparedStatements" value="true"/>   
  13. </bean>   
  14. </beans>   

Broker clusters-静态


Broker clusters ,网络型中介(network of brokers)


连接到网络代理的两种方式:

  • 静态的方法配置访问特定的网络代理
  • 发现中介(agents)动态的探测代理


静态网络代理


Static:(uri1,uri2,uri3,…)?key=value 或是Failover:(uri1, … , uriN)?key=value


下面给出一个配置实例:


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <networkConnectors>  
  2. <networkConnector name=”local network”  
  3.           uri=”static://(tcp://remotehost1:61616,tcp://remotehost2:61616)”/>  
  4. </networkConnectors>  


几种集群对比


  • 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文件中的端口)


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <transportConnectors>  
  2.             <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->  
  3.             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>  
  4.             <span class="tag" style="margin: 0px; padding: 0px;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值