消息队列--ActiveMQ集群部署
一、activeMQ主要的部署方式?
1,默认的单机部署(kahadb)
activeMQ默认的存储单机模式,如果配置文件不做修改,则默认使用此模式。以本地的kahadb文件的方式进行存储,性能完全依赖本地磁盘,不能提供高可用。
2,基于zookeeper主从模式(levelDB Master/Slave)
基于zookeeper来选举一个master,其他节点作为slave实时同步消息,levelDB会优先采用内存存储消息,异步同步到磁盘。该方式读写性能都较好,写性能能媲美非持久化消息。
优点:实现高可用和数据安全,性能较好。
缺点:由于zookeeper的选举机制,必须要使用2n+1(n>=1)的节点,才能实现高可用。
3,基于共享数据库的主从模式(Shared JDBC Master/Slave)
可以基于常用的mysql,mariadb,oracle等数据库。
每个节点启动都会争抢数据库锁,从而保证master的唯一性,其他节点作为备份,一直等待数据库锁的释放。
因为所有消息读写,其实都是数据库操作,activeMQ节点本身压力很小,性能完全取决于数据库性能。
优点:实现高可用和数据安全,一般两个节点就可以实现高可用。
缺点:性能和稳定性都依赖于数据库。
二、基于zookeeper的activeMQ单台服务器集群部署
1,环境需求
Centos7系统,java环境(jdk),zookeeper安装包,activeMQ安装包
2,部署jdk环境
jdk安装包下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

上面这个是最新版的,我使用的是jdk-8u121-linux-x64.tar.gz。
2.1 上传压缩包到服务器,在当前有压缩包的目录下进行操作。
2.2 创建文件夹
mkdir /application
2.3 解压压缩包(根据你自己的包名进行修改)
tar xf jdk-8u121-linux-x64.tar.gz -C /application/
2.4 创建软链接(根据你自己的包名进行修改)
ln -s /application/jdk1.8.0_121/ /application/jdk
2.5 配置环境变量
vim /etc/profile
在最后面添加这么几行:
export JAVA_HOME=/application/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
2.6 使环境变量生效
source /etc/profile
2.7 查看jdk配置情况
命令行输入 java -version 显示:

则配置成功。
3,安装zookeeper单机集群
3.1 获取zookeeper安装包
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
3.2 安装配置(配置3个)
3.2.1 生成3个文件
tar xf zookeeper-3.4.14.tar.gz -C /usr/local/zookeeper1
tar xf zookeeper-3.4.14.tar.gz -C /usr/local/zookeeper2
tar xf zookeeper-3.4.14.tar.gz -C /usr/local/zookeeper3
3.2.2 修改 zookeeper1 的配置文件(我的内网地址是172.16.1.8)
cd /usr/local/zookeeper1/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
将文件里面的内容清空,后加入以下内容
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper1/data 文件存放位置
clientPort=2181 端口
server.1=172.16.1.8:2881:3881 第一个节点IP和端口(使用内网)
server.2=172.16.1.8:2882:3882 第二个节点IP和端口
server.3=172.16.1.8:2883:3883 第三个节点IP和端口
3.2.3 创建 zookeeper1 的 myid 文件
cd /usr/local/zookeeper1
mkdir data
echo "1" > /usr/local/zookeeper1/data/myid
3.2.4 修改 zookeeper2 的配置文件
cd /usr/local/zookeeper2/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
将文件里面的内容清空,后加入以下内容
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper2/data 文件存放位置
clientPort=2182 端口
server.1=172.16.1.8:2881:3881 第一个节点IP和端口(使用内网)
server.2=172.16.1.8:2882:3882 第二个节点IP和端口
server.3=172.16.1.8:2883:3883 第三个节点IP和端口
3.2.5 创建 zookeeper1 的 myid 文件
cd /usr/local/zookeeper2
mkdir data
echo "2" > /usr/local/zookeeper2/data/myid
3.2.6 修改 zookeeper3 的配置文件
cd /usr/local/zookeeper3/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
将文件里面的内容清空,后加入以下内容
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper3/data 文件存放位置
clientPort=2183 端口
server.1=172.16.1.8:2881:3881 第一个节点IP和端口(使用内网)
server.2=172.16.1.8:2882:3882 第二个节点IP和端口
server.3=172.16.1.8:2883:3883 第三个节点IP和端口
3.2.7 创建 zookeeper1 的 myid 文件
cd /usr/local/zookeeper3
mkdir data
echo "3" > /usr/local/zookeeper3/data/myid
3.2.8 启动zookeeper集群
/usr/local/zookeeper1/bin/zkServer.sh start
/usr/local/zookeeper2/bin/zkServer.sh start
/usr/local/zookeeper3/bin/zkServer.sh start
3.2.9 查看zookeeper集群状态
/usr/local/zookeeper1/bin/zkServer.sh status


其中,follower是跟随者,leader为领导者。
4,部署单台服务器activeMQ集群
4.1 下载activeMQ安装包
下载地址为:http://mirror.bit.edu.cn/apache//activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz
4.2 创建3个文件目录(3个)
tar xf apache-activemq-5.15.9-bin.tar.gz
cp -r apache-activemq-5.15.9 /application/activemq1
cp -r apache-activemq-5.15.9 /application/activemq2
cp -r apache-activemq-5.15.9 /application/activemq3
4.3 分别修改 activemq1、activemq2、activemq3的配置文件
4.3.1 修改 activemq1、activemq2、activemq3的 jetty.xml 文件
vim /application/activemq1/conf/jetty.xml

