RocketMQ系列之集群搭建

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> RocketMQ系列之集群搭建

前言

上节我们对RocketMQ(以下简称RMQ)有了一些基本的认识,大致知道了,什么是RMQ以及他能做什么,今天我们来讲讲如何搭建RMQ,与其说搭建RMQ不如说是搭建RMQ集群,为什么这么说呢?看完这篇文章自然就懂了。

RocketMQ系列之集群搭建

RMQ几个重要角色?

NameServer:名称服务,这是RMQ的一个重点,他是一个几乎无状态的节点,可集群部署,节点之间无任何信息同步,这里可以充当ZK协调集群的作用;

Broker:Broker消息中转角色,主要负责消息的存储转发,Broker分为Master和Slave,一个Master对应多个Slave,但是一个Slave只能对应一个Master,Master和Slave之间通过指定相同的BrokerName和不同的BrokerId来确定主从关系,id为0的就是Master,非0就是Slave,Master也可以部署多个,每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic到NameServer上;

Topic:主题频道,用于生产者和消费者进行消息交流的媒介,生产者将消息发送到指定Topic上,消费者订阅该Topic(生产环境下一般都是消费者先订阅,生产者后生产),RMQ以推的形式主动将消息推给消费者消费;

RocketMQ系列之集群搭建

RMQ的集群模式?

RMQ的集群模式主要有3种:单Master模式,多Master模式,多Master多Slave模式。

单Master模式:顾名思义,只有一台MQ服务器,即一台Broker,这种模式风险比较大,一旦broker宕机或者重启就会导致整个MQ服务不可用;

多Master模式:一个无Slave的MQ集群,集群中只有Master,这样即使其中一台Broker宕机,不会影响整个MQ服务,MQ服务还是可用的,但是宕机的这台Broker上的消息就无法被消费了,当这台Broker重启之后,会重新加入集群消费会被消费掉,所以这种模式可能会存在消息不实时消费的情况,但是消息是不会丢失的;

多Master多Slave模式:一个既有Master又有Slave的集群模式,这种模式能保证消息的实时消费,当Master宕机时,消息还可以从该Master对应的Slave上进行消费,所以这里存在一个问题,就是Master和Slave消息数据的同步问题,主要有2种同步方案可选,一种是同步双写(生产者将消息发送给MQ时,同时向Master和Slave发送,当2台broker同时返回成功才认为消息发送成功),另一种是异步复制(生产者将消息发送到Master上,然后Slave异步去复制Master的消息,这种会存在少量消息丢失)

RocketMQ系列之集群搭建

RMQ集群搭建?

今天我们主要将多Master集群的搭建,单Master没什么好讲的,相当于启动一个Broker就可以了,我们看看多Master,我就以2个Master为例:

环境准备:2台Master

第一步:添加Host信息,主要为了NameServer而设置,为你的机器IP指定nameserver名称

RocketMQ系列之集群搭建

指定完之后,重启网卡: service network restart

每台机器之间ping一下nameserver看看是否能连通:


ping rocketmq-nameserver1、ping rocketmq-nameserver2 ...

第二步:每台机器上都需要安装RMQ,上传压缩包,可以直接官网下载最新版(最新版最低要求JDK8)

下载链接:http://rocketmq.apache.org/release_notes/release-notes-4.2.0/

直接解压,安装;

第三步:创建存储路径

主要是下面这3个文件夹,这3个文件主要就是用来存储MQ上的消息的,相当于持久化存储文件,但是为什么会是三个文件夹呢?后面讲解MQ存储时我会详细讲解,这里暂且先不介绍

RocketMQ系列之集群搭建

第四步:修改Broker配置,进入RMQ下的conf目录下我们会看到下面这几个文件

RocketMQ系列之集群搭建

很明显2m-noslave就是我们需要的配置,进入这个目录下:默认就会有2个broker-a和b配置文件,如果你有N个Master就配置N个broker,我们可以在一台机器上把这些Broker先配置好,然后复制到其他机器上,每个机器启动对应一个broker就可以了

RocketMQ系列之集群搭建

OK,那么我们就来配置broker吧:


# brokerClusterName这里一定要相同,这是集群的名字,配置一样,才能在一个集群中
brokerClusterName=rocketmq-cluster
# 这个是broker的名字,每个配置文件写自己的名字
brokerName=broker-a
# 这个是broker的ID,0代表Master,0代表Slave
brokerId=0
# 这个就是我们之前配置的nameserver,这里你需要哪几个机器作为Master就配置几个机器的nameserver服务吧
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
RocketMQ系列之集群搭建

配置文件我们其实就配置完了,还有就是启动文件的配置,在bin目录下有2个启动文件:

RocketMQ系列之集群搭建

里面有这一段,根据自己机器的内存大小自己合理分配内存


JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

第五步:启动nameserver

分别启动多台机器上的nameserver,上面我们讲过nameserver充当zk的角色,自然而然就很好理解为什么先启动nameserver了

在bin目录下有个

RocketMQ系列之集群搭建

启动命令:nohup sh mqnamesrv & 后台启动

可以通过查看nameserver启动日志

RocketMQ系列之集群搭建

第六步:启动每台机器的Broker

在bin目录下,我们可以看到下面这个

RocketMQ系列之集群搭建

启动命令:分别启动对应broker


#第一台机器
nohup sh mqbroker -c /usr/local/rocketmq-4.2.0/conf/2m-noslave/broker-b.properties &
# 第二台机器
nohup sh mqbroker -c /usr/local/rocketmq-4.2.0/conf/2m-noslave/broker-a.properties &

OK,到此为止,其实RMQ多Master集群就搭建起来了,接下来我们还需要做的就是RMQ的控制台

下载链接:https://github.com/apache/rocketmq-externals

RocketMQ系列之集群搭建

下载下来之后,我们需要修改配置文件:配置你的两台Master机器IP+RMQ端口号,注意下面那个VIP配置要改为false

RocketMQ系列之集群搭建

然后我们使用maven命令打个包:


mvn clean package -Dmaven.test.skip=true
RocketMQ系列之集群搭建

这个控制台是用spring-boot开发的,所以我们只需要打个jar,扔到服务器上直接java -jar启动即可。

RocketMQ系列之集群搭建 RocketMQ系列之集群搭建 RocketMQ系列之集群搭建

启动之后打开浏览器,输入访问路径:

RocketMQ系列之集群搭建

我们的nameserver列表:

RocketMQ系列之集群搭建

OK,RMQ的集群就介绍到这了

原文始发于微信公众号(Justin的后端书架):

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> RocketMQ系列之集群搭建


 上一篇
RocketMQ系列之初识MQ RocketMQ系列之初识MQ
前言 消息中间件是目前互联网项目应用特别广泛的一个中间件,主要用于处理异步操作,系统之间的应用解耦,以及并发下的流量削峰等等应用场景,今天开我们就进入消息中间件MQ的讲解,主流的MQ有很多,我们只需要掌握其中一种就可以了,基本都大同小异,O
下一篇 
一次 RocketMQ 进程自动退出排查经验分享(实战篇) 一次 RocketMQ 进程自动退出排查经验分享(实战篇)
1、背景公司一个 RocketMQ 集群由4主4从组成,突然其中3台服务器“竟然”在同一时间下线,其监控显示如下: 2、故障分析出现问题,先二话不说,马上重启各服务器,尽快恢复集群,降低对业务的影响,接下来开始对日志进行分析。 Java 进