zoukankan      html  css  js  c++  java
  • JMS之——ActiveMQ高可用+负载均衡集群

    一、高可用集群

    从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的Master-Slave实现方式,其他两种方式目录共享和数据库共享方式依然存在.

    1、文件共享(KahaDB)

    [html] view plain copy
     
    1. <persistenceAdapter>  
    2.   <kahaDB directory="${activemq.data}/kahadb"/>  
    3. </persistenceAdapter>  

    2、数据库共享

    [html] view plain copy
     
    1. <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    2.     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
    3.     <property name="url" value="jdbc:mysql://localhost:3306/smq?relaxAutoCommit=true"/>  
    4.     <property name="username" value="root"/>  
    5.     <property name="password" value="root"/>  
    6.     <property name="maxActive" value="20"/>  
    7.     <property name="poolPreparedStatements" value="true"/>  
    8. </bean>  
    9. <persistenceAdapter>  
    10.     <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" createTablesOnStartup="false"/>  
    11. </persistenceAdapter>  

    3、复制的LevelDB

    LevelDB是Google开发的用于持久化数据的高性能类库,LevelDB并不是一种服务,需要用户自己实现,能处理十亿级别规模的Key-Value型数据,占用内存小.

    [html] view plain copy
     
    1. <persistenceAdapter>  
    2. <replicatedLevelDB  
    3.   directory="${activemq.data}/leveldb"  
    4.   replicas="3"  
    5.   bind="tcp://0.0.0.0:62621"  
    6.   zkAddress="192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183"  
    7.   hostname="edu-zk-01"  
    8.   zkPath="/activemq1/leveldb-stores" />  
    9. </persistenceAdapter>  
    10. --SSDB(基于LevelDB)  

    高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker.只有其中的一个Broker可以提供服务,被视为Master,其他的Broker处于待机状态,被视为Slave.如果Master因故障不能提供服务,ZooKeeper会从Slave中选举出一个Broker充当Master

    二、ActiveMQ集群部署规划

    ZooKeeper集群环境:192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183
    ActiveMQ需要划分的端口:
          mq集群通讯端口(bind="tcp://0.0.0.0:62621" ActiveMQ相互之间通许,数据同步...)
          mq集群消息端口(conf/activeMq.xml 客户端监听端口)
          mq管理控制台监听端口(conf/jetty.xml)
    一个高可用集群中每个ActiveMQ的BrokerName必须相同,否则不能加入集群

    [html] view plain copy
     
    1. <broker xmlns="http://activemq.apache.org/schema/core" brokerName="DobboEdu" dataDirectory="${activemq.data}">  

    三、客户端broker采用失败重连机制

    [plain] view plain copy
     
    1. mq.brokerURL=failover:(tcp://192.168.1.81:51611,tcp://192.168.1.82:51611,tcp://192.168.1.83:51611)?randomize=false&initialReconnectDelay=1000&maxReconnectDelay=30000  

    当一个ActiveMQ节点挂掉,ActiveMQ服务一样正常使用,如果仅剩一个ActiveMQ节点,因为不能选举Master,ActiveMQ不能正常运转;如贵ZooKeeper集群出了问题,需要对
    ActiveMQ重新启动一次.
    replicatedLevelDB不支持延迟或者计划任务消息.这些消息存储在另外的LevelDB文件中,如果使用延迟或者计划任务消息,将不会复制到slave Broker上,不能实现消息的高可用.

    四、负载均衡集群

    1.集群一链接集群二

    集群一中所有ActiveMQ配置如下:加在persistenceAdapter适配器节点前,networkConnector uri 为集群二的消息端口,这里采用失败重连机制

    [html] view plain copy
     
    1. <networkConnectors>  
    2.     <networkConnector uri="static:{tcp://192.168.1.101:53531,tcp://192.168.1.101:53532,tcp://192.168.1.101:t3533}" duplex="false"/>  
    3. </networkConnectors>  

    2.集群二链接集群一

    集群二中所有ActiveMQ配置如下:加在persistenceAdapter适配器节点前,networkConnector uri 为集群一的消息端口,这里采用失败重连机制

    [html] view plain copy
     
      1. <networkConnectors>  
      2.     <networkConnector uri="static:{tcp://192.168.1.101:53511,tcp://192.168.1.101:53512,tcp://192.168.1.101:t3513}" duplex="false"/>  
      3. </networkConnectors>   
  • 相关阅读:
    Ubantu 查看系统资源占用
    C do {...} while (0) 在宏定义中的作用
    Redis架构设计
    Ubantu 安装boost环境
    Ubuntu 安装谷歌拼音输入法
    Ubuntu C/C++开发环境的安装和配置
    ubuntu 14.04英文环境设置成中文
    自己动手写可视化软件(代码已开源)
    探秘Tomcat——连接篇
    探秘Tomcat——连接器和容器的优雅启动
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/7827689.html
Copyright © 2011-2022 走看看