ActiveMQ+ZooKeeper搭建高可用集群
一、说明
实际的应用中,一般为了应用的高可用性,都会搭建集群环境去处理。部署多台应用,这样,即使一台有问题,其他热备应用可以立马顶上,继续提供服务。
ActiveMQ的集群部署,基于zookeeper的应用程序协调服务和levelDB的持久化方案。
本文中,基于一个系统环境,搭建伪集群模式,通过不同端口的配置,达到集群安装的效果。
基本环境:jdk-7u80-linux-x64.tar.gz、Centos 6.9、zookeeper-3.4.12.tar.gz、apache-activemq-5.9.1-bin.tar.gz、Xshell。
应用部署:zookeeper启动3个应用实例,ActiveMQ部署3套应用实例,构成最小单元的集群部署
其中zookeeper的集群搭建,参见之前文章:https://www.cnblogs.com/eric-fang/p/9283904.html
二、ActiveMQ的集群配置
ActiveMQ的主从模型,是一种高可用的解决方案,在zookeeper中注册若干的ActiveMQ Broker,其中只有一台作为主机master对外提供服务,其他作为备份slave保持待机。当master出现问题导致宕机不能正常提供服务的时候,zookeeper通过内部选举,在众多slave中推举出一台作为master继续对外提供服务。
1、安装ActiveMQ
上传apache-activemq-5.9.1-bin.tar.gz至linux,解压,然后修改拷贝,整出三份应用实例:

2、修改配置
2.1、修改服务端口(activemq.xml)
分别修改对外提供的openwire服务端口为61616、61617、61618。待修改的地方如下:
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
2.2、修改持久化策略(activemq.xml)
修改 persistenceAdapter 标签中的内容,其中相关属性说明如下:
replicas - 当前主从模型中的节点数,根据实际配置
bind - 主从实例间的通讯端口。分别配置为62626、62627、62628
zkAddress - zookeeper应用的安装位置
zkPath - ActiveMQ的主从信息保存在zookeeper中的什么目录
hostname - ActiveMQ实例安装的实际linux主机名。可在 /etc/hosts 中进行配置,设置格式:ip 主机名,例如127.0.0.1 mq-server
<persistenceAdapter>
<replicatedLevelDB
directory="${activemq.data}/levelDB"
replicas="3"
bind="tcp://0.0.0.0:62626"
zkAddress="172.17.0.4:2181,172.17.0.4:2182,172.17.0.4:2183"
zkPath="/activemq/leveldb-stores"
hostname="mq-server"
/>
</persistenceAdapter>
2.3、修改broker标签属性(activemq.xml)
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}">
所有的主从节点,上述的brokerName必须一致。
2.4、修改控制台访问端口(jetty.xml)
分别修改jetty的访问端口为:8161、8162、8163
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="port" value="8161"/>
</bean>
2、启动ActiveMQ应用
配置完成后,分别启动3个ActiveMQ应用,启动命令:${activemq-home}/bin/activemq start。启动后,可以jps看是否存在,也可以查看日志文件,日志目录:${activemq-home}/data/activemq.log
3、查验ActiveMQ的状态
可以在zookeeper中查验ActiveMQ的主从状态
3.1、${zookeeper-home}/bin/zkCli.sh

3.2、ls /activemq/leveldb-stores 查看ActiveMQ节点注册信息。

3.3、get /activemq/leveldb-stores/000000000037 可以查验当前哪台ActiveMQ作为主机提供服务,其中主节点的address和elected一定非null,有数据。

