目录

  • 1、各角色介绍
  • 2、集群搭建介绍
    • 2.1 集群特点
    • 2.2 单Master模式
    • 2.3 多Master模式
    • 2.4 多Master多Slave模式(异步)
    • 2.4 多Master多Slave模式(同步)
  • 3、双主双从集群配置
    • 3.1 服务器环境
    • 3.2 端口开放
    • 3.3 环境变量配置
    • 3.4 创建消息存储路径
    • 3.5 broker配置文件
      • 1)master1
      • 2)slave1
      • 3)master2
      • 4)slave2
    • 3.6 修改启动脚本文件
      • 1)runbroker.sh
    • 3.7 服务启动
      • 1)启动NameServe集群
      • 2)启动Broker集群

1、各角色介绍

  • Producer:消息的发送者;举例:发信者
  • Consumer:消息接收者;举例:收信者
  • Broker:暂存和传输消息;举例:邮局
  • NameServer:管理Broker;举例:各个邮局的管理机构
  • Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息
  • Message Queue:相当于是Topic的分区;用于并行发送和接收消息

2、集群搭建介绍

2.1 集群特点

  • NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
  • Broker部署相对复杂,提供brokerClusterName设置所有主从节点的集群名称,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。
  • 每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。
  • Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
  • Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
  • Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是 Producer只能和Master角色的Broker连接写入消息;Consumer可以连接 Master角色的Broker,也可以连接Slave角色的Broker来读取消息。

2.2 单Master模式

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

2.3 多Master模式

一个集群无Slave,全是Master,例如2个Master或者3个Master,这种模式的优缺点如下:

  • 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
  • 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。

2.4 多Master多Slave模式(异步)

每个Master配置一个Slave (在磁盘配置为RAID10情况xia一个M对应一个S即可) ,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:

  • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,Slave会自动切换为Master。
  • 缺点:主备有短暂消息延迟(毫秒级),Master宕机,磁盘损坏情况下会丢失少量消息。

异步复制方式是只要Master写成功,即可反馈给客户端写成功状态;

2.4 多Master多Slave模式(同步)

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

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

同步复制方式是等Master和Slave均写 成功后才反馈给客户端写成功状态;

3、双主双从集群配置

在搭建集群前,保证单机版搭建成功,因为集群和单机的安装包都一样,只是修改配置和启动方式有些不同而已,单机版本搭建参考《Linux搭建RocketMQ实例服务》

3.1 服务器环境

操作目录:

/opt/RocketMQ/cluster

3.2 端口开放

RocketMQ集群所需端口:10911、10909、9876、11011

  • nameserver 默认使用 9876 端口
  • master 默认使用 10911 端口
  • slave 默认使用11011 端口

3.3 环境变量配置

vim /etc/profile

在profile文件的末尾加入如下命令

#set rocketmq
ROCKETMQ_HOME=/data/rocketmq/rocketmq-4.9.2
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
source /etc/profile

3.4 创建消息存储路径

mkdir /data/rocketmq/store
mkdir /data/rocketmq/store/commitlog
mkdir /data/rocketmq/store/consumequeue
mkdir /data/rocketmq/store/index
mkdir /data/rocketmq/store/checkpoint
mkdir /data/rocketmq/store/abort# 创建日志输出
mkdir /opt/RocketMQ/cluster/logs -p

3.5 broker配置文件

注意:/conf/2m-2s-sync 在RocketMQ中已存在不需要额外创建

1)master1

服务器:10.0.36.41

vim /opt/RocketMQ/cluster/conf/2m-2s-sync/broker-a.properties

修改配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,主从的brokerName一致
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
#实际集群情况10.0.36.31:9876;10.0.36.32:9876
namesrvAddr=10.0.36.31:9876;10.0.36.32:9876
#当前broker监听的IP
brokerIP1=10.0.36.41
#在发送消息时,自动创建服务器不存在的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=/data/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/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=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

2)slave1

服务器:10.0.36.42

vi /opt/RocketMQ/cluster/conf/2m-2s-sync/broker-a-s.properties

修改配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,主从的brokerName一致
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
#实际集群情况10.0.36.31:9876;10.0.36.32:9876
namesrvAddr=10.0.36.31:9876;10.0.36.32:9876
#当前broker监听的IP
brokerIP1=10.0.36.42
#在发送消息时,自动创建服务器不存在的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=/data/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/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

3)master2

服务器:10.0.36.51

vi /opt/RocketMQ/cluster/conf/2m-2s-sync/broker-b.properties

修改配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,主从的brokerName一致
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
#实际集群情况10.0.36.31:9876;10.0.36.32:9876
namesrvAddr=10.0.36.31:9876;10.0.36.32:9876
#当前broker监听的IP
brokerIP1=10.0.36.51
#在发送消息时,自动创建服务器不存在的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=/data/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/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=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

4)slave2

服务器:10.0.36.52

vi /opt/RocketMQ/cluster/conf/2m-2s-sync/broker-b-s.properties

修改配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,主从的brokerName一致
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
#实际集群情况10.0.36.31:9876;10.0.36.32:9876
namesrvAddr=10.0.36.31:9876;10.0.36.32:9876
#当前broker监听的IP
brokerIP1=10.0.36.52
#在发送消息时,自动创建服务器不存在的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=/data/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/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

3.6 修改启动脚本文件

1)runbroker.sh

vim  bin/runbroker.sh

需要根据内存大小进行适当的对JVM参数进行调整:

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

####2)runserver.sh

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

3.7 服务启动

1)启动NameServe集群

