MST

星途 面试题库

面试题:Redis集群中复制是如何实现的?

请详细描述Redis集群中主从复制的工作流程,包括数据同步的阶段以及相关的命令和机制。
17.6万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

1. 主从复制初始化阶段

  1. 从节点连接主节点:从节点通过 SLAVEOF <master_ip> <master_port> 命令连接到主节点,发送同步请求。这个命令用于指定主节点的IP地址和端口号,从而建立起从节点与主节点的联系。
  2. 主节点响应:主节点接收到从节点的同步请求后,执行 BGSAVE 命令,在后台生成RDB文件。同时,主节点会将新收到的写命令缓存起来。BGSAVE 命令用于在后台异步生成RDB快照文件,这样不会阻塞主节点处理客户端请求。

2. 数据同步阶段

  1. 主节点发送RDB文件:主节点生成RDB文件完毕后,将该文件发送给从节点。从节点接收到RDB文件后,先将其保存到磁盘,然后加载RDB文件到内存,此时从节点的数据就与主节点执行 BGSAVE 命令时的数据保持一致。
  2. 主节点发送缓存的写命令:主节点将在生成RDB文件期间缓存的写命令发送给从节点,从节点执行这些命令,进一步保证数据的一致性。

3. 命令传播阶段

  1. 持续同步:在数据同步完成后,主节点会将后续接收到的写命令以 REPLCONF ACK <offset> 的形式不断地发送给从节点。从节点每执行一个写命令,就会向主节点发送 REPLCONF ACK 命令,报告自己已处理的写命令的偏移量。这里的偏移量是指主节点记录的写命令在复制流中的位置,通过这种方式主从节点可以确认彼此的数据同步进度。
  2. 心跳机制:主从节点之间还会使用心跳机制来维持连接状态。从节点默认每秒向主节点发送 PING 命令,主节点回复 PONG。如果主节点超过 repl-timeout 配置的时间(默认60秒)没有收到从节点的 PING 命令,会认为从节点离线;如果从节点超过 repl-timeout 时间没有收到主节点的 PONG 回复,也会认为主节点离线。这种心跳机制有助于及时发现网络故障或节点异常情况,保证主从复制的稳定性。