RocketMQ集群搭建
RocketMQ搭建分为4种方式
- 单Master模式:风险大,宕机或重启服务不可用
- 多Master模式:单台宕机,整体服务不受影响,但此节点上未消费的消息在节点恢复之前不可被消费
- 多Master多Slave模式(异步):因为是异步复制,主备有短暂消息延迟(毫秒级),Master宕机,磁盘损坏情况下会丢失少量消息,性能高可用
- 多Master多Slave模式(同步):因为是同步复制,只有主备都写成功才返回成功,性能比异步复制略低(10%),消息高可用
此次搭建采用第3中,多Master多Slave模式,分别选取两个服务器 192.168.2.24(A节点Master,B节点Slave);192.168.2.54(B节点Master,A节点Slave),此种节点分布任一台服务器宕机,新增消息的写与存量消息的读都不受影响
1、conf目录下有多种模式搭建的配置文件
2m-2s-async -- 双 Mster 双 Slave ,异步复制 2m-2s-sync -- 双 Mster 双 Slave ,同步双写 2m-noslave -- 双 Master broker.conf -- 单 Master
2、采用2m-2s-async中配置
broker-a.properties -- a节点Master配置 broker-a-s.properties -- a节点Slave配置 broker-b.properties -- b节点Master配置 broker-b-s.properties -- b节点Slave配置
3、a节点Master配置 broker-a.properties
#所属集群名字,名字一样的节点就在同一个集群内 brokerClusterName=rocketmq-cluster #broker名字,名字一样的节点就是一组主从节点。 brokerName=broker-a #brokerid,0就表示是Master,>0的都是表示 Slave brokerId=0 #nameServer地址,分号分割 namesrvAddr=192.168.2.24:9876;192.168.2.54:9876 #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #Broker 对外服务的监听端口 listenPort=11011 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #存储路径 storePathRootDir=/usr/local/rocketMQ/data/master #commitLog 存储路径 storePathCommitLog=/usr/local/rocketMQ/commitlog/master #消费队列存储路径存储路径 storePathConsumeQueue=/usr/local/rocketMQ/consumequeue/master #消息索引存储路径 storePathIndex=/usr/local/rocketMQ/index/master #checkpoint 文件存储路径 storeCheckpoint=/usr/local/rocketMQ/checkpoint/master #abort 文件存储路径 abortFile=/usr/local/rocketMQ/abort/master #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=ASYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
##以下配置为并发较高时提升性能以及数据可靠性配置,可适当选用 #使用可重入锁 useReentrantLockWhenPutmessage=true #发送消息线程等待时间,默认200ms waitTimeMillsInSendQueue=1000 #开启临时存储池 transientStorePoolEnable=true #开启slave读权限(分担 master 压力) slaveReadEnable=true #发消息线程池数量 sendMessageThreadPoolNums=32 #关闭堆内存数据传输 transferMsgByHeap=false #开启文件预热 warmMapedFileEnable=true
4、a节点Slave配置 broker-a-s.properties
#所属集群名字,名字一样的节点就在同一个集群内 brokerClusterName=rocketmq-cluster #broker名字,名字一样的节点就是一组主从节点。 brokerName=broker-a #brokerid,0就表示是Master,>0的都是表示 Slave brokerId=1 #nameServer地址,分号分割 namesrvAddr=192.168.2.24:9876;192.168.2.54:9876 #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=false #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=false #Broker 对外服务的监听端口 listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=120 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径 storePathRootDir=/usr/local/rocketMQ/data/slave #commitLog 存储路径 storePathCommitLog=/usr/local/rocketMQ/commitlog/slave #消费队列存储路径存储路径 storePathConsumeQueue=/usr/local/rocketMQ/consumequeue/slave #消息索引存储路径 storePathIndex=/usr/local/rocketMQ/index/slave #checkpoint 文件存储路径 storeCheckpoint=/usr/local/rocketMQ/checkpoint/slave #abort 文件存储路径 abortFile=/usr/local/rocketMQ/abort/slave #限制的消息大小 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 ##以下内容为并发较高时提升性能以及数据可靠性配置,可适当选用 #使用可重入锁 useReentrantLockWhenPutmessage=true #发送消息线程等待时间,默认200ms waitTimeMillsInSendQueue=1000 #开启临时存储池 transientStorePoolEnable=true #开启slave读权限(分担 master 压力) slaveReadEnable=true #发消息线程池数量 sendMessageThreadPoolNums=32 #关闭堆内存数据传输 transferMsgByHeap=false #开启文件预热 warmMapedFileEnable=true #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128
5、同时配置b节点Master、Slave配置文件,只需修改以下配置即可。此文中,Master节点listenPort=11011,Slave节点listenPort=10911
**需要注意,如果同一台机器上同时有Master、Slave,则 storePathRootDir 路径要分开,不然起第二个服务时会提示服务已存在
#broker名字,名字一样的节点就是一组主从节点。 brokerName=broker-b #brokerid,0就表示是Master,>0的都是表示 Slave brokerId=0 #Broker 对外服务的监听端口 listenPort=11011 #存储路径 storePathRootDir=/usr/local/rocketMQ/data/master #commitLog 存储路径 storePathCommitLog=/usr/local/rocketMQ/commitlog/master #消费队列存储路径存储路径 storePathConsumeQueue=/usr/local/rocketMQ/consumequeue/master #消息索引存储路径 storePathIndex=/usr/local/rocketMQ/index/master #checkpoint 文件存储路径 storeCheckpoint=/usr/local/rocketMQ/checkpoint/master #abort 文件存储路径 abortFile=/usr/local/rocketMQ/abort/master
6、修改bin/runbroker.sh bin/runserver.sh中JVM启动参数,此处不赘述
7、主备配置文件齐备后,启动两台服务器的namesrv和broker
[root@project-deve bin]# pwd /usr/local/rocketMQ/bin [root@project-deve bin]#nohup ./mqnamesrv >>/dev/null 2>&1& [root@project-deve bin]#nohup ./mqbroker -c ../conf/2m-2s-async/broker-a.properties >>/dev/null 2>&1& [root@project-deve bin]#nohup ./mqbroker -c ../conf/2m-2s-async/broker-b-s.properties >>/dev/null 2>&1&
8、通过可视化客户端(可自己打包,也可docker部署)可以看到,集群已经搭建完毕