引言
工欲善其事,必先利其器。
因为只有一台电脑,只能搭建伪集群来学习了,但是,本身又是个偷懒的人,启动伪集群 RocketMQ 的命令有点多,不想敲那么多的命令,顺便将搭建 RocketMQ 集群的部署方式记录一下。
RocketMQ 的部署方式有3种:
- 2m-noslave:多 Master 模式,无 Slave。[双主模式]
- 优点:配置简单,性能最高
- 缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
- 2m-2s-sync:多 Master 多 Slave 模式,同步双写。[双主双从+同步模式]
- 优点:服务可用性与数据可用性非常高
- 缺点:性能比异步集群略低
- 2m-2s-async:多 Master 多 Slave 模式,异步复制。[双主双从+异步模式]
- 优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预
- 缺点:Master宕机或磁盘损坏时会有少量消息丢失
本文主要记录一下同步双写模式的搭建步骤和一键启动脚本。
端口规划
首先,因为只有一台电脑,端口要进行规划,以避免端口占用的问题。
采用的方案就是“双主双从”。
名称 | 端口 |
---|
namesrv1 | 9876 | Namesrv2 | 9877 | brokera-master | 10910 | brokera-slave | 10920 | brokerb-master | 10930 | brokerb-slave | 10940 |
下载
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
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10910
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
namesrvAddr=localhost:9876;localhost:9877
storePathRootDir=/usr/local/var/lib/rocketmq/broker-a
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
storeCheckpoint=/usr/local/var/lib/rocketmq/broker-a/checkpoint
abortFile=/usr/local/var/lib/rocketmq/broker-a/about
其它节点的配置文件类似只需修改一下 brokerId 、 brokerName 、listenPort 、brokerRole 和store* 这些参数即可。
修改 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
nohup sh ${ROCKETMQ_HOME}/bin/mqnamesrv -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/namesrv-1.properties > ${ROCKETMQ_LOG_DIR}/mqnamesrv1.log 2>&1 &
nohup sh ${ROCKETMQ_HOME}/bin/mqnamesrv -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/namesrv-2.properties > ${ROCKETMQ_LOG_DIR}/mqnamesrv2.log 2>&1 &
nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/broker-a.properties > ${ROCKETMQ_LOG_DIR}/broker-a.log 2>&1 &
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 &
nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -c ${ROCKETMQ_HOME}/conf/2m-2s-sync/broker-b.properties > ${ROCKETMQ_LOG_DIR}/broker-b.log 2>&1 &
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
sh ${ROCKETMQ_HOME}/bin/mqshutdown broker
sh ${ROCKETMQ_HOME}/bin/mqshutdown namesrv
echo "rocketmq 关闭成功!"
else
echo "rockermq_service.sh (startall|start|stop)"
fi
运行情况
参考文档
官方中文部署文档
|