• ActiveMQ集群


    ZooKeeper+ActiveMQ可以实现主从模式和集群模式

    一、主从模式

      Master-Slave主从模式是一种高可用解决方案,在Zookeeper中注册若干ActiveMQ Broker,其中只有一个Broker提供对外服务(Master),其他Broker处于待机状态(Slave)。当Master出现故障导致宕机时,通过Zookeeper内部的选举机制,选举出一台Slave替代Master继续对外服务。

    首先搭建zookeeper集群

    1,安装zookeeper并创建data数据目录

    2,创建conf/zoo.cfg设置data数据目录、端口和server

    1 dataDir=/opt/zookeeper/apache-zookeeper-3.5.5-1/data
    2 clientPort=2181
    3 server.1=192.168.50.30:2881:3881
    4 server.2=192.168.50.30:2882:3882
    5 server.3=192.168.50.30:2883:3883

    3,复制出三个zookeeper

    4,在每个Zookeeper 应用内的data 目录中增加文件myid内部定义每个服务的编号. 编号要求为数字,是正整数可以使用回声命名快速定义myid文件

    1 echo "1" > /opt/zookeeper/apache-zookeeper-3.5.5-1/data/myid
    2 echo "2" > /opt/zookeeper/apache-zookeeper-3.5.5-2/data/myid
    3 echo "3" > /opt/zookeeper/apache-zookeeper-3.5.5-3/data/myid

    5,启动zookeeper

    1 /opt/zookeeper/apache-zookeeper-3.5.5-1/bin/zkServer.sh start
    2 /opt/zookeeper/apache-zookeeper-3.5.5-2/bin/zkServer.sh start
    3 /opt/zookeeper/apache-zookeeper-3.5.5-3/bin/zkServer.sh start

    6,测试zookeeper集群

      连接一个zookeeper,实际上就连接上了整个zookeeper集群。

    1 /opt/zookeeper/apache-zookeeper-3.5.5-1/bin/zkCli.sh -server 192.168.50.30:2181

    然后配置ActiveMQ主从模式

     1,复制三份ActiveMQ,配置conf/jetty.xml中端口为8161、8162、8163

    2,修改conf/activemq.xml 文件。

    修改broker 标签属性信息,统一所有节点的broker 命名。

    1 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}">

    修改broker 标签中子标签persistenceAdapter 相关内容。

    replicas 属性代表当前主从模型中的节点数量。按需配置。

    bind 属性中的端口为主从实例之间的通讯端口。代表当前实例对外开放端口是什么,三个实例分别使用62626、62627、62628 端口。

    zkAddress 属性代表ZooKeeper 安装位置,安装具体情况设置。

    zkPath 是ActiveMQ 主从信息保存到ZooKeeper 中的什么目录内。

    hostname 为ActiveMQ 实例安装Linux 的主机名,可以在/etc/hosts 配置文件中设置。设置格式为:IP 主机名。如: 127.0.0.1 mq-server

     1 <persistenceAdapter>
     2     <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
     3     <replicatedLevelDB 
     4         directory="${activemq.data}/levelDB"
     5         replicas="3"
     6         bind="tcp://0.0.0.0:62626"
     7         zkAddress="192.168.50.30:2181,192.168.50.30:2182,192.168.50.30:2183"
     8         zkPath="/activemq/leveldb-stores"
     9         hostname="guangheV30"
    10     />
    11 </persistenceAdapter>

    修改ActiveMQ 对外提供的服务端口。原默认端口为61616。当前环境使用的端口为:61616、61617、61618,修改conf/activemq.xml 配置文件。修改broker 标签中子标签transportConnectors 中tcp那一项的相关配置。

    3,启动activeMQ主从

    1 /opt/activemq/apache-activemq-5.15.9-1/bin/activemq start
    2 /opt/activemq/apache-activemq-5.15.9-2/bin/activemq start
    3 /opt/activemq/apache-activemq-5.15.9-3/bin/activemq start

    4,查看activeMQ主从

    进入zookeeper,${zkHome}/bin/zkCli.sh

    连接成功后,可以使用命令‘ls’查看ZooKeeper 中的目录结构
    如:
      ls /
      ls /activemq/leveldb-stores
    找到对应的内容后,可以使用命令‘get’查看ZooKeeper 中的数据内容
      get /activemq/leveldb-stores/00000000000

      其中主节点的elected 及address 属性一定有数据。从节点则数据为‘null’

      该zookeeper+activemq的集群Master Slave部署方案,能够提供(3-1)/2的容错率,即3台服务器允许宕机一台,而不影响整个集群的对外提供服务:

    编写代码连接时使用failover策略:

    1 String url = failover:(tcp://192.168.50.30:61616,tcp://192.168.50.30:61617,tcp://192.168.50.30:61618)?initialReconnectDelay=1000

    二、集群模式

       准备多份主从模型。在所有的ActiveMQ节点中的conf/activemq.xml中增加如下配置(每个主从模型中的networkCoonnector都指向另一个主从模型)

    1 <networkConnectors>
    2     <networkConnector uri="static://(tcp://ip:port,tcp://ip:port)" duplex="false"></networkConnector>
    3 </networkConnectors>

      注意配置顺序,Networks相关配置必须在持久化相关配置之前

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://activemq.apache.org/schema/core">
     3     <broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}" >
     4         <networkConnectors>
     5             <networkConnector uri=" static://(tcp://ip:port,tcp://ip:port)"/>
     6         </networkConnectors>
     7         <persistenceAdapter>
     8             < replicatedLevelDB directory = "xxx"/>
     9         </persistenceAdapter>
    10     </broker>
    11 </beans>

    主从模型:1-192.168.50.30   主从模型2-192.168.50.31

    在主从模型1的所有节点activemq.xml配置文件中添加标签:

    1 <networkConnectors>
    2     <networkConnector uri="static://(tcp://192.168.50.31:61616,tcp://192.168.50.31:61617)"/>
    3 </networkConnectors>

    在组从模型2的所有节点activemq.xml中配置文件添加标签:

    1 <networkConnectors>
    2     <networkConnector uri="static://(tcp://192.168.50.30:61616,tcp://192.168.50.30:61617)"/>
    3 </networkConnectors>

  • 相关阅读:
    吴裕雄--天生自然 JAVASCRIPT开发学习:函数定义
    吴裕雄--天生自然 JAVASCRIPT开发学习: JSON
    吴裕雄--天生自然 JAVASCRIPT开发学习: this 关键字
    吴裕雄--天生自然 JAVASCRIPT开发学习: 验证 API
    吴裕雄--天生自然 JAVASCRIPT开发学习: 表单验证
    吴裕雄--天生自然 JAVASCRIPT开发学习: 表单
    吴裕雄--天生自然 JAVASCRIPT开发学习: 变量提升
    吴裕雄--天生自然 JAVASCRIPT开发学习: 错误
    【codeforces 742A】Arpa’s hard exam and Mehrdad’s naive cheat
    【codeforces 742B】Arpa’s obvious problem and Mehrdad’s terrible solution
  • 原文地址:https://www.cnblogs.com/guanghe/p/10999302.html
Copyright © 2020-2023  润新知