能说说Redis集群的原理吗?
能说说Redis集群的原理吗?Redis集群通过数据分区实现数据的分布式存储,并通过自动故障转移实现高可用性。
笨鸟教程,涵盖Intellij IDEA教程,PyCharm教程,GoLand教程,WebStorm教程,ChatGPT教程,AI绘画教程,Obsidian教程, Notion教程,Midjourney教程,Java教程,Python教程,Golang教程,AI工具等各类AI编程教程。
Redis在2.8及以上版本使用psync命令完成主从数据同步,同步过程分为:全量复制和部分复制。
全量复制通常用于初始复制的场景。在早期的Redis版本中,只支持全量复制,它会将主节点的所有数据一次性发送给从节点。然而,当数据量较大时,这会对主从节点和网络造成很大的开销。
全量复制的完整运行流程如下:
psync
命令进行数据同步。由于是第一次复制,从节点没有复制偏移量和主节点的运行ID,因此发送psync-1
。psync-1
解析出当前为全量复制,并回复+FULLRESYNC
响应。bgsave
命令将数据保存到RDB文件中。bgrewriteaof
操作,以确保全量复制后AOF持久化文件立即可用。部分复制是Redis针对全量复制开销较高的情况进行的优化措施,使用psync {runId} {offset}
命令实现。当从节点正在复制主节点时,若出现网络中断或命令丢失等异常情况,从节点会向主节点请求补发丢失的命令数据。如果主节点的复制积压缓冲区中存在这些数据,主节点会直接发送给从节点,从而保持主从数据的一致性。
具体的部分复制流程如下:
repl-timeout
时间后,主节点会认为从节点发生故障并中断复制连接。主节点的运行ID作为psync
命令的参数,请求进行部分复制操作。
psync
命令后,首先核对参数中的运行ID是否与自身一致。如果一致,表示之前进行复制的是当前的主节点。然后,主节点根据偏移量在复制积压缓冲区中查找数据。如果偏移量之后的数据存在于缓冲区中,主节点会向从节点发送+CONTINUE
响应,表示可以进行部分复制。