1. 配置主节点(Master):在主节点的redis.conf配置文件中,设置参数bind和port,指定主节点的IP地址和端口号。
2. 配置从节点(Slave):在从节点的redis.conf配置文件中,设置参数bind和port,指定从节点的IP地址和端口号。同时,设置参数slaveof,在该参数后指定主节点的IP地址和端口号,告诉从节点要连接的主节点信息。使用命令slaveof <masterip> <masterport>或在配置文件中设置replicaof <masterip> <masterport>,将从节点连接到主节点。
3. 启动主节点和从节点:先启动主节点,然后启动从节点。从节点连接到主节点后,开始进行主从同步。如果是第一次连接会发送SYNC命令,请求进行全量同步。
4. 全量同步(Full synchronization):从节点连接到主节点后,会发送SYNC命令,请求进行全量同步。主节点收到SYNC命令后,会执行BGSAVE命令创建RDB快照文件,并通过内部缓冲区记录所有写操作。一旦主节点完成BGSAVE操作,会将RDB快照文件发送给从节点,并将缓冲区中的写操作发送给从节点。从节点接收到RDB快照文件后,加载数据到内存中,然后将缓冲区中的写操作依次执行,使得从节点与主节点的数据保持一致。
5. 增量同步(Incremental synchronization):全量同步完成后,主节点会将每个写操作都发送给从节点,使得从节点能够持续更新自己的数据,与主节点保持同步。主节点将写操作发送给从节点的方式有两种:同步传输(Sync)和异步传输(Async)。在同步传输模式下,主节点执行写操作后会等待所有从节点的确认,然后才认为写操作完成;而在异步传输模式下,主节点执行写操作后立即返回,不等待从节点的确认。
6. 命令传播(Command Propagation):主节点将每个写命令通过网络发送给从节点。从节点接收到写命令后,会执行该命令,并将结果返回给主节点。主节点会根据从节点的回复确定是否需要重发该命令。
7. 故障恢复:如果主节点发生故障,从节点可以自动选择新的主节点,并成为新的主节点的从节点。当旧主节点恢复后,可以作为新的从节点连接到新的主节点上。
8. 断线重连:如果从节点与主节点的连接中断,从节点会尝试重新连接主节点。一旦重新连接成功,从节点会根据主节点的复制偏移量(replication offset)请求增量同步。
通过主从同步,Redis实现了数据的复制和高可用性。主节点负责处理写请求,而从节点则负责处理读请求,提高了系统的并发能力和容错性,提升整个系统的可靠性和性能。
值得注意的是,Redis主从同步是异步的,从节点可能存在一定的数据延迟。此外,在Redis 6.0及更高版本中,还提供了PSYNC命令和增量复制功能,进一步改进了主从同步的性能和可靠性。