RocketMq4.x安装及集群配置

RocketMq4.x安装及集群配置

单节点安装RocketMQ4.x

本地环境需配置JAVA_HOME,MAVEN_HOME

  • 下载源码包

    [下载地址]http://rocketmq.apache.org/dowloading/releases/

  • 解压

    unzip rocketmq-all-4.4.0-source-release.zip
    
  • 项目构建

    # 进入解压目录
    cd rocketmq-all-4.4.0
    # 构建项目
    mvn -Prelease-all -DskipTests clean install -U
    
  • 启动nameServer服务

    # 进入目标路径
    cd distribution/target/apache-rocketmq
    # 修改nameServer启动内存大小
    # 修改bin/runserver.sh文件
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    # 启动服务
    nohup ./bin/mqnamesrv &
    # 查看nohup.out
    tail -f nohup.out
    # 出现The Name Server boot success. serializeType=JSON 表示启动成功
    
  • 启动broker服务

    # 修改broker启动内存大小
    # 修改bin/runbroker.sh文件
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m"
    # 启动服务
    # -n指定nameserver地址,nameserver服务端口为9876, broker默认端口 10911
    nohup ./bin/mqbroker -n localhost:9876 &
    # 查看nohup.out
    tail -f nohup.out
    # 出现The broker[iZuf62iexj3ztw81eg1cnoZ, 172.19.206.22:10911] boot success. serializeType=JSON and name server is localhost:9876 表示启动成功
    
  • jps查看服务进程

    [rocketmq@iZuf62iexj3ztw81eg1cnoZ apache-rocketmq]$ jps
    8664 NamesrvStartup
    8937 BrokerStartup
    15790 Jps
    [rocketmq@iZuf62iexj3ztw81eg1cnoZ apache-rocketmq]$ 
    
  • 验证是否成功

    #设置名称服务地址
    export NAMESRV_ADDR=localhost:9876
    #投递消息
    sh ./bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
    # SendResult [sendStatus=SEND_OK, msgId= ...
    #消费消息
    sh ./bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
    # ConsumeMessageThread_%d Receive New Messages: [MessageExt...
    

安装RocketMQ4.x可视化控制台

  • 下载源码包

    [下载地址]https://github.com/apache/rocketmq-externals/releases

  • 解压

    tar -zxvf rocketmq-externals-rocketmq-console-1.0.0.tar.gz
    
  • 项目构建

    # 进入解压目录
    cd rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/
    # 项目构建
    mvn clean package -Dmaven.test.skip=true
    
  • 启动rocketmq-console服务

    # 修改application.properties文件
    vi ./target/classes/application.properties
    # 指定本机nameserver地址
    rocketmq.config.namesrvAddr=127.0.0.1:9876
    # 启动服务
    java -jar ./target/rocketmq-console-ng-1.0.0.jar
    # Started App in 10.317 seconds (JVM running for 11.379) 说明启动成功
    
  • 浏览器访问

    http://localhost:8080/

    rocketmq-console-01.png

生产者常见核心配置

properties desc
compressMsgBodyOverHowmuch 消息超过默认字节4096后进行压缩
retryTimesWhenSendFailed 失败重发次数
maxMessageSize 最大消息配置,默认128k
defaultTopicQueueNums 自动创建服务器不存在的topic,默认创建的队列数
topicQueueNums 主题下面的队列数量,默认是4
autoCreateTopicEnable 是否自动创建主题Topic, 开发建议为true,生产要为false
autoCreateSubscriptionGroup 是否允许 Broker 自动创建订阅组,建议线下开发开启,线上关闭
brokerClusterName 集群名称
brokerId 0表示Master主节点 大于0表示从节点
brokerIP1 Broker服务地址
listenPort Broker监听的端口号
brokerRole broker角色 ASYNC_MASTER/ SYNC_MASTER/ SLAVE
deleteWhen 每天执行删除过期文件的时间,默认每天凌晨4点
flushDiskType 刷盘策略, 默认为 ASYNC_FLUSH(异步刷盘), 另外是SYNC_FLUSH(同步刷盘)
mapedFileSizeCommitLog 单个conmmitlog文件大小,默认是1GB
mapedFileSizeConsumeQueue ConsumeQueue每个文件默认存30W条,可以根据项目调整
storePathRootDir 存储消息以及一些配置信息的根目录 默认为用户的 ${HOME}/store
storePathCommitLog commitlog存储目录默认为${storePathRootDir}/commitlog
storePathIndex 消息索引存储路径
syncFlushTimeout 同步刷盘超时时间
diskMaxUsedSpaceRatio 检测可用的磁盘空间大小,超过后会写入报错