分别在10.0.36.31和10.0.36.32启动NameServer

cd /opt/RocketMQ/cluster
nohup sh bin/mqnamesrv &>/opt/RocketMQ/cluster/logs/mqnamesrv.log 2>&1 &

2)启动Broker集群

分别在不同的服务器下启动broker服务

cd /opt/RocketMQ/cluster# master1:
nohup sh bin/mqbroker  -c /opt/RocketMQ/rocketmq-4.9.2/conf/2m-2s-sync/broker-a.properties &>/opt/RocketMQ/cluster/logs/broker.log 2>&1 &
# slave1:
nohup sh bin/mqbroker  -c /opt/RocketMQ/rocketmq-4.9.2/conf/2m-2s-sync/broker-a-s.properties &>/opt/RocketMQ/cluster/logs/broker.log 2>&1 &
# master2:
nohup sh bin/mqbroker  -c /opt/RocketMQ/rocketmq-4.9.2/conf/2m-2s-sync/broker-b.properties &>/opt/RocketMQ/cluster/logs/broker.log 2>&1 &
# slave2:
nohup sh bin/mqbroker  -c /opt/RocketMQ/rocketmq-4.9.2/conf/2m-2s-sync/broker-b-s.properties &>/opt/RocketMQ/cluster/logs/broker.log 2>&1 &

RocketMQ(四)Linux搭建RocketMQ集群相关推荐

  1. 在Linux搭建Kafka集群

    文章目录 前言 准备工作 安装和配置 测试 参考链接 前言 以kafka_2.13-2.8.0版本做示例,安装架构图如下所示,4台服务器,4个节点的Zookeeper集群(1主2从1观察)以及3个Ka ...

  2. Linux搭建eureka集群,基于dns搭建eureka集群

    eureka集群方案: 1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影 ...

  3. linux搭建es集群

    准备 安装docker. 安装好Docker Compose. 注意:运行内存最好8g以上,es运行会占用很多内存(2-3g) 方式1: 单机多节点. 参考官网的方式创建(docker-compose ...

  4. linux搭建Kafka集群

    前置条件 已经安装jdk并配置好环境变量,可参考<centos7安装jdk8>; 已经搭建好zookeeper集群,可参考<搭建zookeeper集群>. 服务器:node1, ...

  5. Linux 搭建Kafka集群,最新教程,细到极致

      大家好呀,今天给大家带来的是,最新版kafka集群的安装教程,希望给小伙伴们一点小小的帮助. 注意:提前安装好jdk, Jdk安装教程 1.准备安装包,Kafka官网下载 2.kafka安装需要z ...

  6. Linux 搭建zookpeer集群和配置

    zookpeer和JDK1.8下载地址 下载地址:zookpeer和jdk1.8 提取码:w189 解压以及配置zookpeer tar -zxvf zookeeper-3.4.6.tar.gz ta ...

  7. Linux 搭建Zookeeper集群

    1.使用root创建zookeeper用户: useradd zookeeper: passwd  zookeeper; 2.登录zookeeper用户,将下载的zookeeper-3.4.8.tar ...

  8. linux搭建kubernetes集群(一主二从)

    目录 1.环境准备 1.1禁用swap(kubernetes特性) 1.2 关闭iptables(三台机器都要设置) 1.3 修改主机名(三台机器都要设置) 1.4 域名解析,ssh免密登录 2.安装 ...

  9. Linux搭建Rabbitmq集群

    1.1 添加其他用户 133.134.135 因为 guest 用户只能在本机访问,添加一个 admin 用户,密码也是 admin ./rabbitmqctl add_user admin admi ...

  10. Linux搭建RabbitMQ集群环境

    文章目录 环境说明 Erlang安装 下载安装包 安装 验证 RabbitMQ安装 下载安装包 安装 启动RabbitMQ 设置开机自动启动 安装管理界面 创建用户 登录管理界面 集群配置 前提条件 ...

最新文章

  1. Android Opengl
  2. 哺乳动物亚种在物种进化中至关重要
  3. vc2008中使用boost库
  4. UIModalPresentationStyle 各种类型的区别
  5. JS之数组元素排序方法sort
  6. 04_Spring中使用Quartz
  7. 哪个行业既锻炼人又便于今后创业?
  8. static、const、static const分析
  9. Mybatis-学习笔记(8)常用的注解
  10. native2ascii编码转换
  11. 深入浅出计算机组成原理
  12. C# 将方形图片剪切为圆形(winForm)
  13. 基于ebpf统计docker容器网络流量
  14. 微信h5使用audio不会自动播放
  15. 知识产权服务代理行业税收政策
  16. 使用Python进行数据关联分析
  17. ps3本服务器维修,ps3端ftp服务器
  18. 【离散数学】重要等价公式和重言蕴含式
  19. 可以像微信钱包一样?2020年数字钱包技术重要的进化方向(上)
  20. java 发送企业邮箱_java发送企业邮箱

热门文章

  1. JS: 百度地图与腾讯/高德地图经纬度转换
  2. 中国城市新分级名单(转)
  3. 怎样写好一份IT技术岗位的简历
  4. 手机端显示电脑端隐藏html源码,div+css实现电脑端显示手机端隐藏代码
  5. VMWare虚拟机服务器设置固定ip,切换网络后不用重新设置服务器ip
  6. node.js连接数据库得基本操作
  7. 微信小程序 轮播图展示,图片全屏显示
  8. 华为P40手机点位图PCBDOC下载
  9. php文字怎么居中,PHP图片文字合成居中
  10. kafka log4j日志级别修改,一天生成一个日志文件