RocketMQ双主双从(异步复制)模式以及rocketmq-console监控部署

一、RocketMQ介绍

(最开始RocketMQ是阿里研究出来的,在2016-11-28捐赠给了开源软件基金会Apache。)

1.1. 简介 

RocketMQ 是一款分布式、队列模型的消息中间件,具有以下特点:

能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 

选用理由: 

 强调集群无单点,可扩展,任意一点高可用,水平可扩展。 

 海量消息堆积能力,消息堆积后,写入低延迟。 

 支持上万个队列 

 消息失败重试机制 

 消息可查询 

 开源社区活跃 

 成熟度(经过双十一考验)

1.2 关键概念

1.2.1. 主题与标签 

主题Tpoic:第一级消息类型,书的标题 标签Tags:第二级消息类型,书的目录,可以基于Tag做消息过滤 

例如: 

主题: 

订单交易 标签: 

订单交易-创建 

订单交易-付款 

订单交易-完成

1.2.2. 发送与订阅群组

 RocketMQ双主双从(异步复制)模式以及rocketmq-console监控部署_第1张图片

 

 

生产组:用于消息的发送。 

消费组:用于消息的订阅处理。

生产组和消费组,方便扩缩机器,增减处理能力,集群组的名字,用于标记用 途中的一员。每次只会随机的发给每个集群中的一员。

RocketMQ的集群方式 和优缺点如下:

1、单机模式 (配置简单,单master宕机后未恢复前消息不可发送、订阅和消费,整个系统都瘫痪了,风险较大)

2、多master (配置简单,磁盘配置raid10,单master宕机未恢复前消息不可订阅和消费)

3、多master多slave异步复制(即使磁盘村怀,消息丢失非常少,消息可以通过slave来消费)

4、多master多slave同步双写(性能相对3下降10%,消息不会丢失,应用最广)

 

 

二、双主双从模式的配置

配置rocketmq前请确保所有机器都已经安装jdk,本文介绍的是apache版本的rocketmq4.2.0版本的双主双从模式的配置以及rocketmq-console监控部署,不适于alibaba版本。

1、服务器环境

 ip      角色            模式

10.1.101.3 broker-a NameServer,Broker Master

10.1.101.7 broker-b NameServer,Broker Master

10.1.101.8 broker-a-s NameServer,Broker Slave

10.1.101.9 broker-a-s NameServer,Broker Slave

 

2、Host添加信息

四台机器执行:

# vi  /etc/hosts

设置四台机器的hosts文件如下:

10.1.101.3 mqnameserver1

10.1.101.7 mqnameserver2

10.1.101.8 mqnameserver3

10.1.101.9 mqnameserver4

 

10.1.101.3 broker-a

10.1.101.7 broker-b

10.1.101.8 broker-a

10.1.101.9 broker-b

重启网卡:

# service network restart

相互ping一下;

然后就是将RocketMQ的压缩包进行解压,

先创建存放解压文件的目录:

# mkdir /usr/local/rocketmq-4.2.0

从rocketmq官网下载的rocketmq-all-4.2.0-bin-release.zip按照官网的流程通过解压编译后,将rocketmq-all-4.2.0/distribution/target/apache-rocketmq.tar.gz文件上传到四台服务器:

进入该文件的目录下,比如:

# cd /home/sovinchan

解压到/usr/local/rocketmq-4.2.0目录下,

#tar -zvxf apache-rocketmq.tar.gz -C /usr/local/rocketmq-4.2.0

并创建软连接

# ln -s rocketmq-4.2.0 rocketmq

3、创建数据存储路径(四台机器都要创建)

我是直接在软连接的目录下来存储产生的数据的,因此进入到/recoketmq目录下

# cd /usr/local/rocketmq

# mkdir data

# mkdir data/commitlog

# mkdir data/consumerqueue

# mkdir data/index

 

4、修改RocketMQ的配置文件:

配置文件位置:

# cd /usr/local/rocketmq/conf/2m-2s-async/

对应的ip的机器修改对应的配置文件:

10.1.101.3 broker-a.properties

10.1.101.7 broker-b.properties

10.1.101.8 broker-a-s.properties

10.1.101.9 broker-b-s.properties

比如将10.1.101.3的机器修改成如下内容:

# vi broker-a.properties

 

#所属集群名字 自定义

brokerClusterName=rocketmq-cluster

#broker名字,不同配置文件不同(主节点和从节点一致)

brokerName=broker-a

#0表示Master >0表示Slave

brokerId=0

#删除文件时间点 默认为0点

deleteWhen=04

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE

brokerRole=ASYNC_MASTER

# 刷盘方式:ASYNC_FLUSH 异步刷盘 SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

#nameServer地址,分号分割

namesrvAddr=mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876

#brokerIP

brokerIP1=10.1.101.3

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=false

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=false

#Broker 对外服务的监听端口

#listenPort=10911

rejectTransactionMessage=false

fetchNamesrvAddrByAddressServer=false

#存储路径

storePathRootDir=/usr/local/rocketmq/data

#消费队列存储路径存储路径

storePathCommitLog=/usr/local/rocketmq/data/commitlog

#消息索引存储路径

storePathIndex=/usr/local/rocketmq/data/index

#刷新commitlog间隔时间

flushIntervalCommitLog=1000

flushCommitLogTimed=false

#文件保存时间 默认为48小时

