前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大厂生产环境的RocketMQ都是这样部署的

大厂生产环境的RocketMQ都是这样部署的

作者头像
故里
发布2020-11-25 16:14:18
8470
发布2020-11-25 16:14:18
举报
文章被收录于专栏:故里学Java故里学Java

点击关注"故里学Java"

右上角"设为星标"好文章不错过

昨天我们已经学习了RocketMQ的一些基本概念,架构设计和各个角色的功能。今天我们来聊聊RocketMQ的集群部署问题,关于RocketMQ的几种集群模式,你都知道吗,或者你们用的是哪一种集群模式呢?

集群模式

1、单Master模式

这种部署方式的风险比较大,一旦Broker宕掉,就会导致整个服务不可用,一般只在开发环境为了节约资源的时候使用,线上环境非常不建议使用。

2、多Master模式

这种模式会在一个集群中部署多个Master,没有Slave,这种模式也是存在一定的优缺点:

  • 优点:配置简单,单个Master宕掉其他几Master可以正常提供服务,在磁盘配置为RAID10时,消息基本上不会丢失,之所以不是百分百是因为异步刷盘可能会丢失少量消息,同步刷盘不会丢失消息。
  • 缺点:如果其中一个Master宕掉,这台机器上还没有消费的消息在恢复之前不能被消费,可能影响消息的消费时效。

3、多Master多Salve模式(异步)

每个Master配置一个Slave,有多对Master-Slave一起提供服务,HA采用异步复制方式,主备有很短暂的消息延迟,这种模式的优缺点:

  • 优点:即使磁盘损坏,也只是会丢失非常少的消息,消息的时效性也不会有影响,Master宕机后依然可以消费从Slave消费消息,并且这个过程不需要人工干预,性能和多Master模式接近。
  • 缺点:Master宕机磁盘损坏的情况下会丢失少量消息。

4、多Master多Slave模式(同步)

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:

  • 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
  • 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

集群配置

以多Master多Salve模式-异步双写模式为例,看一下集群模式的启动:

1.启动NameServer

代码语言:javascript
复制
# 首先启动Name Server
$ nohup sh mqnamesrv &
 
# 验证Name Server 是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log

2.启动Broker集群

代码语言:javascript
复制
例如NameServer的IP为:192.168.1.1    192.168.1.2
# 在机器A,启动第一个Master
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
 
# 在机器B,启动第二个Master
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
 
# 在机器C,启动第一个Slave
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
 
# 在机器D,启动第二个Slave
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &

机器A上部署的Master的配置文件:

代码语言:javascript
复制
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.1.1:9876;192.168.1.2: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
#存储路径(可以自己修改)
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径(可以自己修改)
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径(可以自己修改)
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径(可以自己修改)
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

机器C上部署的Slave配置文件:

代码语言:javascript
复制
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.1.1:9876;192.168.1.2: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
#存储路径(可以自己修改)
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径(可以自己修改)
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径(可以自己修改)
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径(可以自己修改)
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/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
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

机器B上的Master和机器D上的Slave和机器A、C上的配置文件除brokerName外全都一致。

❝需要注意的是,如果本地开发环境的配置不够高,需要修改runbroker.sh和runserver.sh两个文件,调整JVM参数,否则会启动失败 ❞

代码语言:javascript
复制
vi /usr/local/rocketmq/bin/runbroker.sh
# 开发环境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

mqadmin管理工具

  1. 进入RocketMQ安装目录,在bin目录下执行命令方法:./mqadmin {command} {args}
  2. 几乎所有命令都需要配置-n表示NameServer地址,格式为ip:port
  3. 几乎所有命令都可以通过-h获取帮助
  4. 如果既有Broker地址(-b)配置项又有clusterName(-c)配置项,则优先以Broker地址执行命令,如果不配置Broker地址,则对集群中所有主机执行命令,只支持一个Broker地址。-b格式为ip:port,port默认是10911
  5. 在tools下可以看到很多命令,但并不是所有命令都能使用,只有在MQAdminStartup中初始化的命令才能使用,你也可以修改这个类,增加或自定义命令
  6. 由于版本更新问题,少部分命令可能未及时更新,遇到错误请直接阅读相关命令源码

相关的命令比较多可以在官网查看。

集群监控平台

incubator-rocketmq-externals这个项目是RocketMQ的一个扩展的开源项目,我们直接从github把这个项目clone下来,然后对其中的rocketmq-console模块进行编译打包,然后运行就可以了。

代码语言:javascript
复制
# 在打包前要闲配置我们的NameServer集群地址
rocketmq.config.namesrvAddr=192.168.1.1:9876;192.168.1.2:9876

git clone https://github.com/apache/rocketmq-externals
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true

#启动rocketmq-console
java -jar rocketmq-console-ng-1.0.0.jar

启动成功后,就可以通过http://localhost:8080访问控制界面了:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 故里学Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 集群模式
  • 集群配置
  • mqadmin管理工具
  • 集群监控平台
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档