RocketMQ集群部署

恢弘志士之气,不宜妄自菲薄。这篇文章主要讲述RocketMQ集群部署相关的知识,希望能为你提供帮助。


以下我们在Centos7操作系统上以RocketMQ4.3.1为例来进行一下安装




集群部署模式说明



单master



这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用






多master模式
  • 一个集群无Slave,全是Master,例如2个Master或者3个Master。


优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢失(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。




缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。






多Master多Slave模式,异步复制
  • 每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟,毫秒级。


优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master 宕机后,消费者仍然可以从Slave消费,此过程对应用透明。不需要人工干预。性能同多 Master 模式几乎一样。




缺点:Master宕机,磁盘损坏情况,会丢失少量消息。






多Master多Slave模式,同步双写
  • 每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用才返回成功。


优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。


【RocketMQ集群部署】

缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。






选定模式


为了保证我们消息的完整性和可靠性,我们采用多master多slave同步双写的方式搭建。其他模式可根据实际业务场景搭建,万变不离其宗。






环境准备


下载地址 http://rocketmq.apache.org/release_notes/release-notes-4.3.1/




Maven环境(如果不安装可视化插件,此步骤可省略)




可视化插件下载地址 https://github.com/apache/rocketmq-externals/releases/tag/rocketmq-console-1.0.0


  • 分配节点信息
IP地址
主机名
192.168.5.57
risen01
192.168.5.58
risen02
192.168.5.59
risen03
  • 分配角色信息
IP地址
角色(端口)
192.168.5.57
Master0(10911)+slave1(10920)
192.168.5.58
Master0(10911)+slave1(10920)
192.168.5.59
slave2(10920)
  • 注意:++涉及到分布式安装,如果有过分布式安装经验的同学,通俗的来讲配置文件多数大部分是一样的,所以我们可以巧妙的shell脚本或者scp等命令,而无需像下面一样一个配置文件一个配置文件的来配置,还好下面只是三台机器,如果多加几台,那么工作量无疑会很大。++


操作用户


root






开始安装



解压rocketmq压缩包


操作节点:192.168.5.57




操作用户:root


  1. 将安装包通过sftp或者客户端工具或者rz命令等方式上传至/usr/local目录下
  2. 在/usr/local目录下执行解压命令并重命名为rocketmq-4.3.1
    unzip rocketmq-all-4.3.1-bin-release.zip

    mv rocketmq-all-4.3.1-bin-release rocketmq-4.3.1

  3. RocketMQ解压


修改jvm参数配置


操作节点:192.168.5.57




操作用户:root


  1. 进入到rocketmq-4.3.1目录下的bin目录下,编辑nameserver服务需要的启动文件runserver.sh


    JVM Configuration第一行修改为下面


    #====================================================================
    # JVM Configuration
    #====================================================================
    java_OPT="$JAVA_OPT -server -Xms1g -Xmx4g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    保存并退出(此参数配置根据实际服务器硬件条件调大或调小)

  2. 进入到rocketmq-4.3.1目录下的bin目录下,编辑broker服务需要的启动文件runbroker.sh


    JVM Configuration第一行修改为下面


    JAVA_OPT="$JAVA_OPT -server -Xms2g -Xmx4g -Xmn1g"
    保存并退出(此参数配置根据实际服务器硬件条件调大或调小)



配置环境变量


操作节点:192.168.5.57




操作用户:root


  1. 添加ROCKETMQ_HOME环境变量,修改/etc/profile并新增
  2. export ROCKETMQ_HOME=/usr/local/rocketmq-4.3.1
    export PATH=$PATH:$ROCKETMQ_HOME/bin



配置文件介绍


操作节点:192.168.5.57




操作用户:root


  1. 进入到rocketmq-4.3.1目录下的conf目录下如下图
    配置文件介绍
  2. 这里我们只需要配置2m-2s-sync这个目录即可。
  • 2m-2s-async 目录为双master双slave异步复制配置目录
  • 2m-2s-sync 目录为双master双slave同步双写配置目录
  • 2m-noslave 目录为多master配置目录


配置第一个主节点


操作节点:192.168.5.57




操作用户:root


  1. 进入到/usr/local/rocketmq-4.3.1/conf/2m-2s-sync目录下,编辑broker-a.properties配置文件(以下配置信息如果已存在则可以跳过):
    #所属集群名字
    brokerClusterName=rocketmq_cluster
    #通过配置文件指定机器的集群和broker归属,比如brokerName一样的属于同一个broker,一个broker只能有一个master,可以有多个slave,brokerId为0的为master,其他的为slave。
    brokerName=broker-a
    #0表示Master,> 0表示Slave
    brokerId=0
    #删除文件时间点,默认凌晨 4点
    deleteWhen=04
    #文件保留时间,默认 48 小时
    fileReservedTime=48
    #Broker 的角色
    brokerRole=SYNC_MASTER
    #异步刷新ASYNC_FLUSH /同步刷新SYNC_FLUSH
    flushDiskType=SYNC_FLUSH

    #nameServer地址,分号分割
    namesrvAddr=192.168.5.57:9876; 192.168.5.58:9876
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口
    listenPort=10911
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #存储路径
    storePathRootDir=/data/rocketmq-m
    #commitLog 存储路径
    storePathCommitLog=/data/rocketmq-m/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/data/rocketmq-m/consumequeue
    #消息索引存储路径
    storePathIndex=/data/rocketmq-m/index
    #checkpoint 文件存储路径
    storeCheckpoint=/data/rocketmq-m/checkpoint
    #abort 文件存储路径
    abortFile=/data/rocketmq-m/abort
    #限制的消息大小
    maxMessageSize=65536

  2. 创建存储路径执行命令
    mkdir /data/rocketmq-m/commitlog,consumequeue,index,checkpoint,abort -p



启动第一个主节点


操作节点:192.168.5.57




操作用户:root


  1. 启动第一个主节点服务(进入到/usr/local/rocketmq-4.3.1/bin目录下执行命令)




  2. mqnamesrv





  3. 启动第一个主节点服务
  4. 出现以上启动信息说明nameserver服务启动成功。
  5. 启动第一个主节点进程(进入到/usr/local/rocketmq-4.3.1/bin目录下执行命令)




  6. ./mqbroker -c ../conf/2m-2s-sync/broker-a.properties





  7. 启动第一个主节点进程
  8. 出现以上启动信息说明nameserver进程启动成功。
  9. 检查启动进程
  10. 启动进程
  11. 出现以上启动信息更加验证了master启动成功。


配置第一个子节点


操作节点:192.168.5.57




操作用户:root


  1. 进入到/usr/local/rocketmq-4.3.1/conf/2m-2s-sync目录下编辑broker-a-s.properties配置文件(以下配置信息如果已存在则可以跳过)
    brokerClusterName=rocketmq_cluster
    brokerName=broker-a
    brokerId=1
    deleteWhen=04
    fileReservedTime=48
    brokerRole=SLAVE
    flushDiskType=SYNC_FLUSH
    #nameServer地址,分号分割
    namesrvAddr=192.168.5.57:9876; 192.168.5.58:9876
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口
    listenPort=10920
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #commitLog 存储路径
    storePathCommitLog=/data/rocketmq-s/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/data/rocketmq-s/consumequeue
    #消息索引存储路径
    storePathIndex=/data/rocketmq-s/index
    #checkpoint 文件存储路径
    storeCheckpoint=/data/rocketmq-s/checkpoint
    #abort 文件存储路径
    abortFile=/data/rocketmq-s/abort
    #限制的消息大小
    maxMessageSize=65536

  2. 创建存储路径,执行命令
mkdir /data/rocketmq-s/commitlog,consumequeue,index,checkpoint,abort -p





启动第一个子节点


操作节点:192.168.5.57




操作用户:root


  1. 启动主节点进程(进入到/usr/local/rocketmq-4.3.1/bin目录下执行命令)




  2. ./mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties





  3. 启动第一个子节点
  4. 出现以上启动信息说明nameserver进程启动成功。


配置第二个主节点


操作节点:192.168.5.58




操作用户:root


  1. 按照上面同样的配置,配置好jvm参数
  2. 进入到/usr/local/rocketmq-4.3.1/conf/2m-2s-sync目录下,编辑broker-b.properties配置文件(以下配置信息如果已存在则可以跳过)
    brokerClusterName=rocketmq_cluster
    brokerName=broker-b
    brokerId=0
    deleteWhen=04
    fileReservedTime=48
    brokerRole=SYNC_MASTER
    flushDiskType=SYNC_FLUSH
    #nameServer地址,分号分割
    namesrvAddr=192.168.5.57:9876; 192.168.5.58:9876
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口
    listenPort=10911
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #存储路径
    storePathRootDir=/data/rocketmq-m
    #commitLog 存储路径
    storePathCommitLog=/data/rocketmq-m/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/data/rocketmq-m/consumequeue
    #消息索引存储路径
    storePathIndex=/data/rocketmq-m/index
    #checkpoint 文件存储路径
    storeCheckpoint=/data/rocketmq-m/checkpoint
    #abort 文件存储路径
    abortFile=/data/rocketmq-m/abort
    #限制的消息大小
    maxMessageSize=65536

  3. 创建存储路径执行命令
    mkdir /data/rocketmq-m/commitlog,consumequeue,index,checkpoint,abort -p



启动第二个主节点


操作节点:192.168.5.58




操作用户:root


  1. 启动主节点服务(进入到/usr/local/rocketmq-4.3.1/bin目录下执行命令)




  2. ./mqnamesrv






启动第二个主节点服务
出现以上启动信息说明nameserver服务启动成功。

  1. 启动第二个主节点进程(进入到/usr/local/rocketmq-4.3.1/bin目录下执行命令)




  2. ./mqbroker -c ../conf/2m-2s-sync/broker-b.properties





  3. 启动第二个主节点进程
  4. 出现以上启动信息说明nameserver进程启动成功


配置第二个子节点


操作节点:192.168.5.58




操作用户:root


  1. 进入到/usr/local/rocketmq-4.3.1/conf/2m-2s-sync目录下,编辑broker-b-s.properties配置文件(以下配置信息如果已存在则可以跳过)
    brokerClusterName=rocketmq_cluster
    brokerName=broker-b
    brokerId=1
    deleteWhen=04
    fileReservedTime=48
    brokerRole=SLAVE
    flushDiskType=SYNC_FLUSH
    #nameServer地址,分号分割
    namesrvAddr=192.168.5.57:9876; 192.168.5.58:9876
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口
    listenPort=10920
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #commitLog 存储路径
    storePathCommitLog=/data/rocketmq-s/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/data/rocketmq-s/consumequeue
    #消息索引存储路径
    storePathIndex=/data/rocketmq-s/index
    #checkpoint 文件存储路径
    storeCheckpoint=/data/rocketmq-s/checkpoint
    #abort 文件存储路径
    abortFile=/data/rocketmq-s/abort
    #限制的消息大小
    maxMessageSize=65536

  2. 创建存储路径,执行命令
    mkdir /data/rocketmq-s/commitlog,consumequeue,index,checkpoint,abort -p



启动第二个子节点


操作节点:192.168.5.58




操作用户:root


  1. 启动主节点进程(进入到/usr/local/rocketmq-4.3.1/bin目录下执行命令)




  2. ./mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties





  3. 启动第二个子节点
  4. 出现以上启动信息说明nameserver进程启动成功


配置第三个子节点


操作节点:192.168.5.59




操作用户:root


  1. 进入到/usr/local/rocketmq-4.3.1/conf/2m-2s-sync目录下,执行命令
    cp broker-b-s.properties broker-c-s.properties

  2. 编辑broker-c-s.properties文件
    brokerClusterName=rocketmq_cluster
    brokerName=broker-b
    brokerId=2
    deleteWhen=04
    fileReservedTime=48
    brokerRole=SLAVE
    flushDiskType=SYNC_FLUSH
    #nameServer地址,分号分割
    namesrvAddr=192.168.5.57:9876; 192.168.5.58:9876
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口
    listenPort=10920
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #commitLog 存储路径
    storePathCommitLog=/data/rocketmq-s/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/data/rocketmq-s/consumequeue
    #消息索引存储路径
    storePathIndex=/data/rocketmq-s/index
    #checkpoint 文件存储路径
    storeCheckpoint=/data/rocketmq-s/checkpoint
    #abort 文件存储路径
    abortFile=/data/rocketmq-s/abort
    #限制的消息大小
    maxMessageSize=65536

  3. 创建存储路径,执行命令
    mkdir /data/rocketmq-s/commitlog,consumequeue,index,checkpoint,abort -p



启动第三个子节点


操作节点:192.168.5.59




操作用户:root


  1. 启动主节点进程,进入到/usr/local/rocketmq-4.3.1/bin目录下执行命令




  2. ./mqbroker -c ../conf/2m-2s-sync/broker-c-s.properties





  3. image


完成搭建


截止到这一步,整个集群的搭建就算是完成了。上述所有涉及到的执行命令,如果启动无误,均可后台执行(后台自行百度命令nohub,这里不再阐述)






安装可视化插件


操作系统Windows


  1. 我已经将上面可视化插件放在的D盘目录下,进入到D:\\rocketmq-externals-rocketmq-console-1.0.0\\rocketmq-console\\src\\main\\resources目录下修改application.properties文件:
    可视化插件配置
  • server.port为可视化插件的端口,
  • rocketmq.config.namesrvAddr为rocketmq集群的主节点配置
  • rocketmq.config.dataPath为插件的日志目录
  • 修改为紫色框中的配置即可,其中
  • 编译可视化插件,将下载好的可视化插件,解压后,通过cmd进行编译,执行命令
    ???mvn  clean  package  -Dmaven.test.skip=true
    ??Maven编译出现以上信息则说明编译打包成功,此时会在该目录下生成一个target目录,我们只需要里面的rocketmq-console-ng-1.0.0.jar这个文件
  • 启动可视化插件


操作节点:192.168.5.59




操作用户:root


  • 将rocketmq-console-ng-1.0.0.jar上传至/usr/local/rocketmq-4.3.1目录下,然后执行命令




  • java -jar rocketmq-console-ng-1.0.0.jar





  • 启动可视化插件
  • 即可启动可视化插件,出现以上信息说明启动成功。然后我们通过端口访问一下: http://192.168.5.59:18080
  • 可视化插件展示
  • 出现以上界面,则证明没有问题,可以清楚的看到整个集群的节点角色信息以及版本和消息,主题的使用情况等。无误后,我们可以将java -jar 后台执行。


问题总结
  • Rocketmq4.3.1需要的jdk为1.8,如果环境中已存在其他版本jdk,那么该怎么办呢?
  • 问题一
  • Metaspacesize为jdk1.8新特性,所以此时我们需要单独为Rocketmq4.3.1指定jdk,只需要向runserver.sh和runbroker.sh文件中添加一句




  • export JAVA_HOME=jdk1.8的安装目录





微信公众号 - AmCoder(gh_de720f695ec4)。



    推荐阅读