linux环境下rocketMq双master集群搭建

为什么要使用集群

在生产环境中,经常会有意外的情况发生,对于rocketmq也不例外,单节点情况下,如果出现网络闪断,服务器掉电或宕机之类的,如果服务器不能及时恢复,很可能造成丢消息的情况,因此,集群环境下可以保证服务的高可靠用性。

rocketMq集群模式

RocketMQ的集群部署方式有多种,其中包括单个Master、多个Master、多Master多Slave模式(异步复制)以及多Master多Slave模式(同步双写)。在实际运用中,使用的比较多的是部署主从,即master-slave模式,但在rocketMq的主从模式下,暂时还不支持主从的自动切换,如果需要实现切换需要人工干预,比如写shell脚本,或者宕机之后邮件或短信预警等。

rocketMq的主从模式下,master负责提供读写,根据方式不同,如果配置的是同步,则可以保证消息的高可靠性,即主从节点的消息基本上是实时同步的,异步情况下,在宕机情况下,可能会出现少量的消息丢失,但一旦master宕机,slave节点只能提供消息的读取,不能写入,这个模式下基本上可以满足业务需求;

为什么使用双master模式

另一种比较可靠的集群模式是双master双slave,但是这种模式运维稍微麻烦点,服务器的资源开销会比较大点,个人认为,性能最好,也能够比较好的适应一定的不确定环境下的方式就是双master模式额,在这种模式下,集群中没有slave,集群的中的任何一台机器都可以提供读写服务,根据服务器性能不同可以配置一定的算法进行路由,同时在某一台出现故障了,另一台还能立即提供读写服务不需要人工干预,下面就来简单演示一下双master下rocketMq的搭建过程,

环境准备,我这里使用了两台虚拟机,基于centos6.5,IP分别是

服务器A
192.168.111.133
服务器B
192.168.9.147

1、上传rocketMq4.3的包至虚拟机,
我的目录是,/usr/local/rocketmq
在这里插入图片描述

linux环境下rocketMq双master集群搭建_第1张图片

2、上传完毕,解压即可,如果名称看起来太长,重新命名一下, mv ro… rocketmq4.3 即可
linux环境下rocketMq双master集群搭建_第2张图片

3、创建存储目录,进入rocketMq4.3,在主目录下创建store,
然后再在store下面创建相应的目录,顾名思义这几个目录的作用大家应该可以猜到各自的意思,主要是为了方便后面的运维和管理,注意两个服务器做同样的操作,

mkdir store
mkdir ./store/commitlog
mkdir ./store/consumequeue
mkdir ./store/index
mkdir ./store/abort
mkdir ./store/checkpoint

linux环境下rocketMq双master集群搭建_第3张图片

4、修改配置文件,
我们在conf目录下,可以看到以下有很多配置文件,这几个是用于在不同的环境下,比如双master-双slave下,就在相应的配置文件中进行修改,这里我们使用的是双master模式,使用箭头所示的配置文件,进入,
linux环境下rocketMq双master集群搭建_第4张图片
我们需要对broker-a和broker-b这两个文件分别进行配置,
linux环境下rocketMq双master集群搭建_第5张图片

5、broker-a 配置文件,


brokerClusterName=rocketmq-cluster
brokerName=broker-a

#0 表示Master, >0 表示Slave
brokerId=0

#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

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

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

#Broker 对外服务的监听端口
listenPort=10911

deleteWhen=04
fileReservedTime=48

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#存储路径
storePathRootDir=/usr/local/rocketmq/rocketmq4.3/store
#commitLog存储路径
storePathCommitLog=/usr/local/rocketmq/rocketmq4.3/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/rocketmq/rocketmq4.3/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/rocketmq4.3/store/index

#checkpoint 文件存储路径
storeCheckPoint=/usr/local/rocketmq/rocketmq4.3/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/rocketmq4.3/store/abort
#限制的消息大小
maxMessageSize=65536

