MST

星途 面试题库

面试题:Redis Sentinel 并发处理中如何保证数据一致性

在 Redis Sentinel 向主从服务器并发发送信息时,要保证数据在主从服务器间的一致性是一个关键挑战。阐述 Sentinel 是如何通过其内部机制,如选举算法、心跳检测等,来确保在高并发环境下,主从服务器的数据始终保持一致,并且在发生故障转移时,数据也能正确同步。
19.4万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

1. 选举算法确保一致性

  • 领导者选举:Redis Sentinel 使用 Raft 或类似的选举算法。当 Sentinel 集群检测到主服务器可能发生故障时,会进行领导者选举。只有成为领导者的 Sentinel 才能执行故障转移操作。这避免了多个 Sentinel 同时进行故障转移导致的数据不一致。例如,假设多个 Sentinel 同时尝试将不同的从服务器提升为主服务器,会造成数据分裂,而选举算法确保了只有一个 Sentinel 能主导故障转移过程。
  • 决策一致性:选举出的领导者 Sentinel 会收集其他 Sentinel 的信息,并基于多数派的意见进行决策。比如在判定主服务器是否真的下线时,需要多数 Sentinel 认同。这保证了在集群范围内对主服务器状态判断的一致性,从而为数据一致性奠定基础。

2. 心跳检测维护状态

  • 主从服务器心跳:Sentinel 会定期向主服务器和从服务器发送 PING 命令作为心跳检测。通过监控心跳回复时间(即响应延迟),Sentinel 可以判断服务器是否正常运行。如果主服务器长时间未响应心跳,Sentinel 会标记其为疑似下线(主观下线)。例如,如果主服务器因为网络拥塞在 10 秒内未回复心跳,Sentinel 会记录此情况。
  • Sentinel 间心跳:Sentinel 之间也会互相发送心跳信息,用于交换关于主从服务器的状态以及 Sentinel 自身的状态。这样可以保证 Sentinel 集群内信息的实时同步和一致性。例如,一个 Sentinel 发现主服务器疑似下线后,会通过心跳将此信息传递给其他 Sentinel。

3. 故障转移时的数据同步

  • 从服务器晋升:当主服务器被判定为客观下线(多数 Sentinel 认同主服务器下线)后,领导者 Sentinel 会从从服务器中挑选一个晋升为主服务器。挑选规则通常基于从服务器的复制偏移量(复制进度)、优先级等。优先选择复制偏移量最大(即数据最完整)且优先级高的从服务器,以确保新主服务器的数据尽可能接近原主服务器。
  • 数据同步:新主服务器选举出来后,其他从服务器会自动开始与新主服务器进行数据同步。Redis 使用复制机制,新主服务器会执行 SYNCPSYNC 命令,将自身的数据状态同步给从服务器。例如,新主服务器会生成一个全量快照(RDB 文件)发送给从服务器,从服务器加载该快照并应用后续的写命令日志(AOF 文件),从而达到数据一致性。在故障转移过程中,Sentinel 会持续监控这个同步过程,确保所有从服务器都能成功与新主服务器同步数据。