(1)zookeeper与activemq原理

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

(2)环境

  • centos版本
#cat /etc/redhat-release
CentOS release 6.5 (Final)
  • 关闭selinux和iptables防火墙配置
sed -ri '/^SELINUX=/cSELINUX=disable' /etc/selinux/config
setenforce 0
iptables -I INPUT 1 -s 192.168.92.0/24 -j ACCEPT
service iptables save
  • zookeeper环境
主机IP                 消息端口        通信端口        节点目录/usr/local/下
192.168.92.134 2181 2888:3888 zookeeper
192.168.92.135 2181 2888:3888 zookeeper
192.168.92.136 2181 2888:3888 zookeeper
  • activemq环境
主机IP                         消息端口      控制台端口          节点目录/usr/local/下
192.168.92.134 61616 8161 activemq
192.168.92.135 61616 8161 activemq
192.168.92.136 61616 8161 activemq

(3)安装zookeeper

1)基本配置

#node1配置:192.168.92.134
[ -d /tools ] || mkdir /tools
cd /tools
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
tar xf zookeeper-3.3.6.tar.gz -C /usr/local/
ln -sv /usr/local/zookeeper-3.3.6/ /usr/local/zookeeper
mkdir /usr/local/zookeeper/{data,log}
echo 1 >/usr/local/zookeeper/data/myid
echo "export PATH=/usr/local/zookeeper/bin:$PATH" >>/etc/profile ; source /etc/profile
###############################################################################
#node2配置:192.168.92.135
[ -d /tools ] || mkdir /tools
cd /tools
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
tar xf zookeeper-3.3.6.tar.gz -C /usr/local/
ln -sv /usr/local/zookeeper-3.3.6/ /usr/local/zookeeper
mkdir /usr/local/zookeeper/{data,log}
echo 2 >/usr/local/zookeeper/data/myid
echo "export PATH=/usr/local/zookeeper/bin:$PATH" >>/etc/profile ; source /etc/profile
###############################################################################
#node3配置:192.168.92.136
[ -d /tools ] || mkdir /tools
cd /tools
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
tar xf zookeeper-3.3.6.tar.gz -C /usr/local/
ln -sv /usr/local/zookeeper-3.3.6/ /usr/local/zookeeper
mkdir /usr/local/zookeeper/{data,log}
echo 3 >/usr/local/zookeeper/data/myid
echo "export PATH=/usr/local/zookeeper/bin:$PATH" >>/etc/profile ; source /etc/profile

2)修改配置文件:三台节点的配置相同

cd /usr/local/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
#vim zoo.cfg
clientPort=2181
server.1=192.168.92.134:2888:3888
server.2=192.168.92.135:2888:3888
server.3=192.168.92.136:2888:3888
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log

3)三台节点启动zookeeper

zkServer.sh start
ss -anltup | grep 2181
# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.3.6/bin/../conf/zoo.cfg
Mode: follower
zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.3.6/bin/../conf/zoo.cfg
Mode: leader

(4)安装和配置activemq

1)安装activemq

cd /tools
wget https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.15.3/apache-activemq-5.15.3-bin.tar.gz
tar xf apache-activemq-5.15.3-bin.tar.gz -C /usr/local/
ln -sv /usr/local/apache-activemq-5.15.3/ /usr/local/activemq
echo "export PATH=$PATH:/usr/local/activemq/bin" >>/etc/profile;source /etc/profile

2)修改配置文件

cp /usr/local/activemq/conf/activemq.xml{,.bak}
  • 修改配置文件内容如下
#vim /usr/local/activemq/conf/activemq.xml
注释一下内容:
<!--
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
-->
修改内容如下:三台主机的hostname各种修改成自己的ip地址即可
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:0"
zkAddress="192.168.92.134:2181,192.168.92.135:2181,192.168.92.136:2181"
zkPassword="redhat"
hostname="192.168.92.134"
sync="local_disk"
zkPath="/activemq/leveldb-stores" />
</persistenceAdapter>
修改brokerName:三台服务器必须要一样
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq" dataDirectory="${activemq.data}">
  • 启动activemq
activemq start

最新文章

  1. Python目录
  2. visual studio错误解决 [error LNK1104: 无法打开文件“gdi32.lib”]
  3. matlab函数_连通区域
  4. [Maven]Eclipse插件之Maven配置及问题解析.
  5. 如何确定C#代码是在编译时执行还是在运行时执行
  6. JS页面间传值
  7. Plus One @LeetCode
  8. 编码错误设置错误报 &quot;SyntaxError: Non-ASCII character &#39;/xe6&#39; &quot;
  9. wamp虚拟机配置
  10. class 类(2)
  11. 使用react-native做一个简单的应用-03欢迎界面
  12. Java虚拟机类型卸载和类型更新解析(转)
  13. pickle.dump()
  14. PostMessage 向Windows窗口发送Alt组合键
  15. Django 模型层
  16. c# 通过MailHelper发送QQ邮件
  17. FineUIMvc随笔(2)怎样在控件中嵌套 HTML
  18. keepalived高可用配置注意事项
  19. SpringBoot2 【关于:Table &#39;XXX.hibernate_sequence&#39; doesn&#39;t exist】
  20. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(六)GameplayEffect的级别设置

热门文章

  1. delphi如何模块内部获得自身路径ExtractFilePath和paramstr(0)
  2. 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)
  3. P1419 寻找段落
  4. [洛谷P1640][SCOI2010]连续攻击游戏
  5. Treap 模板
  6. Educational Codeforces Round 54 (Rated for Div. 2) ABCD
  7. angular js 模拟获取后台的数据
  8. Hibernate 三种状态变化 与 sql 语句的关系
  9. MyEclipse中代码提醒功能
  10. IDEA的常用快捷键