RocketMQ4.X(5)集群架构

一、RocketMQ4.X多种集群模式

1、单节点 :

优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢
缺点:不可靠,如果宕机,会导致服务不可用

2、主从(异步、同步双写) :

优点:同步双写消息不丢失, 异步复制存在少量丢失(先写给master-->返回程序)---->(master--复制-->)(slaver) master还没写给salver,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入
缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker,重启让从节点

3、双主:

优点:配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息
缺点: master机器宕机期间,未被消费的消息在机器恢复之前不可消费,实时性会受到影响

4、双主双从,多主多从模式(异步复制)

优点:磁盘损坏,消息丢失的非常少,消息实时性不会受影响,Master 宕机后,消费者仍然可以从Slave消费
缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息

5、双主双从,多主多从模式(同步双写)

优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机(如果没有从内存写到磁盘都会出现丢失现象)

推荐  2、4、5

如果没有从内存写到磁盘都会出现丢失现象


二、消息可靠性之同步、异步刷盘

什么是同步刷盘和异步刷盘,主从模式如何保障消息可靠性
内存+磁盘
什么是异步刷盘(数据可能丢失,性能高):
什么是同步刷盘:数据安全性高
选择:各有优缺点,看业务需要


三、消息可靠性之同步、异步复制

(与刷盘没有关联)两个rocketmq之间的复制  是两个应用之间的复制

master可以同步或异步

slave也可以同步或异步

Master - Slave节点里面
异步复制 : 数据可能丢失,性能高
同步复制: 数据安全性高,性能低一点
最终推荐这种方式:同步双写(即M-S同步复制),异步刷盘


四、RocketMQ4.X集群高可用之主从模式搭建(1)

机器列表
server1 ssh root@192.168.159.129
server2 ssh root@192.168.159.130
server3 ssh root@192.168.159.131
server4 ssh root@192.168.159.132

1、修改RocketMQ(启动内存配置, 两个机器都要修改)

vim runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"


启动两个机器的 nameserver
nohup sh bin/mqnamesrv &


全路径
/usr/local/software/rocketmq/distribution/target/apache-rocketmq

2、编辑并启动rocketmq命令

主节点
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &

namesrvAddr=192.168.159.129:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER    (异步复制)
flushDiskType=ASYNC_FLUSH

从节点
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &

namesrvAddr=192.168.159.129:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

3、使用管控台

修改事项
pom.xml  里面的rocketmq版本号


application.properties里面的nameserver

增加 rocketmq.config.namesrvAddr=192.168.159.129:9876;192.168.159.130:9876

mvn install -Dmaven.test.skip=true

java -jar rocketmq-console-ng-1.0.0.jar

参考命令
centos7关闭防火墙
systemctl stop firewalld

远程拷贝到本地
scp xdclass@192.168.0.106:/Users/xdclass/Desktop/xdclass/消息队列/data/第3章/第7集/apache-maven-3.6.0-bin.tar.gz /usr/local/software

scp root@192.168.0.106:/Users/xdclass/Desktop/xdclass/消息队列/data/第3章/第7集/apache-maven-3.6.0-bin.tar.gz /usr/local/software 

 

 

五、故障演练之主节点Broker退出保证消息可用

主节点Broker退出后,从节点可继续被消费者消费

发送一条消息,关闭主节点,关闭主节点之后不能写入
从节点提供数据供外面消费,但不能接受新消息
主节点上线后同步从节点已经被消费的数据(offset同步)

将customer的@compnent注掉,发送几条消息,之后将主border master关掉,启动消费者服务

六、RocketMQ4.X主从同步必备知识

Broker分为master与slave,一个master可以对应多个Slave,但一个slave只能对应一个master,master与slave通过相同的Broker Name来匹配,不同的broker Id来定义是master还是slave

Broker向所有的NameServer结点建立长连接,定时注册Topic和发送元数据信息


NameServer定时扫描(默认2分钟)所有存活broker的连接, 如果超过时间没响应则断开连接(心跳检测),但是consumer客户端不能感知,consumer定时(30s)从NameServer获取topic的最新信息,所以broker不可用时,consumer最多最需要30s才能发现
(Producer的机制一样,在未发现broker宕机前发送的消息会失败)

只有master才能进行写入操作,slave不允许写入只能同步,同步策略取决于master的配置。

 

客户端消费可以从master和slave消费,默认消费者都从master消费,如果在master挂后,客户端从NameServer中感知到Broker宕机,就会从slave消费, 感知非实时,存在一定的滞后性,slave不能保证master的消息100%都同步过来了,会有少量的消息丢失。但一旦master恢复,未同步过去的消息会被最终消费掉

 

如果consumer实例的数量比message queue的总数量还多的话,多出来的consumer实例将无法分到queue,也就无法消费到消息,也就无法起到分摊负载的作用,所以需要控制让queue的总数量大于等于consumer的数量


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智达教育‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值