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

集群与高可用专题

专题说明

本专题系统讲解 RabbitMQ 集群的架构原理与高可用方案,包括集群搭建、镜像队列、仲裁队列(Quorum Queues)、负载均衡策略及故障恢复机制,是构建企业级消息队列系统的必备知识。

学习目标

  1. 理解 RabbitMQ 集群的组成与通信机制
  2. 掌握集群的搭建与节点管理方法
  3. 掌握镜像队列和仲裁队列的配置与区别
  4. 能够设计高可用的消息队列集群方案

学习建议

建议结合官方文档和实际集群部署经验理解各组件的协作关系。

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

当 RabbitMQ 集群中的一个节点意外宕机时,集群会自动将该节点从集群成员列表中移除,无需人工干预。

A

B

2

镜像队列的消息确认(ack)操作只需要在 master 节点上执行,slave 节点会自动同步确认状态,因此确认操作不会产生额外的网络开销。

A

B

3

RabbitMQ 集群中所有节点之间通过 Erlang 分布式的 cookie 进行通信认证,因此集群节点必须配置相同的 Erlang cookie。

A

B

4

RabbitMQ 集群中的节点类型(磁盘节点/内存节点)可以在节点加入集群后通过命令进行转换。

A

B

5

当负载均衡器后方的某个 RabbitMQ 节点宕机时,已建立的消费者连接会自动切换到其他健康节点继续消费。

A

B

单选题
6

RabbitMQ 镜像队列的 ha-mode 策略设置为 exactly 时,ha-params 的值表示:

A

镜像队列在所有节点上都创建副本

B

镜像队列在指定数量的节点上创建副本,不包括 master

C

镜像队列在指定数量的节点上创建副本,包括 master

D

镜像队列在指定名称的节点列表上创建副本

7

关于 RabbitMQ 集群中的磁盘节点(disc node)和内存节点(ram node),以下说法正确的是:

A

内存节点的所有集群元数据(队列定义、交换机、用户权限等)仅存储在内存中,节点重启后丢失

B

内存节点不存储任何消息数据,所有消息都由磁盘节点保存

C

集群中至少需要两个磁盘节点才能保证元数据安全

D

内存节点的队列消息永远不会写入磁盘

8

关于 RabbitMQ 的两种集群架构模式,以下说法正确的是:

A

普通集群模式下,队列内容和消息数据在所有节点间完整同步

B

镜像集群模式下,队列内容和消息数据在所有镜像节点间完整复制

C

普通集群模式下,消费者连接到任意节点都可以消费任意队列的消息,因为消息数据在该节点本地

D

镜像集群的性能高于普通集群,因为数据复制带来了更好的读写速度

9

将一个新节点加入已有 RabbitMQ 集群时,以下操作顺序正确的是:

A

直接启动新节点的 RabbitMQ 服务,自动加入集群

B

rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster rabbit@node1rabbitmqctl start_app

C

rabbitmqctl join_cluster rabbit@node1rabbitmqctl start_app

D

修改配置文件 cluster_nodes 后重启服务

10

在 RabbitMQ 集群前端配置负载均衡器时,以下哪种方案最适合 TCP 协议层的负载均衡?

A

使用 Nginx 的 HTTP 反向代理模式

B

使用 HAProxy 的 TCP 模式,配置健康检查检测 5672 端口

C

使用 DNS 轮询,客户端随机连接

D

在客户端代码中硬编码所有节点地址并轮询连接

多选题
11

在规划 RabbitMQ 集群节点类型时,以下方案合理的有哪些?

A

3 节点集群全部使用磁盘节点,确保元数据在多个磁盘上持久化

B

3 节点集群使用 1 个磁盘节点 + 2 个内存节点,平衡性能与数据安全

C

3 节点集群全部使用内存节点,追求最大元数据操作速度

D

大规模集群(10+ 节点)使用少量磁盘节点 + 大量内存节点,减少磁盘 IO 开销

12

从 RabbitMQ 集群中移除一个节点时,leave_clusterforget_cluster_node 的区别有哪些?

A

leave_cluster 在目标节点上执行,节点主动退出集群

B

forget_cluster_node 在集群的其他节点上执行,从集群中强制移除目标节点

C

leave_cluster 会保留节点上的队列数据

D

forget_cluster_node 会强制从集群元数据中删除该节点,即使该节点已宕机

13

关于 RabbitMQ 集群前的负载均衡配置,以下说法正确的有哪些?

A

负载均衡器需要在 5672 端口(AMQP)和 15672 端口(Management)都做健康检查

B

负载均衡器应配置为长连接亲和性(sticky session),避免同一 Connection 的请求被路由到不同节点

C

对于消费者连接,负载均衡器可以随意将新连接分配到任意节点

D

负载均衡层会导致消息被重复投递,因为它会对同一条消息做多路转发

14

通过 policy 配置镜像队列策略时,以下说法正确的有哪些?

A

rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}' 会将名称以 ha. 开头的队列自动配置为全节点镜像

B

Policy 的 priority 值越大,优先级越高,当多个 policy 匹配同一队列时,priority 大的生效

C

Policy 只能由管理员用户在全局 vhost 上设置

D

修改已存在的 policy 会影响所有已经匹配的队列

15

以下哪些场景适合选择普通集群而非镜像集群?

A

消息量大但对消息丢失不敏感的场景(如日志收集)

B

金融交易系统,要求消息绝对不能丢失

C

希望获得最高吞吐量的消息处理场景

D

需要自动故障转移的高可用场景

填空题
16

优雅关闭集群节点的标准操作是先执行 rabbitmqctl ____________ 停止 RabbitMQ 应用,然后执行 rabbitmqctl ____________ 主动离开集群,最后执行 rabbitmqctl ____________ 关闭 Erlang VM。这样可以确保集群元数据正确更新。

17

RabbitMQ 集群中,磁盘节点的元数据通过 Mnesia 数据库在所有 ____________ 之间复制,而内存节点的元数据不写入磁盘,因此集群中必须至少保留 ____________ 作为元数据的持久化备份。

18

使用 HAProxy 为 RabbitMQ 集群配置 TCP 负载均衡时,balance 指令应设置为 ____________ 模式以优先分配连接数最少的后端节点,option ____________ 启用 TCP 日志,timeout clienttimeout server 应设置较大的值(如 ____________ )以适配 AMQP 长连接特性。

19

镜像集群中,主队列(master)与镜像队列(slave)之间的数据同步策略有两种:________________________ 。自动同步在 slave 加入时会先完整复制现有消息,可能导致 ____________

20

镜像队列中,所有的读写操作都由 ____________ 节点处理。当该节点宕机时,集群会自动从镜像节点中选举一个 ____________ 作为新的 master,以确保消息不丢失。

参考答案
1.错误 2.错误 3.正确 4.正确 5.错误 6.B 7.A 8.B 9.B 10.B 11.A;B;D 12.A;B;D 13.A;B;C 14.A;B;D 15.A;C 16.stop_app;leave_cluster;shutdown 17.磁盘节点;一个磁盘节点 18.leastconn;tcplog;1小时/3600000ms 19.自动同步;手动同步(lazy synchronisation);大量 IO/性能下降 20.master;最旧的消息副本所在节点/最早的 slave
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 连接管理与 Channel 专题
下一个专题 → 高可用与容灾专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码