建议先关注、点赞、收藏后再阅读。
在Redis中,复制功能是通过使用主从模式来实现的。一台Redis服务器(称为主服务器)可以有多个从服务器连接到它。
主服务器接收到的写操作将被复制到所有连接的从服务器上,从而使得所有从服务器上的数据与主服务器保持一致。
当一个从服务器与主服务器建立复制连接时,它会发送一个SYNC命令给主服务器。
主服务器接收到SYNC命令后会执行以下步骤来进行复制:
- 主服务器会执行BGSAVE命令,生成一个RDB快照文件,保存数据库中的键值对数据。
- 主服务器会将RDB快照文件发送给从服务器,并在发送期间继续接收和处理新的写操作。
- 从服务器接收到RDB快照文件后,会先清空自己的数据库,然后加载RDB文件恢复数据库状态。
- 主服务器会将复制缓冲区中的写操作发送给从服务器,从服务器会重新执行这些写操作,使得从服务器达到与主服务器一致的状态。
- 从服务器与主服务器建立起复制连接后,会周期性地向主服务器发送PING命令来进行心跳检测,以确保连接的稳定性。
- 如果从服务器断开连接,或者无法及时响应PING命令,主服务器会将断开连接的从服务器标记为下线,并在其重连后重新进行复制同步。
简单总结一下心跳检测实现过程:
- 从服务器周期性地向主服务器发送PING命令。
- 主服务器接收到PING命令后,会回复一个PONG命令作为响应。
- 如果从服务器在一定时间内未收到主服务器的响应或者连接异常断开,从服务器会标记主服务器为下线。
- 当从服务器重新连接到主服务器时,会重新进行复制同步。
在Redis复制中,当主节点在发送命令期间出现故障时,从节点将会采取以下几个步骤来处理:
- 从节点会发现与主节点的连接已经断开。
- 从节点会尝试重新连接主节点。
- 从节点会不断地尝试重新连接主节点直到连接成功或者超过了指定的超时时间。
- 当从节点重新连接上主节点后,会判断主节点是否是正常的主节点,如果是,则继续进行复制。
- 如果主节点不是正常的主节点,而是一个新的主节点,从节点会被提示需要进行全量复制。
- 从节点会执行全量复制的操作,即请求主节点将所有的数据发送给它。
- 主节点会将所有的数据发送给从节点,并保持这个连接直到所有数据都被发送完毕。
- 从节点在接收到所有数据后,会将这些数据保存到自己的数据库中。
- 主节点会将这段时间内执行的所有写命令保存在缓冲区中。
- 当从节点完成全量复制后,会给主节点发送一个命令断开全量复制模式。
- 主节点会将缓冲区中的数据发送给从节点,并逐个执行这些写命令。
- 从节点会将这些写命令依次执行,保持与主节点的数据一致性。
总结
当主节点在发送命令期间出现故障时,从节点会尝试重新连接主节点,如果连接成功,则继续复制,如果连接失败,则进行全量复制操作,保持数据的一致性。