Rocketmq集群搭建
本次搭建集群是双主双从 主从异步同步 异步刷盘
Nameserver 分别为 192.168.137.145 192.168.137.146 192.168.137.147
Broker服务器 192.168.137.146 broker-a和broker-b-s s为从
Broker服务器 192.168.137.146 broker-b和broker-a-s
下载rocketmq-all-4.7.1-bin-release二级制包解压之后,进入到rocketmq-all-4.7.1-bin-release目录中
下载地址
http://rocketmq.apache.org/release_notes/release-notes-4.7.1/
Rocketmq是java编写,先要配置java环境变量
vim /etc/profile
在文件最下面
export JAVA_HOME=/root/jdk1.8.0_171 #jdk安装目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
:wq保存
source /etc/profile
刷新环境变量
如果linux是实验用,那内存一般都不会太大,那这里就需要修改nameserver和borker的启动参数,bin 目录下
vim runserver.sh
找到这段配置修改为 512m
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
vim runbroker.sh
找到这段配置
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m"
准备工作做完,下一步启动namebroker
192.168.137.145服务器
192.168.137.146服务器
192.168.137.147服务器
因为nameserver是无状态的,所以不需要配置其余服务器的ip,nameserver彼此之间是没有通讯的,每个broker向所有的nameserver以长连接的方式通讯,30s的保活机制,如果120snameserver没有收到borker的心跳,将broker剔除
nohup sh ./bin/mqnamesrv > nameserver.log &
后台启动,并将启动日志记录到nameserver.log中,日志中有下面打印的话就证明启动成功
The Name Server boot success. serializeType=JSON
启动broker
192.168.137.146 服务器
nohup sh ./bin/mqbroker -c ./conf/2m-2s-async/broker-b-s.properties > b-s.log &
nohup sh ./bin/mqbroker -c ./conf/2m-2s-async/broker-a.properties > a.log &
192.168.137.147 服务器
nohup sh ./bin/mqbroker -c ./conf/2m-2s-async/broker-a-s.properties > a-s.log &
nohup sh ./bin/mqbroker -c ./conf/2m-2s-async/broker-b.properties > b.log &
如果日志打印
The broker[broker-b, 192.168.137.146:10811] boot success. serializeType=JSON and name server is 192.168.137.145:9876;192.168.137.146:9876;192.168.137.147:9876
这样就启动成功了
下面说一下配置文件
#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.137.145:9876;192.168.137.146:9876;192.168.137.147:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径,如果一台服务器上两个borker的话,目录一定不能一样否则启动不起来
storePathRootDir=/app/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/app/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/app/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/app/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/app/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 如果是从节点
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128