开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):RocketMQ 高可用性】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/704/detail/12451
RocketMQ 高可用性
内容介绍:
一、高可用性机制
二、消息发送高可用
三、总结
一、高可用性机制
想要研究 rocketMQ 高可用性,需要从它的组成部分来说起,对于rocket 集群来讲,他分成四个组件。首先是 nameServer ,在搭建双组双存的结构集群架构中, nameServer 集群保证其自身的可用,图中的 broker 也是集群搭建,通过集群的形式保证 broker 部分的高可用性,nameserver 是无状态的,如果想要动态的给 nameserver 添加一个节点,不需要启动整个集群的服务, broker 会扫描到当前新增的 nameserver ,上报其信息。对于 broker 来说,集群分为 master 和 slave ,master 是主节点那么 slave 就是从节点。对于主节点来讲,它负责读和写,从节点负责读。那么对于 broker 当中的 master 和 slave 如何进行标识?首先它们是同一组,则同一个 master 可能会有多个 slave ,它们都会有相同的 broker 名称,但是 master 主节点 id 为0,而 slave id 大于0。
由图可知,发现最左边的是生产者,跟 broker 相连,没有与 slave 相连,证明 slave 不支持写的操作。只负责读,都可以从 slave 和 master 进行读。如何保证消息的消费的高可用?在 consumer 的配置文件当中,不用配置到底是从 slave 读还是 master 读,默认的会从 master 进行读取。当 master 不可用或者比较繁忙的时候, consumer 才会自动的切换到 slave 进行读取,这种切换机制是自动的,不需要开发者去管理。由于 consumer 存在自动切换的机制,也就保证了消息消费的高可用。如果不是双组双存的架构,只有一个主节点和 n 个从节点,主节点崩溃,则显示失败。所以我们应该将其搭建为双组双存的架构,其中一个主节点崩溃,还可以使用另外一个主节点,保证消息发送的高可用,基于这种方式进行搭建。
二、消息发送高可用
在发送消息的时候,当前 topic 的路由指向到两个 broker 组当中,比如说 brokerA、brokerB ,brokerA 当中有一个主节点和 n 个从节点, brokerB 有一个主节点和 n 个从节点。那么即使 brokerA 主节点崩溃,那么还有 brokerB 可以代替执行操作,保证消息发送到高可用性。
三、总结
四个方面,首先是 nameserver 的高可用性是通过集群完成,broker 是通过主节点和从节点保证其高可用性,可以搭建多个主节点和多个从节点。消息的消费者有自动切换的机制,自身就是高可用的配置,主节点崩溃,从节点可以继续提供消息的消费。生产者为了保证消息的高可用性,应该搭建为双组双存的方式,目前就是这种方式。