自定义脚本启动搭建的RocketMQ伪集群

引言

工欲善其事,必先利其器。

因为只有一台电脑,只能搭建伪集群来学习了,但是,本身又是个偷懒的人,启动伪集群 RocketMQ 的命令有点多,不想敲那么多的命令,顺便将搭建 RocketMQ 集群的部署方式记录一下。

RocketMQ 的部署方式有3种:

  • 2m-noslave:多 Master 模式,无 Slave。[双主模式]
    • 优点:配置简单,性能最高
    • 缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
  • 2m-2s-sync:多 Master 多 Slave 模式,同步双写。[双主双从+同步模式]
    • 优点:服务可用性与数据可用性非常高
    • 缺点:性能比异步集群略低
  • 2m-2s-async:多 Master 多 Slave 模式,异步复制。[双主双从+异步模式]
    • 优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预
    • 缺点:Master宕机或磁盘损坏时会有少量消息丢失

本文主要记录一下同步双写模式的搭建步骤和一键启动脚本。

端口规划

首先,因为只有一台电脑,端口要进行规划,以避免端口占用的问题。

采用的方案就是“双主双从”。

名称端口
namesrv19876
Namesrv29877
brokera-master10910
brokera-slave10920
brokerb-master10930
brokerb-slave10940

下载

https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip

配置文件

vim rocketmq/conf/2m-2s-sync/broker-a.properties
# 集群名字
brokerClusterName=DefaultCluster
# broker 名字,可重复,master 的名字和 slave 的名字保持一致
brokerName=broker-a
# 0 表示 master, >0 表示 slave 
brokerId=0
# 删除文件时间点,默认凌晨 4点
deleteWhen=04
# 文件保留时间,默认 48 小时
fileReservedTime=48
# Broker 的角色
brokerRole=SYNC_MASTER
# 刷盘方式
flushDiskType=ASYNC_FLUSH
# Broker 对外服务的监听端口, 注意需改端口, 并且要和默认的10911相差5以上
listenPort=10910
# 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# nameServer地址,分号分割
namesrvAddr=localhost:9876;localhost:9877
# 存储路径
storePathRootDir=/usr/local/var/lib/rocketmq/broker-a
# commitLog 存储路径
storePathCommitLog=/usr/local/var/lib/rocketmq/broker-a/commitlog
# 消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/var/lib/rocketmq/broker-a/consumequeue
# 消息索引存储路径
storePathIndex=/usr/local/var/lib/rocketmq/broker-a/index
# checkpoint 文件存储路径
storeCheckpoint=/usr/local/var/lib/rocketmq/broker-a/checkpoint
# abort 文件存储路径
abortFile=/usr/local/var/lib/rocketmq/broker-a/about

其它节点的配置文件类似只需修改一下 brokerIdbrokerNamelistenPortbrokerRolestore*这些参数即可。

修改 JVM 启动资源要素

还是因为本身只有一台机器,资源有限的原因。

vim rocketmq-4.9.3/bin/runbroker.sh

在这里插入图片描述

vim rocketmq-4.9.3/bin/runserver.sh

在这里插入图片描述

一键启动脚本

#!/bin/bash
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home"
export ROCKETMQ_HOME="/usr/local/rocketmq-4.9.3"
export ROCKETMQ_LOG_DIR="/usr/local/var/log/rocketmq"

if [ $1 == "startall" ] then
    # 启动 namesrv1
    nohup sh ${ROCKETMQ_HOME}/bin/mqnamesrv -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/namesrv-1.properties > ${ROCKETMQ_LOG_DIR}/mqnamesrv1.log 2>&1 &
    
    # 启动 namesrv2
    nohup sh ${ROCKETMQ_HOME}/bin/mqnamesrv -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/namesrv-2.properties > ${ROCKETMQ_LOG_DIR}/mqnamesrv2.log 2>&1 &

    # 启动 broker-a
    nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/broker-a.properties > ${ROCKETMQ_LOG_DIR}/broker-a.log 2>&1 &

    # 启动 broker-a-s
    nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/broker-a-s.properties > ${ROCKETMQ_LOG_DIR}/broker-a-s.log 2>&1 &

    # 启动 broker-b
    nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/broker-b.properties > ${ROCKETMQ_LOG_DIR}/broker-b.log 2>&1 &

    # 启动 broker-b-s
    nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/broker-b-s.properties > ${ROCKETMQ_LOG_DIR}/broker-b-s.log 2>&1 &

    export NAMESRV_ADDR="localhost:9876;localhost:9877"

    echo "rocketmq 集群启动成功!"
elif[ $1 == "start" ] then 
    nohup ${ROCKETMQ_HOME}/bin/mqnamesrv &
    nohup ${ROCKETMQ_HOME}/bin/mqbroker -n localhost:9876 &
    export NAMESRV_ADDR=localhost:9876
    echo "rocketmq 单机启动成功!"
elif [ $1 == "stop" ] then 
    # 先关闭 broker
    sh ${ROCKETMQ_HOME}/bin/mqshutdown broker
    # 再关闭 namesrv
    sh ${ROCKETMQ_HOME}/bin/mqshutdown namesrv
    echo "rocketmq 关闭成功!"
else 
    echo "rockermq_service.sh (startall|start|stop)"
fi

运行情况

在这里插入图片描述

参考文档

官方中文部署文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值