部署方法
在 Apache RocketMQ 5.0 版本中,完成了基本的发送和接收消息,包括 NameServer、Broker 和 Proxy 组件。在 5.0 版本中,Proxy 和 Broker 可以根据实际需求分为本地模式和集群模式。一般情况下,如果没有特殊需求,或者您遵循从早期版本平滑升级的方式,您可以使用本地模式。
- 在本地模式下,Broker 和 Proxy 部署在同一个进程中,您只需在原始 Broker 配置的基础上添加 Proxy 配置即可运行。
- 在集群模式下,Broker 和 Proxy 分别部署,即除了现有的集群之外,您还可以单独部署 Proxy。
本地模式部署
由于 Proxy 和 Broker 在本地模式下部署在同一个进程中,Proxy 是无状态的,因此主集群配置仍然可以基于 Broker。
启动 NameServer
### Start Name Server first
$ nohup sh mqnamesrv &
### Verify that the Name Server has started successfully.
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
启动 Broker+Proxy
单节点单副本模式
此方法存在较高风险,因为 Broker 只有一个节点,如果 Broker 重启或宕机,整个服务将不可用。不建议在生产环境中使用,但可以用于本地测试。
$ nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
### Verify that the Broker has started successfully, for example, the broker IP is 192.168.1.2, and the name is broker-A
$ tail -f ~/logs/rocketmqlogs/broker_default.log
The broker[xxx, 192.169.1.2:10911] boot success...
多节点(集群)单副本模式
集群中的所有节点都以 Master 角色部署,不部署任何 Slave 副本,例如 2 个 Master 或 3 个 Master。此模式的优缺点如下
- 优点:配置简单,单个 Master 宕机或重启对应用程序没有影响,并且当磁盘配置为 RAID10 时,即使机器不可恢复地宕机,由于 RAID10 磁盘的可靠性,消息也不会丢失(异步磁盘刷新会丢失少量消息,同步磁盘刷新不会丢失任何消息),并且性能最高;
- 缺点:在单机宕机期间,该机器上未消费的消息在机器恢复之前无法订阅,消息的实时性会受到影响。
启动 Broker+Proxy 集群
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties --enable-proxy &
### On machine A, start the second Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties --enable-proxy &
...
以上启动命令是在单个 NameServer 的情况下使用的。对于多个 NameServer 的集群,Broker 启动命令中 -n
后面的地址列表可以用分号隔开,例如 192.168.1.1:9876;192.161.2:9876
。
多节点(集群)多副本模式 - 异步复制
每个 Master 都配置了一个 Slave,有多个 Master-Slave 对。HA 使用异步复制,主从之间存在短暂的消息延迟(毫秒级)。此模式的优缺点如下
- 优点:即使磁盘损坏,也只会丢失极少数消息,消息的实时性不受影响。同时,在 Master 宕机后,消费者仍然可以从 Slave 消费,这个过程对应用程序是透明的,不需要人工干预,性能几乎与多 Master 模式相同;
- 缺点:在 Master 宕机或磁盘损坏的情况下,会丢失少量消息。
启动 Broker+Proxy 集群
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties --enable-proxy &
### On machine B, start the second Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties --enable-proxy &
### On machine C, start the first slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties --enable-proxy &
### On machine D, start the second slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties --enable-proxy &
多节点(集群)多副本模式 - 同步双写
每个 Master 都配置了一个 Slave,有多个 Master-Slave 对。HA 使用同步双写,这意味着只有主节点和从节点都写入成功,才会向应用程序返回成功。此模式的优缺点如下
- 优点:数据和服务都没有单点故障,在 Master 宕机的情况下,消息没有延迟,服务可用性和数据可用性都很高;
- 缺点:性能略低于异步复制模式(大约低 10%),发送单个消息的 RT 略高,并且在当前版本中,主节点宕机后,备用节点无法自动切换为主节点。
启动 Broker+Proxy 集群
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties --enable-proxy &
### On machine B, start the second Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties --enable-proxy &
### On machine C, start the first slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties --enable-proxy &
### On machine D, start the second slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties --enable-proxy &
以上 Broker 和 Slave 的配对是通过指定相同的 BrokerName 参数来完成的。Master 的 BrokerId 必须为 0,Slave 的 BrokerId 必须为大于 0 的数字。此外,多个 Slave 可以挂载到另一个 Master 上,同一个 Master 下的多个 Slave 通过指定不同的 BrokerId 来区分。$ROCKETMQ_HOME 指的是 RocketMQ 的安装目录,这个环境变量需要用户自己设置。
5.0 HA
RocketMQ 5.0 提供了更加灵活的 HA 机制,允许用户更好地平衡成本、服务可用性和数据可靠性,同时支持消息和流存储场景。 查看详情
集群模式部署
在集群模式下,Broker 和 Proxy 分别部署,我可以在 NameServer 和 Broker 启动后部署 Proxy。
在集群模式下,Proxy 集群和 Broker 集群是一一对应的,可以在 Proxy 的配置文件 rmq-proxy.json
中配置 rocketMQClusterName
。
启动 NameServer
### Start NameServer first
$ nohup sh mqnamesrv &
### Verify tha Name Server has started successfully
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
启动 Broker
单节点单副本模式
此方法存在较高风险,因为 Broker 只有一个节点。如果 Broker 重启或宕机,整个服务将不可用。不建议在生产环境中使用,但可以用于本地测试。
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 &
多节点(集群)单副本模式
在此模式下,集群中的所有节点都以 Master 角色部署,不部署任何 Slave 副本,例如 2 个 Master 或 3 个 Master。此模式的优缺点如下
- 优点:配置简单,单个 Master 宕机或重启对应用程序没有影响,并且当磁盘配置为 RAID10 时,即使机器宕机且无法恢复,由于 RAID10 磁盘的可靠性,消息也不会丢失(异步刷新磁盘会丢失少量消息,同步刷新磁盘不会丢失任何消息),并且性能最高;
- 缺点:在单机宕机期间,该机器上未消费的消息在机器恢复之前无法订阅,消息的实时性会受到影响。
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties &
### On machine B, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties &
...
以上启动命令是在单个 NameServer 的情况下使用的。对于多个 NameServer 的集群,Broker 启动命令中 -n
后面的地址列表可以用分号隔开,例如 192.168.1.1:9876;192.161.2:9876
。
多节点(集群)多副本模式 - 异步复制
每个 Master 配置一个 Slave,并且有多个 Master-Slave 对。HA 使用异步复制,主节点和备用节点之间存在短暂延迟(毫秒级)。此模式的优缺点如下:
- 优点:即使磁盘损坏,消息丢失也很少,消息的及时性不受影响。此外,在 Master 宕机后,消费者仍然可以从 Slave 消费,这个过程对应用程序是透明的,不需要人工干预。性能与多 Master 模式几乎相同。
- 缺点:在 Master 崩溃或磁盘损坏的情况下,会丢失少量消息。
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
### On machine B, start the second Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
### On machine C, start the first Slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
### On machine B, start the second Slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &
多节点(集群)多副本模式 - 同步双写
每个 Master 配置一个 Slave,并且有多个 Master-Slave 对。HA 使用同步双写,只有主节点和备用节点都成功写入后,才会向应用程序返回成功。此模式的优缺点如下:
- 优点:数据和服务都免受单点故障的影响。在 Master 崩溃的情况下,消息不会延迟,服务的可用性和数据的可用性都非常高。
- 缺点:性能略低于异步复制模式(约低 10%),发送单个消息的 RT 略高,在当前版本中,备用节点无法在主节点宕机后自动切换为主节点。
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties &
### On machine B, start the second Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties &
### On machine C, start the first Slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties &
### On machine B, start the second Slave, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties &
Broker 和 Slave 的配对通过指定相同的 BrokerName 参数来完成。Master 的 BrokerId 必须为 0,Slave 的 BrokerId 必须大于 0。此外,可以在一个 Master 下挂载多个 Slave,同一个 Master 下的多个 Slave 通过指定不同的 BrokerId 来区分。$ROCKETMQ_HOME 指的是 RocketMQ 的安装目录,需要由用户作为环境变量设置。
5.0 HA
RocketMQ 5.0 提供了更加灵活的 HA 机制,允许用户更好地平衡成本、服务可用性和数据可靠性,同时支持消息和流存储场景。 查看详情
启动代理
可以在多台机器上启动多个代理。
### On machine A start the first Proxy, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqproxy -n 192.168.1.1:9876 &
### On machine B start the second Proxy, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqproxy -n 192.168.1.1:9876 &
### On machine C start the third Proxy, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqproxy -n 192.168.1.1:9876 &
如果需要指定配置文件,可以使用 -pc
或 --proxyConfigPath
来指定。
### custom config file
$ nohup sh bin/mqproxy -n 192.168.1.1:9876 -pc /path/to/proxyConfig.json &