面试题答案
一键面试1. Redis集群复制基本原理
- 主从节点关系建立:在Redis集群中,用户通过
SLAVEOF
命令(或配置文件设置)让一个Redis实例(从节点)成为另一个实例(主节点)的副本。主节点负责处理写操作并维护数据状态,从节点则复制主节点的数据。 - 数据同步机制:
- 全量同步:当从节点初次连接主节点时,会触发全量同步。主节点执行
BGSAVE
命令生成RDB快照文件,同时将新的写命令缓存到内存缓冲区。生成RDB文件后,主节点将其发送给从节点,从节点接收到RDB文件后,先清空本地数据,然后加载RDB文件。接着主节点将内存缓冲区中缓存的写命令发送给从节点,从节点执行这些命令以完成数据同步。 - 部分同步:全量同步完成后,主从节点间会维持一个复制偏移量(replication offset)和复制积压缓冲区(replication backlog)。主节点每处理一个写命令,除了在自身数据集执行外,也会将写命令发送给从节点,同时主从节点都会更新自己的复制偏移量。当从节点因网络等原因与主节点短暂失联后重新连接,如果从节点记录的偏移量在主节点的复制积压缓冲区范围内,主节点会根据从节点记录的偏移量,从复制积压缓冲区中提取从节点缺失的写命令,发送给从节点,从而实现部分同步。
- 全量同步:当从节点初次连接主节点时,会触发全量同步。主节点执行
2. 增强系统容错能力的方式
- 读请求负载均衡:由于从节点保存了主节点的数据副本,客户端可以将读请求发送到从节点,这样可以分散主节点的读压力。在集群环境下,多个从节点可以同时处理读请求,提高系统的读性能,增强整体的可用性。
- 故障转移:当主节点发生故障时,集群中的从节点可以被选举为新的主节点。Redis Sentinel机制或Redis Cluster的内置故障检测与转移机制可以自动检测主节点故障。例如,在Redis Sentinel中,多个Sentinel节点会定期向主从节点发送心跳检测命令。当大部分Sentinel节点都判定主节点主观下线(主观认为主节点不可用),并且经过一定协商(客观下线)后,Sentinel会从从节点中选举一个作为新的主节点,同时将其他从节点指向新的主节点,从而保证系统的写操作依然可以正常进行,大大增强了系统的容错能力。