前言
上一篇 基于 IDEA 搭建 RocketMQ-4.6 源码环境 我们搭建并跑通了 rocketmq
的源码环境 .
本文我们紧接上文, 继续基于源码搭建并运行 broker
主从架构.
- 1 个 NameServer 节点 (与前文一样)
- 2 个 Broker 节点, 一个作为 Master, 一个作为 Slave
- 1 个 Producer 生产者 (与前文一样)
- 1 个 Consumer 消费者 (与前文一样)
broker 主从架构只需要修改 broker.conf 文件即可, 其他地方与单节点没有差异.
第四章节主要是描述搭建过程中遇到的问题, 以及处理过程, 可以选择性跳过.
正文
一、回顾 RocketMQ 的主从部署架构
-
Broker 部署相对复杂,Broker 分为 Master 与 Slave
-
master 与 slave 之间同步数据既支持同步(sync), 也支持异步(async)
-
一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,
-
Master 与 Slave 的对应关系通过指定相同的 BrokerName,
-
不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。
-
Master也可以部署多个。
-
每个 Broker 与 NameServer 集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。
注意:当前RocketMQ版本在部署架构上支持一Master多Slave,但只有BrokerId=1的从服务器才会参与消息的读负载。
二、官方提供的 两主两从 架构
RocketMQ 官方提供了 两主两从 (异步 和 同步)的配置文件( rocketmq/distribution/conf/
).
三、基于官网的配置搭建一主一从架构
我们可以从官网提供的异步模式中提取两个现成的配置文件, 比如 broker-a.conf
、broker-a-s.conf
文件, 将他们放在 rocketmq/conf/
目录下
然后启动 broker 程序时, 需要指定对应的配置文件.
这里有个细节:
当我们把两个 broker 节点部署在两台不同的机器时, 可以直接采用官网提供的配置, 无需进行修改.
但是我们是在同一台机器, 启动两个 broker 节点. 那么我们就需要注意 默认的配置文件 中缺少了包括但不限于以下配置:
-
broker 节点的监听端口(如果不配置, 那么启动第二个节点就会提示端口已占用.)
关于端口的配置, 这里还有另外一个大坑!!! 后面详细说
-
broker 保存数据的存储路径.(如果不配置, 那么两个节点的存储路径会冲突.)
java.lang.RuntimeException: Lock failed,MQ already started at org.apache.rocketmq.store.DefaultMessageStore.start(DefaultMessageStore