集群模式

  • 单节点 :

    优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢

    缺点:不可靠,如果宕机,会导致服务不可用

  • 主从(异步、同步双写) :

    优点:

    ​ 同步双写消息不丢失;

    ​ 异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入;

    缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker,重启让从节点成为主节点

  • 双主:

    优点:配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息

    缺点: master机器宕机期间,未被消费的消息在机器恢复之前不可消费,实时性会受到影响

  • 双主双从,多主多从模式(异步复制)

    优点:磁盘损坏,消息丢失的非常少,消息实时性不会受影响,Master 宕机后,消费者仍然可以从Slave消费

    缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息

  • 双主双从,多主多从模式(同步双写)

    优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高

    缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机

主从模式

  • Broker分为master与slave,一个master可以对应多个Slave,但一个slave只能对应一个master,master与slave通过相同的Broker Name来匹配,不同的broker Id来定义是master还是slave

    • Broker向所有的NameServer结点建立长连接,定时注册Topic和发送元数据信息

    • NameServer定时扫描(默认2分钟)所有存活broker的连接, 如果超过时间没响应则断开连接(心跳检测),但是consumer客户端不能感知,consumer定时(30s)从NameServer获取topic的最新信息,所以broker不可用时,consumer最多最需要30s才能发现

      (Producer的机制一样,在未发现broker宕机前发送的消息会失败)

  • 只有master才能进行写入操作,slave不允许写入只能同步,同步策略取决于master的配置。

  • 客户端消费可以从master和slave消费,默认消费者都从master消费,如果在master挂后,客户端从NameServer中感知到Broker宕机,就会从slave消费, 感知非实时,存在一定的滞后性,slave不能保证master的消息100%都同步过来了,会有少量的消息丢失。但一旦master恢复,未同步过去的消息会被最终消费掉

  • 如果consumer实例的数量比message queue的总数量还多的话,多出来的consumer实例将无法分到queue,也就无法消费到消息,也就无法起到分摊负载的作用,所以需要控制让queue的总数量大于等于consumer的数量

单机部署主从模式

