高可用与集群
061 Redis 主从复制的主要目的是?
难度: 基础
- A. 数据冗余与读写分离,从库备份数据并承接读流量
- B. 让多个主库同时写入
- C. 替代持久化,无需 RDB 或 AOF
- D. 从库自动成为新主库且无需干预
查看答案与解析
正确答案A
正确原因: 复制提供数据冗余,从库默认只读可承接读流量。
关键边界: 故障切换需要 Sentinel 或 Cluster,或人工介入。
错误选项辨析: 主从是单主多从,复制不替代持久化,切换需要组件配合。
062 全量复制与部分重同步的区别是?
难度: 基础
- A. 全量传 RDB 快照;部分重同步基于 repl-backlog 增量补发断线期间的命令
- B. 全量只传一条命令
- C. 部分重同步需要重建整个数据集
- D. 断线后永远只能全量
查看答案与解析
正确答案A
正确原因: PSYNC 支持断线后增量续传,backlog 覆盖范围内的命令可补齐。
关键边界: backlog 过小或断线过久会退化为全量。
错误选项辨析: 全量传快照,部分重同步是增量,断线不一定全量。
063 复制偏移量(offset)的作用是?
难度: 基础
- A. 记录从库的写入次数
- B. 主从各自记录已处理命令位置,用于对齐与增量同步
- C. 记录用户访问量
- D. 决定淘汰策略
查看答案与解析
正确答案B
正确原因: 主从通过复制偏移量比较进度,配合 backlog 实现增量续传。
关键边界: 偏移量差距反映延迟,是监控复制的关键指标。
错误选项辨析: 偏移量与写入次数、访问量、淘汰策略无关。
064 Sentinel(哨兵)的核心职责是?
难度: 基础
- A. 承担业务读写流量
- B. 监控主从健康,故障时自动选举新主并通知客户端
- C. 替代数据持久化
- D. 对数据做分片存储
查看答案与解析
正确答案B
正确原因: Sentinel 是高可用组件,负责监控、故障转移与通知。
关键边界: 哨兵本身不存业务数据,也不做分片。
错误选项辨析: 哨兵不承担读写、不持久化、不分片。
065 Sentinel 故障转移的触发流程大致是?
难度: 基础
- A. 直接随机选一个从库
- B. 需要人工重启主库
- C. 主观下线、客观下线、选举 leader、提升从库为新主、通知客户端
- D. 只报警不切换
查看答案与解析
正确答案C
正确原因: 多数哨兵判定客观下线后,leader 执行故障转移流程。
关键边界: 客户端通过订阅或重连感知新主。
错误选项辨析: 切换有选举流程,自动完成,不只是报警。
066 部署 Sentinel 一般至少需要几个实例?
难度: 基础
- A. 1 个足够
- B. 必须 7 个
- C. 3 个(奇数,保证多数派判定)
- D. 2 个即可,无需多数
查看答案与解析
正确答案C
正确原因: 奇数实例保证任何时刻都能形成多数派,避免误判与脑裂。
关键边界: 多数派失败时哨兵无法完成切换。
错误选项辨析: 1 个哨兵无高可用意义,7 个非必需,2 个无法形成多数派。
067 主观下线(sdown)与客观下线(odown)的区别是?
难度: 进阶
- A. 两者完全等价
- B. 客观下线由主库自己声明
- C. 主观下线意味着立即切换
- D. 单个哨兵判定主观下线;多个哨兵(quorum)确认后进入客观下线
查看答案与解析
正确答案D
正确原因: sdown 是单点判断,可能误判;odown 需 quorum 多数确认才触发切换。
关键边界: 网络分区时可能出现 sdown,需多数派仲裁。
错误选项辨析: 两者等级不同,odown 由哨兵判定,sdown 不直接触发切换。
068 主从切换时“脑裂”风险指的是?
难度: 进阶
- A. 多个哨兵同时写入数据
- B. 从库之间互相复制
- C. 客户端连接数过多
- D. 原主库与客户端仍连通但哨兵已提升新主,出现两个主导致写入分叉
查看答案与解析
正确答案D
正确原因: 网络分区使原主无法被多数哨兵感知,客户端仍写入原主造成分叉。
关键边界: 可用 min-replicas-to-write 等参数限制写入,降低丢数据风险。
错误选项辨析: 脑裂是写入分叉而非哨兵写数据,与从库互复、连接数无关。
069 Redis Cluster 的数据分片方式是?
难度: 进阶
- A. 16384 个哈希槽,key 经 CRC16 取模映射到槽,槽分配到节点
- B. 按 key 前缀哈希到 1000 个槽
- C. 使用一致性哈希环
- D. 每个节点保存完整数据副本
查看答案与解析
正确答案A
正确原因: 槽是 Cluster 的基本单位,CRC16(key) 对 16384 取模定位槽。
关键边界: 槽可在节点间迁移实现扩缩容。
错误选项辨析: 槽数为 16384 而非 1000,Cluster 不用一致性哈希,节点不存全量数据。
070 客户端访问 Cluster 时收到 MOVED 与 ASK 重定向的含义是?
难度: 进阶
- A. MOVED 表示槽已永久归属他节点;ASK 表示槽迁移中需尝试目标节点
- B. MOVED 表示节点宕机
- C. ASK 表示命令执行失败
- D. 两者都要求客户端清空缓存
查看答案与解析
正确答案A
正确原因: MOVED 后客户端应更新槽映射;ASK 只在迁移窗口内单次转发。
关键边界: ASK 不更新映射,下次请求仍发原节点。
错误选项辨析: MOVED 与 ASK 都是重定向而非故障或失败,ASK 不清缓存。
071 Redis Cluster 的最小可用节点配置是?
难度: 进阶
- A. 1 个主节点即可
- B. 至少 3 个主节点(每个主节点可有从节点)
- C. 必须 6 个主节点
- D. 必须 16384 个节点
查看答案与解析
正确答案B
正确原因: 16384 个槽需要至少 3 个主节点承担,官方推荐 3 主 3 从起步。
关键边界: 单主无法满足槽分布与多数可用。
错误选项辨析: 1 主不是集群,6 主与 16384 节点都不是最小要求。
072 Cluster 何时进入不可用状态?
难度: 进阶
- A. 任意一个从节点故障
- B. 某槽没有可用主节点(主节点及其从节点全部故障)或多数主节点失联
- C. 客户端缓存过期
- D. 磁盘使用率超过 90%
查看答案与解析
正确答案B
正确原因: 槽的主备全挂会中断服务,多数主失联则无法达成共识。
关键边界: 单个从节点故障不影响主槽可用性。
错误选项辨析: 从节点故障、客户端缓存、磁盘都不是集群失效条件。
073 主从切换可能丢数据的原因与缓解是?
难度: 进阶
- A. 切换必然零丢失
- B. 丢数据只发生在持久化关闭时
- C. 主库未同步的写命令在故障时丢失;min-replicas-to-write 可限制写入
- D. 从库会主动回放未提交事务
查看答案与解析
正确答案C
正确原因: 异步复制下主库宕机瞬间的写可能尚未到达从库。
关键边界: 配置 min-replicas 可降低丢失窗口,但会牺牲可用性。
错误选项辨析: 零丢失不成立,丢写与持久化无关,从库不回放未提交事务。
074 repl-backlog(复制积压缓冲区)的作用是?
难度: 进阶
- A. 存储所有历史命令且永不清除
- B. 用于数据分片
- C. 暂存近期写命令,支持断线从库增量续传,避免频繁全量
- D. 替代 AOF 持久化
查看答案与解析
正确答案C
正确原因: backlog 保存最近写命令,从库断线后可增量补发。
关键边界: 缓冲区大小决定增量续传窗口,覆盖不到就全量。
错误选项辨析: backlog 有大小限制、不用于分片、不替代持久化。
075 Cluster 中跨槽多 key 操作(如 MSET 多个 key)会怎样?
难度: 基础
- A. 任意跨槽操作都自动支持
- B. 跨槽 MSET 会分布到多个节点并行执行
- C. 跨槽操作永远返回成功但结果随机
- D. 需要 key 在同一槽(使用 hash tag 大括号),否则报错
查看答案与解析
正确答案D
正确原因: 单命令原子性限于单节点,跨槽多 key 命令会返回错误。
关键边界: hash tag 如 {user:1} 可强制相关 key 落入同一槽。
错误选项辨析: 跨槽不自动支持、不并行执行,也不返回随机成功。
076 集群客户端(如 Lettuce、Jedis Cluster)的作用是?
难度: 基础
- A. 在客户端本地复制全部数据
- B. 替代服务端做持久化
- C. 客户端只能连接一个固定节点
- D. 维护槽映射、处理 MOVED/ASK 重定向与节点发现
查看答案与解析
正确答案D
正确原因: 集群客户端自动路由请求,感知槽迁移与节点变更。
关键边界: 客户端不存储数据,只维护路由信息。
错误选项辨析: 客户端不复制数据、不持久化,可连接多个节点。
077 集群扩容与缩容的正确认识是?
难度: 实战
- A. 通过槽迁移在线调整,迁移期间服务可用但需监控资源
- B. 扩容必须停机重启
- C. 扩容会自动丢弃一半数据
- D. 扩容后所有 key 重新哈希到完全随机位置
查看答案与解析
正确答案A
正确原因: resharding 逐槽迁移 key,业务无感但有网络与 CPU 开销。
关键边界: 大 key 迁移耗时,需分批并监控。
错误选项辨析: 扩容不停机、不丢数据,key 按槽规则迁移而非随机。
078 高可用架构设计(Sentinel vs Cluster)的选择依据是?
难度: 实战
- A. Cluster 一定比 Sentinel 简单
- B. 数据量大需水平扩展用 Cluster;数据量小、要求简单主从高可用用 Sentinel
- C. Sentinel 支持分片存储
- D. 两者可以完全互相替代
查看答案与解析
正确答案B
正确原因: Cluster 自带分片与故障转移但运维复杂,Sentinel 只管主从切换。
关键边界: 需结合容量、运维能力与业务规模选择。
错误选项辨析: Cluster 更复杂,Sentinel 不分片,两者定位不同。
079 从库默认只读,读写分离时要注意什么?
难度: 基础
- A. 从库可以接受任意写命令
- B. 从库数据与主库实时一致
- C. 从库可能读到延迟数据,写命令应全部发往主库
- D. 读写分离不需要监控延迟
查看答案与解析
正确答案C
正确原因: 从库只读避免数据分叉,复制延迟导致读旧数据。
关键边界: 实时性要求高的读应路由到主库。
错误选项辨析: 从库拒绝写,数据有延迟,需监控复制进度。
080 哨兵模式与集群模式在故障转移上的共同点是?
难度: 进阶
- A. 切换零延迟零丢数据
- B. 切换不需要客户端配合
- C. 只有集群模式才有主从
- D. 都由多数派或节点协商选出新主并切换,期间会有短暂不可写窗口
查看答案与解析
正确答案D
正确原因: 两种模式都基于主从,故障转移存在选举与传播窗口。
关键边界: 客户端需要重连新主,应用需容忍短暂抖动。
错误选项辨析: 切换有代价,客户端需配合,哨兵模式同样有主从。