您的位置:首页 > 其它

RocketMQ 集群搭建

2022-01-17 23:01 896 查看

[TOC]


RocketMQ 集群介绍

RocketMQ 集群分类

  • 单机: 一个 broker 提供服务(宕机后服务瘫痪)
  • 集群
      多个 broker 提供服务(单机宕机后消息无法及时被消费)
    • 多个 master 多个 slave master 到 slave 消息同步方式为同步(较异步方式性能略低,消息无延迟)
    • master 到 slave 消息同步方式为异步(较同步方式性能略高,数据略有延迟)

    RocketMQ 集群工作流程

    • 步骤1:NameServer 启动,开启监听,等待 broker、producer 与 consumer 连接
    • 步骤2:broker 启动,根据配置信息,连接所有的 NameServer,并保持长连接 如果 broker 中有现存数据, NameServer 将保存 topic 与 broker 关系
  • 步骤3:producer 发信息,连接某个 NameServer,并建立长连接
  • 步骤4:producer 发消息
      若果 topic 存在,由 NameServer 直接分配
    • 如果 topic 不存在,由 NameServer 创建 topic 与 broker 关系,并分配
  • 步骤5:producer 在 broker 的 topic 选择一个消息队列(从列表中选择)
  • 步骤6:producer 与 broker 建立长连接,用于发送消息
  • 步骤7:producer 发送消息
  • comsumer 工作流程同 producer

  • 集群搭建

    示例:双主双从集群搭建说明

    • 192.168.1.135:master1、slave2
    • 192.168.1.136:master2、slave1

    配置 host

    两台主机上分别 vi /etc/hosts

    # nameserver
    192.168.184.128 rocketmq-nameserver1
    192.168.184.129 rocketmq-nameserver2
    # broker
    192.168.184.128 rocketmq-master1
    192.168.184.129 rocketmq-slave2
    192.168.184.129 rocketmq-master2
    192.168.184.128 rocketmq-slave1

    配置完毕后重启网卡

    systemctl restart network

    防火墙策略

    关闭防火墙

    # 关闭防火墙
    systemctl stop firewalld.service
    # 查看防火墙的状态
    firewall-cmd --state
    # 禁止firewall开机启动
    systemctl disable firewalld.service

    或开启指定端口对外提供服务

    # 开放name server默认端口
    firewall-cmd --remove-port=9876/tcp --permanent
    # 开放master默认端口
    firewall-cmd --remove-port=10911/tcp --permanent
    # 开放slave默认端口 (当前集群模式可不开启)
    firewall-cmd --remove-port=11011/tcp --permanent
    # 重启防火墙
    firewall-cmd --reload

    配置环境变量

    vi /etc/profile

    #set rocketmq
    ROCKETMQ_HOME=/rocketmq
    PATH=$PATH:$ROCKETMQ_HOME/bin
    export ROCKETMQ_HOME PATH

    刷新配置

    source /etc/profile

    数据目录

    创建集群服务器的数据存储目录

    mkdir /rocketmq/store
    mkdir /rocketmq/store/commitlog
    mkdir /rocketmq/store/consumequeue
    mkdir /rocketmq/store/index

    注意:master 与 slave 如果在同一个虚拟机中部署,需要将存储目录区分开。

    配置文件

    master 配置

    vi broker-a.properties:

    #所属集群名字
    brokerClusterName=rocketmq-cluster
    #broker名字,注意此处不同的配置文件填写的不一样
    brokerName=broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId=0
    #nameServer地址,分号分割
    namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2: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

    slave 配置

    vi broker-a-s.properties

    #所属集群名字
    brokerClusterName=rocketmq-cluster
    #broker名字,注意此处不同的配置文件填写的不一样
    brokerName=broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId=1
    #nameServer地址,分号分割
    namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2: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
    #destroyMapedFileIntervalForcibly=120000
    #redeleteHangedFileInterval=120000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #存储路径
    storePathRootDir=/rocketmq/store-slave
    #commitLog 存储路径
    storePathCommitLog=/rocketmq/store-slave/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/rocketmq/store-slave/consumequeue
    #消息索引存储路径
    storePathIndex=/rocketmq/store-slave/index
    #checkpoint 文件存储路径
    storeCheckpoint=/rocketmq/store-slave/checkpoint
    #abort 文件存储路径
    abortFile=/rocketmq/store-slave/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

    启动内存

    检查启动内存:vi /rocketmq/bin/runbroker.sh

    # 开发环境配置 JVM Configuration
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

    启动服务

    bin 目录下依次启动:

    nohup sh mqnamesrv &
    
    nohup sh mqbroker -c ../conf/2m-2s-syncbroker-a.properties &
    
    nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties &

    rocketmq-console:集群监控平台

    • incubator-rocketmq-externals是一个基于 rocketmq 基础之上所扩展开发的开源项目。

    • 是一款基于 java 环境开发的(springboot)的管理控制台工具。

    • 获取地址:https://github.com/apache/rocketmq-externals

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: