6.8 KiB
tags, create time
| tags | create time | ||||||
|---|---|---|---|---|---|---|---|
|
2026-08-09 12:00 |
集群与哨兵机制_测试题
概述
本测试覆盖 Redis Sentinel 的高可用故障转移机制和 Redis Cluster 的槽位分片架构。共 10 道题:6 道选择题、3 道填空题、1 道简答题,考察对 CAP 权衡、Gossip 协议、选举流程和槽位迁移的理解。
一、选择题(6道,由浅入深)
难度阶梯: Q1-Q2 基础概念 → Q3-Q4 核心原理 → Q5-Q6 深入应用/边界场景
Q1(基础)— 考察定义层面
Redis Sentinel 判定 master 节点进入"客观下线"(ODOWN)状态的最低条件是:
A. 单个 Sentinel 节点 PING 超时 B. quorum(n/2+1)个 Sentinel 认为 master SDOWN C. 所有 Sentinel 节点一致同意 D. master 连续 5 次 PING 无响应
Q2(基础)— 考察行为判断
关于 Redis Cluster 的哈希槽分配,以下哪项计算方式是正确的?
A. MD5(key) % 16384 B. CRC16(key) % 16384 C. SHA1(key) % 16384 D. Hash(key) % 1024
Q3(进阶)— 考察核心原理
Sentinel 进行故障转移时,选择 slave 升为主节点的优先依据是:
A. priority 参数最低的那个 slave B. replication offset 最大的那个 slave C. 运行时间最长的 slave D. 最近收到 PING 回复最快的 slave
Q4(进阶)— 考察对比辨析
Redis Sentinel 和 Redis Cluster 在设计上做出了不同的取舍,以下对比错误的是:
A. Sentinel 支持 DB0~DB15 多库,Cluster 仅支持 DB0 B. Sentinel 不支持水平分片,Cluster 通过 16384 槽位分片实现扩展 C. Sentinel 倾向 AP 可用性优先,Cluster 倾向 CP 一致性优先 D. Sentinel 扩容需要手动迁移或重新搭建,Cluster 可在线增量迁移
Q5(深入)— 考察场景推理
某服务部署了 3 个 Sentinel 节点来保护一个 Master-Slave 集群。如果其中 1 个 Sentinel 因网络隔离不可达,会发生什么?
A. 剩余的 2 个 Sentinel 仍然能够达成 quorum(n/2+1=2),继续执行故障检测和转移 B. 由于无法达到 quorum,故障检测完全停止 C. 剩余的 Sentinel 会自动新增第 4 个 Sentinel 来补足票数 D. Master 进入只读模式等待失联的 Sentinel 恢复
Q6(深入)— 考察源码级别细节
Redis Cluster 在执行在线槽位迁移时,源节点和目标节点通过什么标志位协作完成过渡?
A. MIGRATING 和 IMPORTING B. TRANSFER 和 RECEIVE C. SOURCE 和 TARGET D. PREPARING 和 COMMITTING
二、填空题(3道)
F1 — 填空
Sentinel 故障转移的第一步是将 master 标记为 SDOWN(主观下线),需要至少 ______ 个 Sentinel 确认才会升级为 ODOWN(客观下线)。
提示: 如果有 3 个 Sentinel,quorum = n/2 + 1 = 3/2 + 1 = ?
F2 — 填空
Redis Cluster 将数据划分为 ______ 个 hash slot,Key 的定位通过 CRC16(key) % 16384 计算得到对应的槽位。
提示: 这个数字是一个质数附近的数值。
F3 — 填空
当客户端向错误的 Cluster 节点发送请求时,RabbitMQ(应为 Redis Cluster)会返回 ______ 重定向消息,告知客户端前往正确的节点查找。
提示: 有两种重定向类型,ASK 用于迁移中的过渡期。
三、简答题(1道)
S1
你正在为一个需要高可用的金融交易系统设计 Redis 基础设施。该系统的读写比例约为 3:7,对数据一致性要求极高但不支持多 DB(即只用 DB0)。已知有以下约束条件:
- 不能容忍脑裂现象导致的双主问题
- 需要在故障发生时自动完成故障转移
- 客户端连接地址需要保持相对稳定
请选择合适的架构方案(Sentinel 或 Cluster),列出你的配置建议,并说明如何将脑裂风险降到最低。
答题框架提示:
- 架构方案的选择理由(CP vs AP 权衡)
- Sentinel 的部署数量和位置
- 关键的参数配置
- 脑裂防护机制(min-replicas-to-write 等)
参考答案与解析
选择题答案
| 题号 | 正确答案 | 解析 |
|---|---|---|
| Q1 | B | quorum = n/2 + 1,其中 n 是配置的 Sentinel 总数。3 个 Sentinel 时需要 2 个认为 master SDOWN 才会触发 ODOWN。A 只是单个节点的 SDOWN(主观下线)。C 过于严格不利于故障快速发现。D 不是判定标准。 |
| Q2 | B | Redis Cluster 使用 CRC16(key) % 16384 计算 Key 所属的槽位。MD5/SHA1 不是 Cluster 使用的算法。 |
| Q3 | B | Sentinel 选择 replication offset 最大的 slave 升级为主,因为这代表它与 master 同步的最新、最完整的数据。priority 可作为辅助排序条件。 |
| Q4 | C | 反了!Sentinel 倾向 CP(主从切换期间短暂不可用但保证一致),Cluster 倾向 AP(分片后允许不同分区有不同视角)。A、B、D 均为正确描述。 |
| Q5 | A | 3 个 Sentinel 的 quorum = 3/2 + 1 = 2。剩余 2 个可达的 Sentinel 刚好达到 quorum,可以继续执行故障检测。少数派宕机不影响多数派的正常工作。 |
| Q6 | A | 迁移时源节点 setslot MIGRATING ,目标节点 setslot IMPORTING 。迁移完成后双方取消标志位设为 NODE。 |
填空题答案
| 题号 | 答案 | 解析 |
|---|---|---|
| F1 | 2 | 3 个 Sentinel 的 quorum = 3/2 + 1 = 2。只要 2 个及以上 Sentinel 认为 master SDOWN,就会将其标记为 ODOWN 并触发后续故障转移流程。 |
| F2 | 16384 | Redis Cluster 固定使用 16384 个槽位(0-16383),Key 通过 CRC16(key) % 16384 分配到对应槽位所在的节点。 |
| F3 | MOVED / ASK | 向错误节点发请求时,若 slot 已迁移到目标节点,目标节点返回 MOVED(迁移完成)或 ASK(迁移中过渡)重定向,让客户端重试正确节点。 |
简答题参考答案
S1:参考答案要点:
- 选择 Redis Sentinel 而非 Cluster。原因:数据一致性要求高(CP 倾向)、读写比 3:7 且不需要水平扩展、只用单 DB(Cluster 仅支持 DB0 但这里正好满足)。
- Sentinel 部署至少 3 个奇数节点,跨机房/机架部署避免单点故障。quorum 设为 n/2 + 1。
- 关键参数:down-after-milliseconds 合理设置(如 30000ms)、failover-timeout 控制超时、parallel-syncs 控制同步并发数。
- 脑裂防护:设置 min-replicas-to-write(如 ≥1)和 min-replicas-max-lag(如 10s)。当 master 连接的合法从节点数低于阈值或延迟超过限制时,master 拒绝写操作,防止脑裂时双主写入。
评分标准:答出任意 2 个要点即可得满分;完全正确需覆盖架构选择理由、部署方案、关键参数和脑裂防护四个维度。