异步复制,异步刷盘

  • 前提

    本地环境需配置JAVA_HOME,MAVEN_HOME

  • 端口规划

    主机 nameserver(端口) broker(端口)
    host01 9876 10911
    host02 9976 11911
  • 下载并解压

    # 解压rocketmq-all-4.4.0-source-release.zip为rocketmq-01和rocketmq-02两个名称不同的路径
    [rocketmq@localhost software]$ ll
    总用量 4624
    drwxr-xr-x. 23 rocketmq rocketmq    4096 1月   2 15:42 rocketmq-01
    drwxr-xr-x. 23 rocketmq rocketmq    4096 1月   2 15:36 rocketmq-02
    -rw-rw-r--.  1 rocketmq rocketmq 1801282 12月 23 18:01 rocketmq-all-4.4.0-source-release.zip
    
  • 项目构建

    # 分别进入rocketmq-01和rocketmq-02目录,执行一下命令
    mvn -Prelease-all -DskipTests clean install -U
    
  • 配置

    主节点(rocketmq-01)

    nameserver采用默认配置,无需修改

    broker配置修改如下

    # 进入配置目录
    cd rocketmq-01/distribution/target/apache-rocketmq/conf/2m-2s-async/
    
    # 编辑broker-a.properties,添加或修改以下内容
    namesrvAddr=127.0.0.1:9876;127.0.0.1:9976
    brokerClusterName=RKCluster
    brokerName=broker-a
    brokerId=0
    # broker对应ip地址 (常见于sendDefaultImpl call timeout错误)
    brokerIP1=192.168.11.220
    deleteWhen=04
    fileReservedTime=48
    brokerRole=ASYNC_MASTER
    flushDiskType=ASYNC_FLUSH
    #存储路径
    storePathRootDir=/home/rocketmq/rk/h01/rootdir-a-m
    storePathCommitLog=/home/rocketmq/rk/h01/commitlog-a-m
    

    从节点(rocketmq-01)

    nameserver配置修改如下

    # 进入配置目录
    cd rocketmq-02/distribution/target/apache-rocketmq/conf/
    # 新建namesrv.properties文件,添加一些内容,指定nameserver启动端口
    
    #!/bin/sh
    # 指定nameserver访问端口
    listenPort=9976
    

    broker配置修改如下

    # 进入配置目录
    cd rocketmq-02/distribution/target/apache-rocketmq/conf/2m-2s-async/
    
    # 编辑broker-a-s.properties,添加或修改以下内容
    namesrvAddr=127.0.0.1:9876;127.0.0.1:9976
    brokerClusterName=RKCluster
    brokerName=broker-a
    brokerId=1
    # broker对应ip地址 (常见于sendDefaultImpl call timeout错误)
    brokerIP1=192.168.11.220
    deleteWhen=04
    fileReservedTime=48
    brokerRole=SLAVE
    flushDiskType=ASYNC_FLUSH
    # 指定启动端口
    listenPort=11911
    # 存储路径
    storePathRootDir=/home/rocketmq/rk/h02/rootdir-a-m
    storePathCommitLog=/home/rocketmq/rk/h02/commitlog-a-m
    
  • 内存修改

    若本机搭建可自行修改服务启动内存

    # nameserver 启动内存修改
    # rocketmq-01/distribution/target/apache-rocketmq/bin/runserver.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    # rocketmq-01/distribution/target/apache-rocketmq/bin/runbroker.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m"
    
  • 启动

    先启动nameserver服务

    • host01

      # 进入目录
      # cd rocketmq-01/distribution/target/apache-rocketmq/
      nohup ./bin/mqnamesrv &
      
    • host02

      # 进入目录
      # cd rocketmq-02/distribution/target/apache-rocketmq/
      nohup ./bin/mqnamesrv -c ./conf/namesrv.properties &
      

    启动broker服务

    • host01

      # 进入目录
      # cd rocketmq-01/distribution/target/apache-rocketmq/
      nohup ./bin/mqbroker -c ./conf/2m-2s-async/broker-a.properties &
      
    • host02

      # 进入目录
      # cd rocketmq-02/distribution/target/apache-rocketmq/
      nohup ./bin/mqbroker -c ./conf/2m-2s-async/broker-a-s.properties &
      
  • 启动控制台并访问

    自行安装rocketmq-externals

    下载地址:https://github.com/apache/rocketmq-externals/branches

    1m1s.png

