rocketMQ 4.9
包含两个组件 nameserver 与 broker
采用2master 2slave async同步的方式部署
可以看到rocketmq的conf目录包含一个 2m-2s-async的配置文件包
[root@localhost conf]# ll 总用量 36 drwxr-xr-x. 2 root root 118 3月 29 14:34 2m-2s-async drwxr-xr-x. 2 root root 118 6月 20 2022 2m-2s-sync drwxr-xr-x. 2 root root 91 6月 20 2022 2m-noslave -rw-r--r--. 1 root root 949 6月 20 2022 broker.conf drwxr-xr-x. 2 root root 72 6月 20 2022 dledger -rw-r--r--. 1 root root 15362 6月 20 2022 logback_broker.xml -rw-r--r--. 1 root root 3836 6月 20 2022 logback_namesrv.xml -rw-r--r--. 1 root root 3761 6月 20 2022 logback_tools.xml -rw-r--r--. 1 root root 1363 6月 20 2022 plain_acl.yml -rw-r--r--. 1 root root 834 6月 20 2022 tools.yml
包内配置文件已经准备好了
[root@localhost 2m-2s-async]# ll 总用量 16 -rw-r--r--. 1 root root 929 6月 20 2022 broker-a.properties -rw-r--r--. 1 root root 1673 3月 29 14:34 broker-a-s.properties -rw-r--r--. 1 root root 929 6月 20 2022 broker-b.properties -rw-r--r--. 1 root root 922 6月 20 2022 broker-b-s.properties
这里rocketMQ处理的挺好的但是这里的配置只是简单的配置项,还需要我们自己修改下
首先做下应用的配置,我们使用两台机器部署
pc | nameserver | broker-master | broker-slave | dashboard |
192.168.0.92 | nameserver-a | broker-a | broker-b-s | |
192.168.0.93 | nameserver-b | broker-b | broker-a-s | rocket-dashboard |
//因为一台机器上要部署多个服务,为了同一管理,我将所有配置文件及自己写的启动脚本及日志放到了一起
[root@localhost rocketmq]# ll 总用量 64 -rw-r--r--. 1 root root 129 3月 29 18:49 broker-a.log -rw-r--r--. 1 root root 1598 3月 29 14:36 broker-a.properties -rwxr-xr-x. 1 root root 125 3月 29 16:24 broker-a.sh -rw-r--r--. 1 root root 129 3月 29 18:49 broker-b-s.log -rw-r--r--. 1 root root 1671 3月 29 18:48 broker-b-s.properties -rwxr-xr-x. 1 root root 129 3月 29 16:25 broker-b-s.sh drwxr-xr-x. 2 root root 250 3月 29 18:49 brokerlogs -rw-r--r--. 1 root root 20626 3月 29 16:26 hs_err_pid85931.log drwxr-xr-x. 2 root root 67 3月 29 16:23 logs -rw-r--r--. 1 root root 49 3月 29 16:23 nameserver-a.log -rwxr-xr-x. 1 root root 75 3月 29 16:23 nameserver.sh -rwxr-xr-x. 1 root root 52 3月 29 16:44 shutdown-broker.sh -rwxr-xr-x. 1 root root 53 3月 29 16:44 shutdown-nameserver.sh
配置文件 broker-a.properties
//这里就不贴我自己的了,因为没注释,网上copy一份还挺全的
# 所属集群名字 brokerClusterName=myRocketmqCluster # broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配) brokerName=broker-a # 0 表示Master, > 0 表示slave brokerId=0 # 注册中心,可使用集群模式 namesrvAddr=192.168.0.129:9876;192.168.0.130:9876 # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数 defaultTopicQueueNums=4 # 是否允许Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许Broker自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # Broker 对外服务的监听端口 listenPort=10933 # 删除文件时间点,默认是凌晨4点 deleteWhen=04 # 文件保留时间,默认48小时 fileReservedTime=120 # commitLog每个文件的大小默认1G # 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,用于数据存储,consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,而是记录一个数据的位置,记录好之后再把消息存到commitlog文件里 mapedFileSizeCommitLog=1073741824 # ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 destroyMapedFileIntervalForcibly=120000 redeleteHangedFileInterval=120000 # 检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 # 存储路径 storePathRootDir=/usr/local/rocketMQ/store # commitLog存储路径 storePathCommitLog=/usr/local/rocketMQ/commitlog # 消费队列存储路径 storePathConsumeQueue=/usr/local/rocketMQ/consumequeue # 消息索引存储路径 storePathIndex=/usr/local/rocketMQ/index # checkpoint 文件存储路径 storeCheckpoint=/usr/local/rocketMQ/checkpoint # abort 文件存储路径 abortFile=/usr/local/rocketMQ/abort # 限制的消息大小 maxMessageSize=65536 flushCommitLogLeastPages=4 flushConsumeQueueLeastPages=2 flushCommitLogThoroughInterval=10000 flushConsumeQueueThoroughInterval=60000 # Broker 的角色 # ASYNC_MASTER 异步复制Master # SYNC_MASTER 同步双写Master # SLAVE brokerRole=SYNC_MASTER # 刷盘方式 # ASYNC_FLUSH 异步刷盘 # SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH checkTransactionMessageEnable=false # 发消息线程池数量 sendMessageTreadPoolNums=128 # 拉消息线程池数量 pullMessageTreadPoolNums=128
配置文件broker-a-s.properties
# 所属集群名字 brokerClusterName=myRocketmqCluster # broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配) brokerName=broker-a # 0 表示Master, > 0 表示slave brokerId=1 # 注册中心,可使用集群模式 namesrvAddr=192.168.0.129:9876;192.168.0.130:9876 # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数 defaultTopicQueueNums=4 # 是否允许Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许Broker自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # Broker 对外服务的监听端口 listenPort=10900 # 删除文件时间点,默认是凌晨4点 deleteWhen=04 # 文件保留时间,默认48小时 fileReservedTime=120 # commitLog每个文件的大小默认1G # 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,用于数据存储,consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,而是记录一个数据的位置,记录好之后再把消息存到commitlog文件里 mapedFileSizeCommitLog=1073741824 # ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 destroyMapedFileIntervalForcibly=120000 redeleteHangedFileInterval=120000 # 检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 # 存储路径 storePathRootDir=/usr/local/rocketMQ/slave/store # commitLog存储路径 storePathCommitLog=/usr/local/rocketMQ/slave/commitlog # 消费队列存储路径 storePathConsumeQueue=/usr/local/rocketMQ/slave/consumequeue # 消息索引存储路径 storePathIndex=/usr/local/rocketMQ/slave/index # checkpoint 文件存储路径 storeCheckpoint=/usr/local/rocketMQ/slave/checkpoint # abort 文件存储路径 abortFile=/usr/local/rocketMQ/slave/abort # 限制的消息大小 maxMessageSize=65536 flushCommitLogLeastPages=4 flushConsumeQueueLeastPages=2 flushCommitLogThoroughInterval=10000 flushConsumeQueueThoroughInterval=60000 # Broker 的角色 # ASYNC_MASTER 异步复制Master # SYNC_MASTER 同步双写Master # SLAVE brokerRole=SLAVE # 刷盘方式 # ASYNC_FLUSH 异步刷盘 # SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH checkTransactionMessageEnable=false # 发消息线程池数量 sendMessageTreadPoolNums=128 # 拉消息线程池数量 pullMessageTreadPoolNums=128
broker-b.properties
broker-b-s.properties
这两个copy上面对应的改下对应的参数就好了
比较核心的几个配置
brokerClusterName:只要是同一个集群里面的节点,都必须是这一个名称,可以自定义
brokerName:broker的名称,同一个broker的主从节点名称保持一致。
brokerId:broker的id标识。0:主节点,大于0都是从节点
namesrvAddr:nameSrv的注册中心地址,可以是集群模式,多个ip之间使用英文的;分隔
listenPort:监听端口,同一个ip地址下,端口不能保持一致,需修改
brokerRole:broker的角色,ASYNC_MASTER 异步复制Master,SYNC_MASTER 同步双写Master,SLAVE从节点专用。
flushDiskType:数据刷盘方式。ASYNC_FLUSH 异步刷盘,SYNC_FLUSH 同步刷盘
storePathRootDir=/usr/local/rocketMQ/store 存储路径
storePathCommitLog=/usr/local/rocketMQ/commitlog commitLog存储路径
storePathConsumeQueue=/usr/local/rocketMQ/consumequeue 消费队列存储路径
storePathIndex=/usr/local/rocketMQ/index消息索引存储路径
storeCheckpoint=/usr/local/rocketMQ/checkpoint checkpoint 文件存储路径
abortFile=/usr/local/rocketMQ/abort abort 文件存储路径
修改启动参数
这里因为是虚拟机,内存没有那么打,所以要修改下启动参数
runserver.sh
# Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ... # '1' means releases befor Java 9 JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -r -n 's/.* version "([0-9]*).*$/\1/p') # if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then # JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC" # JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps" # JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" # else # JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0" # JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M" # fi //上面判断jdk版本启动不同GC的就不用了,我自己的jdk1.8 使用G1玩,但是1.8的日志配置跟1.9的不一样所以要处理下 //gc日志存放位置也改到统一位置了 GC_LOG_DIR="/home/soft/softshell/rocketmq/logs" //这里内存分配改小了 JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0" JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps" JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
runbroker.sh
choose_gc_options() { //这里同样改了下gc日志存放位置 GC_LOG_DIR="/home/soft/softshell/rocketmq/brokerlogs" JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | head -1 | cut -d'"' -f2 | sed 's/^1\.//' | cut -d'.' -f1) if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "8" ] ; then JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC" else JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0" fi //判断小于8的用cms ...... choose_gc_log_directory //这里同样改了512m 默认的是8G 伤不起 JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m" choose_gc_options JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch" JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
然后ok了,可以启动了
做了几个启动脚本 先配置了下ROCKETMQ_HOME
$ROCKETMQ_HOME cat /etc/profile vi /etc/profile 最后添加 export ROCKETMQ_HOME=/home/soft/rocketmq source /etc/profile
一台服务器上放的几个脚本 方便启停
nameserver.sh //启动nameserver
#!/bin/bash nohup sh $ROCKETMQ_HOME/bin/mqnamesrv > nameserver-b.log 2>&1 &
broker-b.sh //b的master broker 启动脚本
#!/bin/bash nohup sh $ROCKETMQ_HOME/bin/mqbroker -c /home/soft/softshell/rocketmq/broker-b.properties -> broker-b.log 2>&1 &
broker-a-s.sh // a的 slave broker启动脚本
#!/bin/bash nohup sh $ROCKETMQ_HOME/bin/mqbroker -c /home/soft/softshell/rocketmq/broker-a-s.properties -> broker-a-s.log 2>&1 &
shutdown-nameserver.sh // nameserver的停止脚本
#!/bin/bash sh $ROCKETMQ_HOME/bin/mqshutdown namesrv
shutdown-broker.sh //broker的停止脚本
#!/bin/bash sh $ROCKETMQ_HOME/bin/mqshutdown broker
乐享:知识积累,快乐无限。