fileReservedTime=72

maxTransferBytesOnMessageInMemory=262144

maxTransferCountOnMessageInMemory=32

maxTransferBytesOnMessageInDisk=65536

maxTransferCountOnMessageInDisk=8

accessMessageInMemoryMaxRatio=40

messageIndexEnable=true

messageIndexSafe=false

haMasterAddress=

cleanFileForciblyEnable=true

 

其中不同机器需要分别配置的项:

(1) brokerId=0表示是master,大于0则表示是slave;

(2) brokerName=broker-a要对应;在10.1.101.3 机器上是broker-a,在10.1.101.7 上则是broker-b,在10.1.101.8上为broker-a-s,在10.1.101.9上为broker-b-s,

 

(3)brokerRole=,两个主机设置为:ASYNC_MASTER,两个从机为:SLAVE,一定不要弄错

(4)brokerIP1=10.1.101.3 对应ip的机器设置成对应的ip

 

5、修改日志配置文件

在创建的软连接文件夹rocketmq下创建一个logs目录

# mkdir /usr/local/rocketmq/logs

然后执行

# cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml

进行日志文件的替换,sed是linux的替换命令。四台机器同样操作。

 

6、修改启动脚本参数(JVM参数的调优,生产环境默认即可不要修改!!!)

因为我们之前将nameServer和broker放在了同一台机器上,所以需要分别对nameServer和broker进行jvm的性能调优。生产环境默认即可不要修改。

1)broker的调优

# vi /usr/local/rocketmq/bin/runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"

2)nameserver的调优

# vi /usr/local/rocketmq/bin/runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"

 

7、启动两台机器的NameServer:先启动四台机器的NameServer,再启动四台机器的Borker,关机的时候顺序相反,先关闭四台机器的Broker,再关闭四台机器的Nameserver。

# cd /usr/local/rocketmq/bin

# nohup sh mqnamesrv &

上面这条命令nohup是起一个守护线程。

查看进程:

#jps

查看namesrv日志:

# tail -f /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log

8、启动Broker:

10.1.101.3:

# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties &

10.1.101.7:

# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties &

10.1.101.8:

# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties &

10.1.101.9

# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties &

查看进程:

# jps

查看broker日志:

# tail -f /usr/local/rocketmq/logs/rocketmqlogs/broker.log

 

9、停止服务,与启动时顺序相反,先停broker,再停NameServer

停止broker

# ./mqshutdown broker

停止NameServer

# ./mqshutdown namesrv

二、rocketmq-console搭建

rocketmq-console是一个用于监控rocketmq的springboot搭建的web项目,界面效果如下:

RocketMQ双主双从(异步复制)模式以及rocketmq-console监控部署_第2张图片

github地址为:https://github.com/apache/rocketmq-externals

RocketMQ双主双从(异步复制)模式以及rocketmq-console监控部署_第3张图片

1、下载zip文件后解压,然后修改配置文件,使管理界面与rocketmq集群产生关联。

rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties

修改内容及修改结果如下图所示(只需修改一项:rocketmq.config.namesrvAddr):

RocketMQ双主双从(异步复制)模式以及rocketmq-console监控部署_第4张图片

2、编译rocketmq-console(建议在已安装maven的linux环境下编译,在windows中我没编译成功,暂时没找到原因)

先进入rocketmq-console目录下

# cd /home/ss/rocketmq-console

编译命令

# mvn clean package -Dmaven.test.skip=true(注意:不要直接使用mvn package,会提示很多错误)

3、将rocketmq-console/target 目录下的rocketmq-console-ng-1.0.0.jar复制或者上传到自定义的一个目录,比如

# mv rocketmq-console-ng-1.0.0.jar /home/jar

因为是springboot项目,自带有tomcat,直接运行即可

# cd /home/jar

4、运行jar包

# nohup java -jar rocketmq-console-ng-1.0.0.jar &

这里用的是守护进程方式启动的jar包,即使关闭窗口jar包也不会停止运行

5、使用浏览器访问管理界面,地址为:ip地址+8080端口号

RocketMQ双主双从(异步复制)模式以及rocketmq-console监控部署_第5张图片

6、可能遇到的问题

画面可以正常启动,不过从控制台的监控日志上看,存在如下的错误日志。

org.apache.rocketmq.remoting.exception.RemotingTimeoutException: wait response on the channel <192.168.1.80:10918> timeout, 5000(ms)

 

原因是isVIPChannel默认为true,会监控rocketmq的vip通道,将该属性设置为false即可。

设置后的配置文件如下所示:

server.contextPath=

server.port=8080

#spring.application.index=true

spring.application.name=rocketmq-console

spring.http.encoding.charset=UTF-8

spring.http.encoding.enabled=true

spring.http.encoding.force=true

logging.config=classpath:logback.xml

#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876

rocketmq.config.namesrvAddr=10.1.101.3:9876;10.1.101.7:9876;10.1.101.8:9876;10.1.101.9:9876

#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true

rocketmq.config.isVIPChannel=false

#rocketmq-console's data path:dashboard/monitor

rocketmq.config.dataPath=/usr/local/rocketmq-console/data

#set it false if you don't want use dashboard.default true

rocketmq.config.enableDashBoardCollect=true

 

你可能感兴趣的:(RocketMQ双主双从(异步复制)模式以及rocketmq-console监控部署)