双主双从(同步赋值、异步刷盘)

  • 集群规划

    主机地址 brokerName brokerId nameServer
    192.168.11.120 broker-a 0 yes
    192.168.11.121 broker-a-s 1 yes
    192.168.11.122 broker-b 0 -
    192.168.11.123 broker-b-s 1 -
  • 下载安装

    # 四台主机解压rocketmq-all-4.4.0-source-release.zip为rocketmq
    [rocketmq@localhost software]$ ll
    总用量 4624
    drwxr-xr-x. 23 rocketmq rocketmq    4096 1月   2 15:42 rocketmq
    
  • 项目构建

    # 四台主机进入rocketmq目录,执行命令
    mvn -Prelease-all -DskipTests clean install -U
    
  • nameServer

    • 修改内存配置

      # 192.168.11.120, 192.168.11.121 都要修改
      # rocketmq/distribution/target/apache-rocketmq/bin/runserver.sh
      JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      
    • 启动命令

      # 分别启动192.168.11.120, 192.168.11.121的nameServer
      nohup sh bin/mqnamesrv &
      
  • broker

    • 修改内存配置

      # 192.168.11.120, 192.168.11.121, 192.168.11.122, 192.168.11.123 都要修改
      # rocketmq/distribution/target/apache-rocketmq/bin/runbroker.sh
      JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m"
      
    • 修改配置文件及启动命令

      192.168.11.120 (broker-a master节点)

      # rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a.properties
      namesrvAddr=192.168.11.120:9876;192.168.11.121:9876
      brokerClusterName=fqxCluster
      brokerName=broker-a
      brokerId=0
      deleteWhen=04
      fileReservedTime=48
      brokerRole=SYNC_MASTER
      flushDiskType=ASYNC_FLUSH
      
      defaultTopicQueueNums=4
      #是否允许自动创建Topic,建议线下开启,线上关闭
      autoCreateTopicEnable=true
      #是否允许自动创建订阅组,建议线下开启,线上关闭
      autoCreateSubscriptionGroup=false
      
      #存储路径,根据需求进行配置绝对路径,默认是家目录下面
      storePathRootDir=/home/rocketmq/rk/rootdir-a-m
      storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
      
      # 启动命令
      cd rocketmq/distribution/target/apache-rocketmq
      nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
      

      192.168.11.121 (broker-a slave节点)

      # rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a-s.properties
      namesrvAddr=192.168.11.120:9876;192.168.11.121:9876
      brokerClusterName=fqxCluster
      brokerName=broker-a
      brokerId=1
      deleteWhen=04
      fileReservedTime=48
      brokerRole=SLAVE
      flushDiskType=ASYNC_FLUSH
      
      defaultTopicQueueNums=4
      #是否允许自动创建Topic,建议线下开启,线上关闭
      autoCreateTopicEnable=true
      #是否允许自动创建订阅组,建议线下开启,线上关闭
      autoCreateSubscriptionGroup=false
      
      #存储路径,根据需求进行配置绝对路径,默认是家目录下面
      storePathRootDir=/home/rocketmq/rk/rootdir-a-m
      storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
      
      # 启动命令
      cd rocketmq/distribution/target/apache-rocketmq
      nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &
      

      192.168.11.122 (broker-b master节点)

      # rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-b.properties
      namesrvAddr=192.168.11.120:9876;192.168.11.121:9876
      brokerClusterName=fqxCluster
      brokerName=broker-b
      brokerId=0
      deleteWhen=04
      fileReservedTime=48
      brokerRole=SYNC_MASTER
      flushDiskType=ASYNC_FLUSH
      
      defaultTopicQueueNums=4
      #是否允许自动创建Topic,建议线下开启,线上关闭
      autoCreateTopicEnable=true
      #是否允许自动创建订阅组,建议线下开启,线上关闭
      autoCreateSubscriptionGroup=false
      
      #存储路径,根据需求进行配置绝对路径,默认是家目录下面
      storePathRootDir=/home/rocketmq/rk/rootdir-a-m
      storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
      
      # 启动命令
      cd rocketmq/distribution/target/apache-rocketmq
      nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &
      

      192.168.11.123 (broker-b slave节点)

      # rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a-s.properties
      namesrvAddr=192.168.11.120:9876;192.168.11.121:9876
      brokerClusterName=fqxCluster
      brokerName=broker-b
      brokerId=1
      deleteWhen=04
      fileReservedTime=48
      brokerRole=SLAVE
      flushDiskType=ASYNC_FLUSH
      
      defaultTopicQueueNums=4
      #是否允许自动创建Topic,建议线下开启,线上关闭
      autoCreateTopicEnable=true
      #是否允许自动创建订阅组,建议线下开启,线上关闭
      autoCreateSubscriptionGroup=false
      
      #存储路径,根据需求进行配置绝对路径,默认是家目录下面
      storePathRootDir=/home/rocketmq/rk/rootdir-a-m
      storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
      
      # 启动命令
      cd rocketmq/distribution/target/apache-rocketmq
      nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &
      
  • 自行安装rocketmq-externals,在控制台查看集群运行情况

你可能感兴趣的:(RocketMq4.x安装及集群配置)