鹿鸣小站

鹿鸣小站

RocketMQ集群 - 多节点单副本模式

MQ
1237
2023-01-18

多组节点(集群)单副本模式

一个集群内全部部署 Master 角色,不部署Slave 副本,例如2个Master或者3个Master,这种模式的优缺点如下:

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

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

这个标题内容是官方文档抄的啊,就那么一看,我工作项目就有用到这个鬼东西,就学习一下,Emmm...

前情提要

是这样,RocketMQ 分 Broker 和 NameServer ,Broker 往 NameServer 注册自己的地址,然后生产者消费者从 NameServer 拿到 Broker 信息往里推消息。

我准备搭建3个NameServer + 3个Master节点(建议一般规模的集群启动3个NameServer),所以最少需要3台机器,下边是我准备的虚拟机

一个标题两个标题三个标题
broker-anameserver-1192.168.31.120
broker-bnameserver-2192.168.31.121
broker-cnameserver-3192.168.31.122
  • 为了避免网络不通的状况百出(菜鸡还没有掌握它要用的所有端口,9876,10911,11011,还有什么),我直接就给防火墙关了

  • 这东西他要用 JVM 来跑,所以3台还要配好 JDK 环境

  • 然后就去下载它:https://archive.apache.org/dist/rocketmq/

这里下了个最新5.0的
image

完了把 rocketmq-dashboard也下下,RocketMQ 后台控制面板的,后面安装控制面板要用的

image-1674029923299

  • 再然后,我把 RocketMQ 上传到3台机器的 /home 目录下(当然你也可以用别的)

安装 RocketMQ

解压缩

首先解压压缩包,然后我喜欢重命名一下,如果没有 unzip 指令的话,直接 yum 安装一下就得了

unzip ./rocketmq-all-5.0.0-bin-release.zip

mv ./rocketmq-all-5.0.0-bin-release ./rocketmq

cd ./rocketmq

进入 rocketmq 目录,有这些东西

image-1674030746779

修改启动参数(3台机器都要修改)

测试机内存什么的比较小,改改虚拟机内存小点免得出问题,生产中部署 MQ 的机器内存应该都比较大,也许不用改改

  • NameServer 改这个 ./bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

image-1674031769048

  • Broker 改这个 ./bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

image-1674031927186

注意3台机子都要改哦~

修改配置

./conf/2m-noslave/ 目录下,给出了这种集群模式的配置模板

image-1674032410475

他这只有ab两个,可是我有3个机器,按照我的习惯我3个机器一个读a一个读b另一个必须要读c,所以我要在第3台机器上拷贝一份来改改,假设
120 --- a
121 --- b
122 --- c

ok,122要拷一份配置文件

cp ./conf/2m-noslave/broker-a.properties  ./conf/2m-noslave/broker-c.properties 

修改配置如下:

  • 120 - a
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.31.120:9876;192.168.31.121:9876;192.168.31.122:9876
brokerIP1=192.168.31.120
  • 121 - b
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.31.120:9876;192.168.31.121:9876;192.168.31.122:9876
brokerIP1=192.168.31.121
  • 122 - c
brokerClusterName=DefaultCluster
brokerName=broker-c
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.31.120:9876;192.168.31.121:9876;192.168.31.122:9876
brokerIP1=192.168.31.122

启动 NameServer

NameServer 要先于 Broker 启动的

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

后台启动,把默认的 nohup.out 输出到 logs/mqnamesrv.log

查看日志,看到 The Name Server boot success.serializeType=JSON 就行

tail -f ~/logs/rocketmqlogs/namesrv.log

3台机器都要启动噢


启动 Broker

  • 120 - a
nohup sh bin/mqbroker -n "192.168.31.120:9876;192.168.31.121:9876;192.168.31.122:9876" -c ./conf/2m-noslave/broker-a.properties --enable-proxy > logs/mqbroker.log 2>&1 &
  • 121 - b
nohup sh bin/mqbroker -n "192.168.31.120:9876;192.168.31.121:9876;192.168.31.122:9876" -c ./conf/2m-noslave/broker-b.properties --enable-proxy > logs/mqbroker.log 2>&1 &
  • 122 - c
nohup sh bin/mqbroker -n "192.168.31.120:9876;192.168.31.121:9876;192.168.31.122:9876" -c ./conf/2m-noslave/broker-c.properties --enable-proxy > logs/mqbroker.log 2>&1 &
  • 查看日志,看到 The broker[broker名称, IP] boot success.serializeType=JSON 就行
tail -f ~/logs/rocketmqlogs/broker.log

停止应用

sh bin/mqshutdown broker
sh bin/mqshutdown namesrv



安装 RocketMQ-dashboard

在【前情提要】我已经下载了 rocketmq-dashboard 它的源码,解压拉到 idea,然后刷一下 pom.xml 下载依赖,再然后修改修改配置启动就好了,简简单单

image-1674035907444

image-1674035937470

打个jar包自己部署得了诶


附录

https://rocketmq.apache.org/zh/docs/deploymentOperations/15deploy

https://rocketmq.apache.org/zh/docs/deploymentOperations/18Dashboard

https://archive.apache.org/dist/rocketmq/