RocketMq高可用部署/消息高可靠性方案以及故障模拟
2019-08-02 本文已影响2人
一个没有感情的程序员
RocketMQ高可用思路
在实际生产环境中,一般需要服务达到高可用、无单节点故障的要求。在 rocketMq 中
就需要分布式部署。
RocketMQ的核心就是Broker的消息存储,而高可用的关键也在于Broker。因此,高可用方案可以参考一下推荐
NameServer:因为NameServer是无状态的,所以只需要直接用集群 部署,只要由一台NameServer可用,那么集群就整体可用。
Broker:实际存储消息的服务,服务不可用可能导致消息丢失推荐使用两主两从以上的集群配置此外Broker的主从配置有同步双写和异步双写,同步双写保证消息不会丢失,异步复制性能高,但是如果发现断电等瞬时故障导致主从同时宕机可能会丢失几条消息。正常情况异步复制一台机器发生故障不会丢失数据。

集群模式推荐配置
nameServer
无状态节点,直接部署多个实例即可
Broker
推荐使用双主双从,异步复制。对应配置文件:conf/2m-2s-async/目录下。如果偏向性能,则使用异步刷盘(数据落盘模式),异步复制(主从同步模式)。如果偏向消息高可靠,不在乎性能,则使用同步刷盘,同步双写。如果需求居中,则推荐异步刷盘,同步双写。以下是配置文件相关配置:
同步刷盘/异步刷盘:flushDiskType=SYNC_FLUSH / ASYNC_FLUSH
同步双写/异步复制:brokerRole=SYNC_MASTER/ASYNC_MASTER(注:如果是从节点这个字段则统一都是写SLAVE,主从复制策略只在主节点配置就可以)
名词解释:同步刷盘/异步刷盘:指的是消息被写入内存的pagecache再存到磁盘的过程是同步还是异步
同步双写/异步复制:指的是消息在Broker主节点到从节点之间复制的过程是同步还是异步
主从模式下的故障情况与模拟结果
测试项目/消息场景 | 发送消息 | 发送消息过程中 | 接收消费消息 |
---|---|---|---|
停用一个namesrv | 不影响通信 | 不影响通信 | 不影响通信 |
停用全部namesrv | 影响通信 | 不影响通信 | 影响通信,启动任意的namesrv可恢复 |
停用单个master broker | 不影响通信 | 不影响通信 | 不影响通信 |
停用全部master broker | 影响通信 | 影响通信,无法恢复 | 不影响通信 |
停用一个slave broker | 不影响通信 | 不影响通信 | 不影响通信 |
停用全部slave broker | 不影响通信 | 影响通信,数秒恢复 | 不影响通信,数秒恢复 |