赞
踩
RocketMQ是一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。rocketmq主要由4大核心部分组成:Nameserver(名称服务器)、Broker(消息服务器)、Producer(生产者)、Consumer(消费者)。
一、环境准备
根据业务需要安装好相应JDK版本,本次安装部署使用麒麟系统自带openjdk-1.8
二、下载rocketmq(下载地址:https://archive.apache.org/dist/rocketmq/4.9.4/)
三、单机部署
1、解压
- unzip rocketmq-all-4.9.4-bin-release.zip # 解压压缩包
- mv rocketmq-all-4.9.4-bin-release /usr/local/rocketmq # 将解压之后的压缩包移动到/usr/local下并重命名为rocketmq
2、启动Name Server
- cd /usr/local/rocketmq/
- nohup sh bin/mqnamesrv & # 后台启动name server
- tail -f ~/logs/rocketmqlogs/namesrv.log # 查看启动日志
3、启动broken,此时会发现broker无法启动,进程直接退出,也无启动日志生成,查询得知RocketMQ启动对内存要求较高,此次是虚拟机演示,所有需要调整rocketmq默认JVM大小
- nohup sh ./mqbroker -n localhost:9876 & # 后台启动broker
- tail -f ~/logs/rocketmqlogs/broker.log # 查看broker启动日志
4、调整rocketmq的JVM大小
在RocketMQ的安装目录(本例为/usr/local/rocketmq/bin),查找sh脚本中的JVM参数设置:
- # 修改runserver.sh文件
- vim runserver.sh
-
- # 找到如下配置
- {JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
- # 修改成你可以接受的范围
- JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
- # 修改runbroker.sh文件
- vim runbroker.sh
- # 找到如下配置
- JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
- # 修改成你可以接受的范围
- JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g"

修改文件后即可重复第3步的操作,即可启动broker
5、测试mq消息,开启两个窗口,窗口1生产消息,窗口2消费消息
- # 窗口1
- export NAMESRV_ADDR=localhost:9876 # 配置临时环境变量,指明nameserver服务地址端口
- sh ./tools.sh org.apache.rocketmq.example.quickstart.Producer # 生产消息
-
- # 窗口2
- export NAMESRV_ADDR=localhost:9876 # 配置临时环境变量,指明nameserver服务地址端口
- sh ./tools.sh org.apache.rocketmq.example.quickstart.Consumer # 消费消息
6、退出服务(/usr/local/rocketmq/bin下执行)
- sh mqshutdown broker
- sh mqshutdown namesrv
四、集群部署
rocketmq集群部署主要指的是broker(消息服务器)的集群部署,当然NameServer(名称服务器)也能部署成集群,但其在设计之初被设计成几乎无状态的,可以横向扩展,节点与节点相互之间无通信,一般也可部署多台机器来标记为一个伪集群。
1、broker集群部署方式包含三种:
1.1、多Master无Slave(对应配置文件:2m-noslave):所有消息服务器都是Master,没有Slave。优点:配置简单,单个Master宕机或重启时对应用无影响;缺点:宕机期间,该机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受影响。
1.2、多Master多Slave(异步复制)(对应配置文件:2m-2sasync):每个Master配置一个Slave,消息采用异步复制方式,主备之间有毫秒级消息延迟。优点:消息丢失非常少,消息实时性不会受到影响,master宕机期间,消费者仍然可以从slave中订阅消息。缺点:master宕机,磁盘损坏的情况下会少量消息丢失(异步处理,在未同步消息的时候主机宕机,造成数据不同步丢失问题)
1.3、多Master多Slave(同步双写)(对应配置文件:2m-2s-sync):优点:数据与服务没有单点问题,Master宕机消息无延迟,服务与数据可用性高;缺点:性能相对异步复制方式略低,消息延迟略高。
2、本次虚拟机演示多master多slave同步模式
2.1、配置系统环境变量,编辑/etc/profile文件,添加如下,添加完成后,执行:source /etc/profile 刷新配置文件
2.2、集群环境:
192.168.231.232 nameserver:9876 brokerserver master1:10911(broker-a.proerties) slave2:11011(broker-b-s.properties)
192.168.231.231 brokerserver master2:10911(broker-b.properties) slave1:11011(broker-a-s.properties)
2.3、修改相应节点配置文件,如下图所示,该配置文件只设置了基本的选项,其他设置根据实际需要进行配置,同一机器上启动多个broker时要区分storePathRootDir位置不一样
192.168.231.232节点:master1配置文件如下
slave2配置文件:
192.168.231.231节点: master2配置文件
slave1配置文件
2.4、创建相关日志文件存储路径,根据自己机器配置文件的相应配置,创建文件夹
2.5、启动集群
2.5.1、启动192.168.231.232节点NameServer
- cd /usr/local/rocketmq/bin
- nohup sh mqnamesrv &
2.5.2、启动broker集群
- # 192.168.231.232节点下
- cd /usr/local/rocketmq/bin/
- # 启动master1
- nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties &
- # 启动slave2
- nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties &
-
-
- # 192.168.231.231节点下
- cd /usr/local/rocketmq/bin/
- # 启动master2
- nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties &
- # 启动slave1
- nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties &
-
- # broker启动时可通过查看nameserver的日志来判断broker是否在nameserver中注册成功
- #192.168.231.232节点上,输入命令:tail -f ~/logs/rocketmqlogs/namesrv.log

2.5.3、遇到的错误
若报错Lock failed,MQ already started,则可能是配置文件出现问题,检查两个broker的配置文件中storePathRootDir路径是否一样,该存储路径不能相同
若遇到启动broker时,直接退出,首先可以查看~/logs/rocketmqlogs/broker.log启动日志文件,看是否有相应错误;第二:检查硬件内存大小,因为rocketmq对内存要求较高,可适当调整,修改方法详见上面单机部署步骤。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。