全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

高可用与容灾专题

专题说明

本专题深入讲解 RabbitMQ 高可用架构设计,涵盖镜像队列、Quorum 队列、集群管理、故障转移、数据备份与恢复等核心容灾机制。通过本专题的学习,读者将掌握如何构建稳定可靠的 RabbitMQ 消息系统,确保在节点故障、网络分区等极端情况下系统仍能正常运行。

学习目标

  1. 掌握镜像队列和 Quorum 队列的架构设计与适用场景
  2. 理解 RabbitMQ 集群管理、网络分区处理与故障恢复机制
  3. 学会设计完整的数据备份与灾难恢复方案

学习建议

专家级内容需要深入理解底层原理,建议结合源码学习。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
判断题

RabbitMQ 的镜像队列(Mirrored Queues)机制可以在主队列(Master)所在节点宕机时,自动将镜像队列(Slave)提升为新的主队列,整个过程对消费者透明,因此镜像队列可以完全避免消息丢失。

A

B

2
单选题

RabbitMQ 镜像队列的同步策略中,"automatic" 模式和 "manual" 模式的主要区别是?

A

automatic 模式在 Slave 加入时自动全量同步,manual 模式需要手动触发同步

B

automatic 模式仅同步新增消息,manual 模式同步全部消息

C

automatic 模式使用增量同步,manual 模式使用全量同步

D

两者没有区别,仅是命名不同

3
多选题

在 RabbitMQ 集群发生网络分区(脑裂)时,以下哪些策略可以用于规避数据不一致问题?

A

配置 pause_minority 模式,网络分区后少数派节点自动暂停

B

使用 autoheal 模式,网络恢复后自动选择一个分区作为获胜方

C

忽略网络分区,依赖人工手动修复数据冲突

D

配置单边写策略,仅向特定分区写入避免双写冲突

E

使用 quorum 队列替代镜像队列,基于 Raft 协议保证一致性

4
填空题

RabbitMQ 集群处理网络分区的策略由 __________________ 参数配置,可选值包括 autoheal、______________ 和 pause_if_all_down。

5
单选题

在生产环境中,以下哪种做法最能有效规避 RabbitMQ 集群的脑裂问题?

A

增加集群节点数量到 7 个以上

B

使用专用低延迟网络连接集群节点,并配置合理的 partition_handling 策略

C

禁用所有镜像队列,使用单一节点

D

将集群部署在同一机架的同一交换机下

6
判断题

使用 rabbitmqctl backup 命令备份 RabbitMQ 集群时,该命令会备份所有队列中的消息内容(包括持久化和非持久化消息),以及集群元数据和用户配置信息。

A

B

7
单选题

以下哪个是从备份恢复 RabbitMQ 集群的正确流程?

A

直接在新节点上执行 rabbitmqctl restore,然后启动服务

B

停止 RabbitMQ 应用(rabbitmqctl stop_app),执行 restore,然后启动应用(rabbitmqctl start_app)

C

在运行中的集群上直接执行 restore,元数据会自动更新

D

先恢复 Mnesia 目录的文件备份,再执行 restore 命令

8
多选题

要实现对 RabbitMQ 集群的完整备份(包括元数据和消息内容),以下哪些组件需要被备份?

A

rabbitmqctl backup 导出的元数据备份文件

B

Mnesia 目录下的 msg_stores 子目录(WAL 日志)

C

Mnesia 目录下的队列索引文件

D

RabbitMQ 的日志文件(/var/log/rabbitmq/)

E

Erlang Cookie 文件(用于节点间认证)

9
填空题

RabbitMQ 的元数据备份使用命令 rabbitmqctl ______ <文件路径>,恢复备份使用命令 rabbitmqctl _______ <文件路径>,恢复前需要先停止应用。

10
单选题

某 RabbitMQ 集群配置为每天执行一次元数据备份,如果凌晨 2 点发生故障需要恢复,最大可能丢失多少时间的元数据变更?

A

不会丢失,因为元数据实时同步到所有节点

B

最多丢失 24 小时的元数据变更(上次备份到故障期间的所有变更)

C

仅丢失 2 点前后的数据

D

不会丢失,因为 WAL 日志会记录所有元数据变更

11
判断题

RabbitMQ 的 Federation 插件通过在上游(Upstream)和下游(Downstream) Broker 之间建立消息转发通道实现跨机房消息同步,Federation 模式下两边的队列和交换机配置必须完全一致。

A

B

12
单选题

在跨机房容灾部署中,以下关于 Shovel 插件和 Federation 插件的区别描述正确的是?

A

Shovel 用于队列级别的消息转发,Federation 用于 Exchange 级别的消息转发

B

Shovel 是静态配置的,Federation 支持动态发现上游节点

C

Shovel 支持双向同步,Federation 仅支持单向同步

D

Federation 需要相同的 RabbitMQ 版本,Shovel 支持不同版本

13
多选题

在跨机房(RTT > 50ms)部署 RabbitMQ Federation 时,以下哪些是必须考虑的关键因素?

A

网络延迟会增加消息从上游到下游的投递时延

B

Federation 连接断开后,未转发的消息会缓存在上游队列中

C

需要在上游和下游之间配置持久化连接

D

Federation 会自动处理网络中断后的消息断点续传

E

跨机房网络带宽不足时, Federation 会阻塞上游的消息发布

14
填空题

RabbitMQ Shovel 插件的核心配置中,_________ 参数指定源队列名称,__________ 参数指定目标队列名称,消息从源队列消费后转发到目标队列。

15
单选题

某公司需要在两个机房之间实现 RabbitMQ 容灾,要求:消息在两个机房都能消费,且任一机房故障时业务不中断。以下哪种方案最适合?

A

使用镜像队列在两个机房间同步所有消息

B

使用 Federation 在两个机房之间建立双向消息转发

C

仅在主机房部署 RabbitMQ,备机房部署消费者

D

使用 Shovel 单向同步消息从机房 A 到机房 B

16
判断题

RabbitMQ 集群节点之间通过 Erlang 分布式节点的 epmd(Erlang Port Mapper Daemon)进行心跳检测,当连续 3 次心跳失败时,节点判定网络分区发生,并自动触发 partition_handling 策略。

A

B

17
单选题

当 RabbitMQ 集群发生网络分区时,如果配置了 autoheal 策略,以下关于数据一致性的描述正确的是?

A

所有分区的数据会自动合并,无数据丢失

B

网络恢复后,autoheal 会选择一个分区作为获胜方,其他分区的节点重启并从获胜方同步数据,可能导致未同步数据的丢失

C

autoheal 会删除所有分区的数据并重新初始化

D

数据一致性由 Mnesia 自动保证,与分区处理策略无关

18
多选题

在 RabbitMQ 集群发生网络分区后,两个分区各自独立运行,以下哪些操作可能在两个分区中产生数据冲突?

A

在两个分区中同时创建同名队列但配置不同

B

在两个分区中同时修改同一用户的权限

C

在两个分区中同时发布消息到同一队列

D

在两个分区中同时删除同一交换机

E

在两个分区中同时新增绑定关系

19
填空题

RabbitMQ 的 Quorum 队列基于 ______ 共识协议,在网络分区时仅允许多数派节点继续读写,从而保障数据的 ________

20
单选题

使用 Quorum 队列的 RabbitMQ 集群,如果要求能容忍任意 2 个节点故障而继续正常工作,集群至少需要部署多少个节点?

A

3 个节点

B

4 个节点

C

5 个节点

D

7 个节点

← 上一个专题 集群与高可用专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库