RocketMQ双Master双Slave异步复制模式集群在CentOS7-Linux系统上部署

介绍

本文使用CentOS7系统进行RocketMQ双Master双Slave异步复制模式集群部署

共两台虚拟机 一台ip为192.168.32.99 另一台ip为192.168.32.100 以此来模拟真实部署环境

由于机器性能限制 如果读者机器性能优越 可以安装5台虚拟机分别部署启动NameServer及Broker来完成本次实验

服务名部署机器IP
NameServer192.168.32.99、192.168.32.100
Master-a Broker192.168.32.99
Slave-a Broker192.168.32.100
Master-b Broker192.168.32.100
Slave-b Broker192.168.32.99

准备工作

可参照: RocketMq在Linux下安装启动 - 单Master版.

  • 两台CentOS7虚拟机
  • 虚拟机安装配置好了jdk环境
  • 上传rocketmq压缩包并解压到/usr/local/目录下

配置

进入rocketmq安装目录下的conf文件夹
在这里插入图片描述
介绍一下:(摘抄至官方链接: 官网介绍.)

① 2m-2s-async:多Master多Slave模式-异步复制

每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:

  • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
  • 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

② 2m-2s-sync:多Master多Slave模式-同步双写

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写(同步复制)方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:

  • 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;

  • 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

③ 2m-noslave:多Master无slave模式

一个集群无Slave,全是Master,例如2个Master或者3个Master,这种模式的优缺点如下:

  • 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;

  • 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。

(本文采用多Master多Slave异步复制模式部署 即2m-2s-async)

步骤

以ip为192.168.32.99的虚拟机中部署NameServer及Master-a、Slave-b的Broker为例,其他虚拟机相同操作即可:

先配置Broker

① 进入2m-2s-async文件夹
在这里插入图片描述
该文件夹下一共有4个配置文件:
1.broker-a.properties / broker-b.properties: Master角色的Broker配置文件
2.broker-a-s.properties: 对应broker-a的slave角色的broker配置文件
3.broker-b-s.properties: 对应broker-b的slave角色的broker配置文件

② 编辑配置文件

由于我们在本机部署的是Master-a、Slave-b的Broker 所以只要编辑broker-a.properties broker-b-s.propertie两个文件

由于配置文件过长 放在文章最后 需要注意修改的地方有对应注释 请仔细查看

③ 编辑启动配置文件

RocketMq默认配置的JVM内存要求较高 经常出现无法启动服务的错误 所以我们需要手动修改一下配置文件(机器配置高的小伙伴可以跳过本节内容)

  1. 编辑runserver.sh

原来的配置
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
要求过高 会导致无法启动服务
将内存占用修改小一点为512m即可 如下
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

在这里插入图片描述修改完成后输入wq保存退出编辑

  1. 修改 runbroker.sh

原来的配置
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
与上面一致 同理修改为
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"

在这里插入图片描述

④ 设置防火墙

  • NameServer默认使用9876端口
  • Master默认使用10911端口
  • Slave默认使用11011端口

方式一:

直接关闭防火墙
service firewalld stop

方式二:

添加开放端口 以9876为例

  1. 添加端口:firewall-cmd --zone=public --add-port=9876/tcp --permanent
    说明:
    –zone 作用域
    –add-port 添加端口
    –permanent 永久(即重启防火墙 配置不丢失)

  2. 重新加载防火墙:service firewalld reload

启动

ps:以下启动命令若没有在配置了rocketmq环境变量的前提下 请在rocketmq安装目录bin文件夹下执行

① 启动NameServer

启动:nohup sh mqnamesrv &
查看动态日志:tail -f ~/logs/rocketmqlogs/namesrv.log

在这里插入图片描述② 启动Master

启动:nohup sh mqbroker -c 配置文件路径 &
查看动态日志:tail -f ~/logs/rocketmqlogs/broker.log

在这里插入图片描述③ 启动Slave

启动:nohup sh mqbroker -c 配置文件路径 &
查看动态日志:tail -f ~/logs/rocketmqlogs/broker.log

在这里插入图片描述

部署过程中发生的问题

  1. RemotingConnectException: connect to xxx failed(日志文件显示错误)
    解决:
    ① 请检查防火墙是否关闭或是否开放了对应的端口
    ② 请检查配置文件properties中 namesrvAddr配置项是否配置正确(如ip错误,多个服务器地址请用 分号 隔开)
  2. RuntimeException: Lock failed,MQ already started(nohup.out日志文件显示错误 发生在slave启动时。broker日志文件显示的是RemotingConnectException错误)
    解决:
    ① 检查broker配置文件,有关文件存储路径的配置项不能和同台机器其他服务配置相同

部署可视化界面

① 在以上链接拉取工程到本地

官方链接: rocketmq-dashboard.(rocketmq-connect-console工程已经是空的了 可能被淘汰了)

② 编辑项目配置文件 application.properties

在这里插入图片描述

③ 在本机上运行命令框 进入项目根目录 执行maven打包命令

mvn clean package -Dmaven.test.skip=true

在这里插入图片描述
出现以下界面即为打包成功。进入项目根目录会发现,多出一个target文件夹,点击进去可以看到已打包好的jar包。
在这里插入图片描述
④ 将打包好的jar包上传服务器

在这里插入图片描述
⑤ 进入虚拟机/usr/soft文件夹执行命令启动图形化管理界面工程

java -jar rocketmq-dashboard-2.0.0.jar

在这里插入图片描述界面展示:
在这里插入图片描述在这里插入图片描述

附录:broker-x.properties配置文件参数

#**********************需要认真查看是否需要修改范围***********************
#broker集群名称,用于划分broker
brokerClusterName=cluster001
#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=broker-a
#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Master节点设置
brokerId=0
#Slave节点设置
#brokerId=1
#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.32.99:9876;192.168.32.100:9876
#broker服务监听端口(以本文章为例:master是10911、slave是11011)
listenPort=10911
#broker角色(请遵守以下写法:SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:SLAVE)
brokerRole=ASYNC_MASTER
#Slave节点设置
#brokerRole=SLAVE

# 请保证以下路径在服务启动之前就存在
#持久化消息存储根路径
storePathRootDir=/root/store
#commitLog文件存储路径
storePathCommitLog=/root/store/commitlog
#**********************需要认真查看是否需要修改范围 end***********************


#************************接下来的配置项可以默认*****************************
#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8
#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true
#是否自动创建topic的订阅组,默认开启
autoCreateSubscriptionGroup=true
#未消费的持久化消息清理时间点
deleteWhen=04
#持久化消息保存周期(单位:小时),超过该周期将被清理
fileReservedTime=24
#单个commitLog文件的大小限制(单位:字节)
mapedFileSizeCommitLog=1073741824
#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20)
mapedFileSizeConsumeQueue=8000000
#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88
#最大消息大小限制(单位:字节)
maxMessageSize=65536
#commitLog最少刷盘page数
flushCommitLogLeastPages=4
#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2
#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000
#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000
#处理消息发送线程池大小
sendMessageThreadPoolNums=128
#处理消息拉取线程池大小
pullMessageThreadPoolNums=128
#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH


版权声明:本文为weixin_44854986原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。