vim /application/activemq2/conf/jetty.xml

vim /application/activemq3/conf/jetty.xml

4.3.2 修改 activemq1、activemq2、activemq3的 activemq.xml 文件
vim /application/activemq1/conf/activemq.xml
将 <persistenceAdapter> 文件的内容修改成以下内容:

将 <transportConnectors> 文件中的url修改,如果一样则无需修改

3个配置文件中的brokeName一定要一致(3个文件都要修改)

vim /application/activemq2/conf/activemq.xml
将 <persistenceAdapter> 文件的内容修改成以下内容:

将 <transportConnectors> 文件中的url修改,如果一样则无需修改

vim /application/activemq3/conf/activemq.xml
将 <persistenceAdapter> 文件的内容修改成以下内容:

将 <transportConnectors> 文件中的url修改,如果一样则无需修改

4.3.3 启动集群(那个先启动,就是Master)
/application/activemq1/bin/activemq start
/application/activemq2/bin/activemq start
/application/activemq3/bin/activemq start
4.3.4 查看启动日志
tail -fn 100 /application/activemq1/data/activemq.log
master启动:

slave启动:

登录服务器验证:
输入公网ip,加master端口访问:

消息队列--ActiveMQ集群部署的更多相关文章
- 13张PPT带你了解主动式消息队列处理集群
前言 偷偷和你们说,我搞了一份内部资料,该内部资料共有13张PPT,据作者透露,该PPT至少花了整整1周时间才编写完成,其内容简洁明了,内容深度足够,易于初学者理解,也给深度开发人员分享了不一样的消息 ...
- 消息队列kafka集群搭建
linux系统kafka集群搭建(3个节点192.168.204.128.192.168.204.129.192.168.204.130) 本篇文章kafka集群采用外部zookeeper,没采 ...
- ActionMQ集群部署
ActiveMQ集群部署 一.应用场景 消息中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构.是大型分布式系统不可缺少的中间件.目 ...
- Dubbo入门到精通学习笔记(十四):ActiveMQ集群的安装、配置、高可用测试,ActiveMQ高可用+负载均衡集群的安装、配置、高可用测试
文章目录 ActiveMQ 高可用集群安装.配置.高可用测试( ZooKeeper + LevelDB) ActiveMQ高可用+负载均衡集群的安装.配置.高可用测试 准备 正式开始 ActiveMQ ...
- ActiveMQ集群整体认识
出自:https://segmentfault.com/a/1190000014592517 前言 最终需要掌握 Replicated LevelDB Store部署方式,这种部署方式是基于ZooKe ...
- RabbitMQ消息队列(十)-高可用集群部署实战
前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. RabbitMQ集群基本概念 Rabbit模式大概分为以下三种 ...
- (十)RabbitMQ消息队列-高可用集群部署实战
原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...
- centos6下ActiveMQ+Zookeeper消息中间件集群部署记录
由于最近一个项目并发请求压力比较大,所以考虑改进架构,引入消息中间件集群作为一个缓冲消息队列,具体需求:1)将大量的WebService请求报文发送到mq集群之中,并保持消息先后顺序2)保证每个消息的 ...
- ActiveMQ伪集群部署
本文借鉴http://www.cnblogs.com/guozhen/p/5984915.html,在此基础上进行了完善,使之成为一个完整版的伪分布式部署说明,在此记录一下! 一.本文目的 介绍如何在 ...
随机推荐
- Elasticsearch(3):别名
ES中可以为索引添加别名,一个别名可以指向到多个索引中,同时在添加别名时可以设置筛选条件,指向一个索引的部分数据,实现在关系数据库汇总的视图功能,这就是ES中别名的强大之处.别名是一个非常实用的功 ...
- Redis安装使用以及可能的算法实践
layout: post title: 2017-12-05-Redis 入门 tags: - Redis - 实时特征 - UCB, Tompson sampling Redis 是什么? Redi ...
- 多测师讲解pyhon__hashlib_高级讲师肖sir
一.加密,加密成16进制的字符串 # import hashlib # 导入hashlib模块# md = hashlib.md5() # 获取一个md5加密算法对象# md.update('需要加密 ...
- 【python】python返回结果多了none(递归时)
把每个返回值的print使用return替代即可 例子: def trim(s): if s[:1]==" ": s=s[1:] retrim(s) elif s[-1:]==&q ...
- c3算法
# L(G) = [G] + [O] # G = [O] # = GO # L[E] = EO # L[F] = [F] + [GO] # F = [GO] # = FGO # L[B] = [B] ...
- c++ 通用单例类声明
//单例类定义#define CLASS_INSTANCE_DEF(className) \public: \ static className* GetInstance() \ { \ static ...
- 运行bee run之后出现的错误以及解决方法Failed to build the application:
运行bee run之后出现的错误以及解决方法 创建一个beego项目 bee new myapp 在该项目执行下面的代码 bee run 出现的问题 2020/04/22 21:12:07 INF ...
- 深入理解Java的抽象类和接口
对于面向对象来说,抽象是其重要特征之一.对于之中的抽象类和接口,两者有很多相似的地方,又有两者之间区别的地方. 用几个简单的例子让你快速的理解两者之间的概念和区别 鸣谢 一.抽象类 在了解抽象类之前, ...
- 020_Typora使用
目录 Typora使用 下载 安装 设置 使用 Typora使用 Typora插入本地图片为本地路径,网络上无法查看,所以建议只插入网络图片. 下载 百度搜索官网 下载 安装 设置 视图->显示 ...
- vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录
一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...