ZooKeeper+ActiveMQ能够实现主从模式和集群模式apache
Master-Slave主从模式是一种高可用解决方案,在Zookeeper中注册若干ActiveMQ Broker,其中只有一个Broker提供对外服务(Master),其余Broker处于待机状态(Slave)。当Master出现故障致使宕机时,经过Zookeeper内部的选举机制,选举出一台Slave替代Master继续对外服务。服务器
1,安装zookeeper并建立data数据目录tcp
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,复制出三个zookeeperurl
4,在每一个Zookeeper 应用内的data 目录中增长文件myid内部定义每一个服务的编号. 编号要求为数字,是正整数能够使用回声命名快速定义myid文件spa
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,启动zookeepercode
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集群server
链接一个zookeeper,实际上就链接上了整个zookeeper集群。xml
1 /opt/zookeeper/apache-zookeeper-3.5.5-1/bin/zkCli.sh -server 192.168.50.30:2181
1,复制三份ActiveMQ,配置conf/jetty.xml中端口为816一、816二、8163blog
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 属性中的端口为主从实例之间的通信端口。表明当前实例对外开放端口是什么,三个实例分别使用6262六、6262七、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。当前环境使用的端口为:6161六、6161七、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>