三、集群的使用
ActiveMQ使用的时候,就是在设置brokerURL的时候,设置为失败转移即可:
failover:(tcp://111.231.51.200:61616,tcp://111.231.51.200:61617,tcp://111.231.51.200:61618)?initialReconnectDelay=1000
四、可能遇到问题
配置过程中个,3个 zk 应用和3个 ActiveMQ应用启动正常,从 zk 中查看ActiveMQ的主从也选举OK,但是,在访问ActiveMQ控制台以及发送消息的时候,就是不通。查看端口占用的,ActiveMQ提供服务的应用端口居然也没有正常监听。查看从应用的日志( ${activemq-home/data/activemq.log} ),发现一直报错:

看错误,未知主机错误。解决办法:vi /etc/hosts
增加配置:127.0.0.1 cfang
再回头查看日志,下面不会继续报错,正常组成主从,主服务端口监听正常。

ActiveMQ+ZooKeeper搭建高可用集群的更多相关文章
- Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.nginx 原理与优化参数配置 master-workers 的机制的好处 首先,对于每个 ...
- CentOS 7下搭建高可用集群
一 .安装集群软件 必须软件pcs,pacemaker,corosync,fence-agents-all,如果需要配置相关服务,也要安装对应的软件. 二.配置防火墙1.禁止防火墙和selinux# ...
- Hadoop-HA 搭建高可用集群Hadoop Zookeeper
Hadoop Zookeeper 搭建(一) 一.准备工作 VMWARE虚拟机 CentOS 7 系统 虚拟机1:master 虚拟机2:node1 虚拟机3:node2 时间同步 ntpdate n ...
- keepalive + nginx 搭建高可用集群动态网站
环境准备: 两台节点部署keepalived,并且设为互为主从,实现高可用. 两台从节点部署nginx以及相关组件,作为真实服务器实现动态网站上线. 一.MASTER(BACKUP)节点下载keepa ...
- 基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群二 搭建高可用集群
1. 部署keepalived - apiserver高可用(任选两个master节点) 1.1 安装keepalived # 在两个主节点上安装keepalived(一主一备) $ yum inst ...
- 用kubeadm 搭建 高可用集群问题记录和复盘整个过程 - 通过journalctl -u kubelet.service命令来查看kubelet服务的日志
1.根据 https://github.com/cookeem/kubeadm-ha/blob/master/README_CN.md 去搭建ha集群,遇到几个问题: runtime networ ...
- [图文][提供可行性脚本] CentOS 7 Fencing+Pacemaker三节点搭建高可用集群
实验说明: 实验环境: 宿主机系统 :Fedora 28 WorkStation 虚拟机管理器 :Virt-Manager 1.5.1 虚拟机配置 :ha1 CentOS 7.2 1511 ...
- 使用kubeadm 搭建高可用集群 多master
很快很简单 只要三分钟就能看完 三台服务器 k8s-vip 负载均衡器 k8s-master1 主节点一 k8s-master2 主节点一 官方文档 首先搭建负载均衡器 用的Haproxy yum ...
- PXC 搭建高可用集群
(1).PXC集群注意事项 1.PXC集群只支持innodb引擎 2.
随机推荐
- idea打开eclipse项目并部署至tomcat
前言:因为遇到了用idea打开eclipse项目并配置外置tomact的场景,经过实验也成功了,所以特地来记录一下. 导入eclipse项目 这里我们导入的eclipse下开发的maven项目,直接点 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)
定场诗 伤情最是晚凉天,憔悴厮人不堪言: 邀酒摧肠三杯醉.寻香惊梦五更寒. 钗头凤斜卿有泪,荼蘼花了我无缘: 小楼寂寞新雨月.也难如钩也难圆. 前言 本章为重读<学习JavaScript数据结构 ...
- AR+工业,带来哪些革变呢?
随着技术的普及相信大家对VR和AR也略有所知,尤其是AR增强现实技术,已经成为许多科技巨头企业争相扩疆的热土,目前来说,AR技术最广泛的应用是工业领域,已经显示出巨大的价值. ...
- com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: con ...
- 使用JDBC驱动程序处理元数据
使用 JDBC 驱动程序处理元数据 一.前言 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列 ...
- Leetcode之深度优先搜索(DFS)专题-1080. 根到叶路径上的不足节点(Insufficient Nodes in Root to Leaf Paths)
Leetcode之深度优先搜索(DFS)专题-1080. 根到叶路径上的不足节点(Insufficient Nodes in Root to Leaf Paths) 这篇是DFS专题的第一篇,所以我会 ...
- A-The power of Fibonacci_2019牛客暑期多校训练营(第九场)
题意 求\(\sum_0^n{Fb}_i^m \mod (1e9)\) 题解 模1e9时的斐波那契数列循环节太大,考虑把模数质因数分解成\(2^9\cdot5^9\),此时循环节变成768和78125 ...
- bzoj 4025 二分图 lct
题目传送门 题解: 首先关于二分图的性质, 就是没有奇环边. 题目其实就是让你判断每个时段之内有没有奇环. 其次 lct 只能维护树,(反正对于我这种菜鸟选手只会维护树), 那么对于一棵树来说, 填上 ...
- 【Offer】[57-2] 【和为S的连续正数序列】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数).例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以 ...
- 【Offer】[3-2] 【不修改数组找出重复的数字】
题目描述 思路分析 Java代码 代码链接 题目描述 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的. 请找出数组中任意一个重复的数字,但不能修改输入的数组. ...