#broker角色
brokerRole=ASYNC_MASTER  #异步复制Master
flushDiskType=ASYNC_FLUSH #异步刷盘

#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

6、broker-b 配置文件,


brokerClusterName=rocketmq-cluster
brokerName=broker-b

#0 表示Master, >0 表示Slave
brokerId=0

#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

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

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

#Broker 对外服务的监听端口
listenPort=10911

deleteWhen=04
fileReservedTime=48

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#存储路径
storePathRootDir=/usr/local/rocketmq/rocketmq4.3/store
#commitLog存储路径
storePathCommitLog=/usr/local/rocketmq/rocketmq4.3/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/rocketmq/rocketmq4.3/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/rocketmq4.3/store/index

#checkpoint 文件存储路径
storeCheckPoint=/usr/local/rocketmq/rocketmq4.3/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/rocketmq4.3/store/abort
#限制的消息大小
maxMessageSize=65536

#broker角色
brokerRole=ASYNC_MASTER  #异步复制Master
flushDiskType=ASYNC_FLUSH #异步刷盘

#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

细心的同学可以观察到两个配置文件的不同方式就在于,brokerName=broker-b 这一行上面,因为是双节点,如果有更多的节点,还可以有brokerName=broker-c等配置文件的加入;

同样,在另一台服务器上做相同的配置,

7、启动两台服务器的nameserver,

进入bin目录,使用如下命令,

nohup sh bin/mqnamesrv >/logs/namesrv.log 2>&1 & 或 nohup sh mqnamesrv &

linux环境下rocketMq双master集群搭建_第6张图片
可以看到第一台的nameserver成功启动,
在这里插入图片描述

8、启动第一台节点的broker,

仍然是在bin目录下,启动命令如下,

nohup sh mqbroker -c /usr/local/rocketmq/rocketmq4.3/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

在这里插入图片描述
可以看到broker也成功启动,
linux环境下rocketMq双master集群搭建_第7张图片

在另一台节点上做同样的操作,nameserver的启动命令一样,但是broker启动需要使用broker-b的这个配置文件进行启动,

nohup sh mqbroker -c /usr/local/rocketmq/rocketmq4.3/conf/2m-noslave/broker-b.properties/autoCreateTopicEnable=true>/dev/null 2>&1 &

使用netstat -ntlp可以看到nameserver的9876端口 和broker通信的10911接口都已经被占用

9、查看集群状态

仍然是在bin目录下,执行命令,可以简单查看集群的状态信息,

sh mqadmin clusterlist -n 192.168.111.132:9876;192.168.9.147:9876

10、关闭集群的命令,
仍然是在bin目录下,先关闭nameserver再关闭broker,

	sh mqshutdown broker	
	sh mqshutdown namesrv

11、为了能比较清楚观测集群的状态,可以部署rocketMq的管控台,这里我就不再往下演示了,之前有说过,只需要在其中的任意一台机器上部署管控台即可,主要的流程如下,

rocketmq下载地址:https://github.com/apache/incubator-rocketmq-externals/tree/master/rocketmq-console

下载源码后,找到配置文件application.properties,并按照自己需求进行配置。

例如:
rocketmq.config.namesrvAddr=namesrv服务地址(ip1:port;ip2:port)

在文件根目录执行命令:
mvn clean package -Dmaven.test.skip=true

然后在target目录下找到文件rocketmq-console-ng-1.0.0.jar

启动rocketmq-console,执行命令:

java -jar rocketmq-console-ng-1.0.0.jar

也可以在启动的时候通过参数指定nameserver地址,如下:

nohup java -jar target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876

以上就是本篇的主要内容,其实可以看到搭建的过程并不复杂,主要是弄清楚里面的原理,然后知道配置文件如何修改,如何启动即可,最后感谢观看!

你可能感兴趣的:(rocketmq使用,rocketmq)