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 &
      

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

  • 集群规划

    主机地址 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,在控制台查看集群运行情况

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,302评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,563评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,433评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,628评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,467评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,354评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,777评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,419评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,725评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,768评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,543评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,387评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,794评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,032评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,305评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,741评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,946评论 2 336

推荐阅读更多精彩内容