搭建 activemq 集群服务

zookeeper 实现的 Master-Slave 高可用

Zookeeper 实现的 Master-Slave,是对 activemq 进行高可用的一种有效的解决方案,高可用原理: 使用 Zookeeper(集群) 注册所有的 ActiveMQ Broker。 只有其中一个的 Broker 可以对外提供服务(也就是 master 节点), 其他的 Broker 处于待机状态, 被视为 Slave。 如果 Master 因故障而不能提供服务,则利用 Zookeeper 的内部选举机制会从 Slave 中选举出一个 Broker 充当 Master 节点,继续对外提供服务。

配置:Zookeeper集群 + (一主两从 activemq) (注: 也可以是 一主四从, 保持奇数个 activemq 即可)

搭建例子 zookeeper(一主两从) + activemq (一主两从)

  1. 操作 zookeeper

    1. 规划
        ip 192.168.1.121 192.168.1.122 192.168.1.123 (三台linux主机)
        消息端口 2181
        通信端口 2888:3888
        下面的操作要操作到三台主机上
    2. 将 zookeeper-**.tar.gz 解压到 /usr/local/ 目录的 zookeeper 
        1. tar -zxvf zookeeper-**.tar.gz -zxvf -C /usr/local/
        2. mv zookeeper-** zookeeper
    3. 配置环境变量
        vi /etc/profile
        增加更新下面两个变量
        export ZOOKEEPER_HOME=/usr/local/zookeeper
        export PATH=.:$ZOOKEEPER_HOME/home:$PATH
        修改后生效一下
        source /etc/profile
    4. 配置zookeeper
        1. cd /usr/local/zookeeper/conf
        2. cp zoo_sample.cfg zoo.cfg
        3. vi zoo.cfg
        4. 修改如下内容
            1. dataDir=/usr/local/zookeeper/data
        5. 添加如下内容
            1. server.0=192.168.1.121:2888:3888
            2. server.1=192.168.1.122:2888:3888
            3. server.2=192.168.1.123:2888:3888
        6. mkdir -p /usr/local/zookeeper/data
        7. vim /user/local/zookeeper/data/myid     (在 192.168.1.121 中写入0保存退出,在 192.168.1.122 中写入1保存退出,在 192.168.1.122 中写入2保存退出)
    5. 运行zookeeper
        1. cd /usr/local/
        2. zkServer.sh start
    6. 查看zookeeper运行状态 zkServer.sh status (一台 Leader 两台 Follower)
    
    
  2. 操作 ActiveMQ

    ## 一主两从 activemq 部署在同一台机器上,端口不一样
    1. 规划
        ip: 192.168.1.111 192.168.1.111 192.168.1.111 
        集群通信端口: 62621 62622 62623
        消息端口: 51511 51512 51513
        控制台端口: 8161 8162 8163
    2. 解压 activemq 到集群目录
        1. cd /usr/local/
        2. mkdir activemq-cluster
        3. tar -zxvf apache-activemq-**.tar.gz -C /usr/local/activemq-cluster/
        4. cd /usr/local/activemq-cluster
        5. mv apache-activemq-** node1
        6. cp -r node1 node2
        7. cp -r node1 node3
    3. 配置activemq
        1. 修改网页控制台端口
            1. vim /usr/local/activemq-cluster/node1/conf/jetty.xml
            2. 找到 jettyPort 将port值从 8161 改为8161(node1) 8162(node2) 8163(node3)
        2. 修改 activemq.xml
            1. vim /usr/local/activemq-cluster/node1/conf/activemq.xml
            2. 修改如下内容
            3. <broker>节点中的 brokerName="activemq-cluster" (名字可改成其他的)
            4. 将 kahadb 改为 leveldb (注 下面的62621 在node2(62622) node3(62623))
                <persistenceAdapter>
                    <!-- <kahaDB directory="${activemq.data}/kaha" /> -->
                    <replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp:/0.0.0.0:62621" zkAddress="192.168.1.121:2181,192.168.1.122.2182,192.168.1.123:2183" hostname="altman111" zkPath="/activemq/leveldb-stores" />
                </persistenceAdapter>
            5. 修改与java通信端口 51511 (node2(51512) node3(51513))
                <transportConnector> 节点的 tcp 协议 从 61616 改为 51511
    4. 运行zookeeper
        1. /usr/local/activemq-cluster/node1/bin/activemq start
        2. /usr/local/activemq-cluster/node2/bin/activemq start
        3. /usr/local/activemq-cluster/node3/bin/activemq start
    5. 查看日志信息 验证是否成功启动
        1. tail -f /usr/local/activemq-cluster/node1/data/activemq.log
        2. tail -f /usr/local/activemq-cluster/node2/data/activemq.log
        3. tail -f /usr/local/activemq-cluster/node3/data/activemq.log
    
    
  3. 验证 zookeeper + activemq ok

    1. 在 192.168.1.121 192.168.1.122 192.168.1.123 任一台登录 zookeeper,输入命令 zkCli.sh
    2. 输入 ls / 看到多了一个 节点 activemq , ls /activemq/leveldb-stores 可以看到三个数据(0000000000,0000000001,0000000002) 说明activemq主从已经注册到zookeeper (可以查看一下这三个节点的内容 get /activemq/leveldb-stores/0000000000 如果看到里面的 address 和 elected 有值,说明这个节点是activemq主节点, 如果为null,说明是activemq从节点)
  4. 停止服务,分别关闭每个 activemq、zookeeper节点

    1. /usr/local/activemq-cluster/node*/bin/activemq stop
    2. (每台主机) zkServersh.sh

负载均衡配置

集群1 在192.168.1.121 使用端口区分,部署一主两从
集群2 在192.168.1.122 使用端口区分,部署一主两从

配置文件 : /usr/local/activemq-cluster/node*/conf/activemq.xml
配置位置 : 放在 <PersistenceAdapter> 节点之前 


## 集群1连接集群2
<networkConnectors>
    <networkConnector uri="static:(tcp://192.168.1.122:51514,tcp://192.168.1.122:51515,tcp://192.168.1.122:51516)" duplex="false" />
</networkConnectors>

## 集群2连接集群1
<networkConnectors>
    <networkConnector uri="static:(tcp://192.168.1.121:51511,tcp://192.168.1.121:51512,tcp://192.168.1.121:51513)" duplex="false" />
</networkConnectors>

如果还有集群3,则在<networkConnectors> 中再添加一个 子节点 <networkConnector ... />