面试题答案
一键面试1. 主从复制初始化阶段
- 从节点连接主节点:从节点通过
SLAVEOF <master_ip> <master_port>
命令连接到主节点,发送同步请求。这个命令用于指定主节点的IP地址和端口号,从而建立起从节点与主节点的联系。 - 主节点响应:主节点接收到从节点的同步请求后,执行
BGSAVE
命令,在后台生成RDB文件。同时,主节点会将新收到的写命令缓存起来。BGSAVE
命令用于在后台异步生成RDB快照文件,这样不会阻塞主节点处理客户端请求。
2. 数据同步阶段
- 主节点发送RDB文件:主节点生成RDB文件完毕后,将该文件发送给从节点。从节点接收到RDB文件后,先将其保存到磁盘,然后加载RDB文件到内存,此时从节点的数据就与主节点执行
BGSAVE
命令时的数据保持一致。 - 主节点发送缓存的写命令:主节点将在生成RDB文件期间缓存的写命令发送给从节点,从节点执行这些命令,进一步保证数据的一致性。
3. 命令传播阶段
- 持续同步:在数据同步完成后,主节点会将后续接收到的写命令以
REPLCONF ACK <offset>
的形式不断地发送给从节点。从节点每执行一个写命令,就会向主节点发送REPLCONF ACK
命令,报告自己已处理的写命令的偏移量。这里的偏移量是指主节点记录的写命令在复制流中的位置,通过这种方式主从节点可以确认彼此的数据同步进度。 - 心跳机制:主从节点之间还会使用心跳机制来维持连接状态。从节点默认每秒向主节点发送
PING
命令,主节点回复PONG
。如果主节点超过repl-timeout
配置的时间(默认60秒)没有收到从节点的PING
命令,会认为从节点离线;如果从节点超过repl-timeout
时间没有收到主节点的PONG
回复,也会认为主节点离线。这种心跳机制有助于及时发现网络故障或节点异常情况,保证主从复制的稳定性。