RocketMQ单机&集群浅入浅出
Rocketmq集群模式
1、单点(不推荐,测试使用)
- 优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢
- 缺点:不可靠,如果宕机,会导致服务不可用
2、主从
主节点可收发消息,从节点不能接收消息。 具备 HA。不支持主从切换。
- 优点:同步双写消息不丢失, 异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入
- 缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker, 重启让从节点成为主节点
3、双主(不推荐)
多个 master 节点组成集群,单个 master 节点宕机或者重启对应用没有影响。
- 注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。
- 优点:所有模式中性能最高。配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息
- 缺点:单个 master 节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。
4、双主双从、多主多从
- 双主双从
多 master 多 slave 异步复制
在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。master节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。
- 优点:在 master 宕机时,消费者可以从 slave读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。
- 缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息
多 master 多 slave 同步双写
同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。 - 优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高
- 缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机
刷盘策略
同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
同步刷盘
数据写入内存后并未实时写入数据盘,写入数据盘之后才返回写入成功。 数据安全性高。
异步刷盘
数据写入内存后即返回写入成功,但此时并未实时写入数据盘。 数据可能丢失,性能高。
同步方式
同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)
同步复制
数据安全性高,性能低一点
异步复制
数据可能丢失,性能高
选择
保证数据可靠情况:同步刷盘和同步双写的方式,但性能会较其他方式低。
保证性能又可靠的情况下,采用同步双写,异步刷盘
目前采用这种方式:同步双写,异步刷盘
单机部署
编辑docker-compose.yml, IP需要修改成对应服务器的IP
version: "3.8"
services:
roacket_namesrv:
image: 7024253/rocketmq_namesrv:1.0
network_mode: host
hostname: rocketmq.namesrv.1
container_name: rocketmq.namesrv.1
environment:
listenPort: 9876
volumes:
- /data/services/rocketmq/data/namesrv/logs:/root/logs
- /data/services/rocketmq/data/namesrv/store:/root/store
deploy:
resources:
limits:
memory: 1G
restart: unless-stopped
rocketmq_broker:
image: 7014253/rocketmq_broker:1.0
network_mode: host
hostname: rocketmq.broker.1
container_name: rocketmq.broker.1
extra_hosts:
- "rocketmq.broker.1:172.16.0.11"
- "rocketmq.namesrv.1:172.16.0.11"
environment:
MAX_POSSIBLE_HEAP: 100000000
NAMESRV_ADDR: 'rocketmq.namesrv:9876'
volumes:
- /data/services/rocketmq/data/namesrv/logs:/root/logs
- /data/services/rocketmq/data/namesrv/store:/root/store
env_file:
- broker.env
rocketmq_dashbaord:
image: 7014253/rocketmq_dashboard:1.0
network_mode: host
hostname: rocketmq.dashboard
container_name: rocketmq.dashboard
extra_hosts:
- "rocketmq.namesrv.1:172.16.0.11"
- "rocketmq.broker.1:172.16.0.11"
environment:
JAVA_OPTS: '-Dserver.port=17070 -Drocketmq.config.namesrvAddr=rocketmq.broker:9876 -Drocketmq.config.isVIPChannel=false'
broker.env
par.brokerName=broker-a
par.brokerId=0
# 同步双写
par.brokerRole=SYNC_MASTER
# 异步刷盘
par.flushDiskType=ASYNC_FLUSH
add.listenPort=10911
par.deleteWhen=04
par.fileReservedTime=48
add.brokerIP1=manyun.rocketmq.broker.1
启动后访问IP:17070就可以看到dashboard。
集群部署
namesrv:3台
broker:4台
dashboard:1台
太长了,懒得编辑了。下次有空再弄
本文详细介绍了RocketMQ的四种集群模式,包括单点、主从、双主及双主双从、多主多从,分析了各自的优缺点和适用场景。重点讨论了同步刷盘和异步刷盘策略以及同步复制和异步复制的区别。最后提供了单机部署和集群部署的示例配置。
2019

被折叠的 条评论
为什么被折叠?



