--- tags: [test/review, redis, cluster-sentinel, sharding, gossip, failover] 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),列出你的配置建议,并说明如何将脑裂风险降到最低。 > **答题框架提示**: > 1. 架构方案的选择理由(CP vs AP 权衡) > 2. Sentinel 的部署数量和位置 > 3. 关键的参数配置 > 4. 脑裂防护机制(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:**参考答案要点**: 1. 选择 Redis Sentinel 而非 Cluster。原因:数据一致性要求高(CP 倾向)、读写比 3:7 且不需要水平扩展、只用单 DB(Cluster 仅支持 DB0 但这里正好满足)。 2. Sentinel 部署至少 3 个奇数节点,跨机房/机架部署避免单点故障。quorum 设为 n/2 + 1。 3. 关键参数:down-after-milliseconds 合理设置(如 30000ms)、failover-timeout 控制超时、parallel-syncs 控制同步并发数。 4. 脑裂防护:设置 min-replicas-to-write(如 ≥1)和 min-replicas-max-lag(如 10s)。当 master 连接的合法从节点数低于阈值或延迟超过限制时,master 拒绝写操作,防止脑裂时双主写入。 **评分标准**:答出任意 2 个要点即可得满分;完全正确需覆盖架构选择理由、部署方案、关键参数和脑裂防护四个维度。 ## 关联笔记 - [[03.Redis/core/Redis 五大核心数据结构]] - [[03.Redis/core/RDB 与 AOF 持久化]] - [[03.Redis/strategies/多级缓存架构设计]]