redis详细教程(6.主从复制)

主从复制是一种数据库复制技术,用于在多个数据库服务器之间同步数据。

为什么要使用主从复制:

redis主从复制可以提高系统的可靠性和稳定性,保证数据可用,实现了读写分离,即使主节点出现故障,从节点仍然可以提供数据。这是持久化之外的一种数据冗余方式。

当从节点启动时,或者当它决定与一个新的主节点建立复制关系时,它会向主节点发送一个PSYNC命令。这个命令的目的是请求与主节点进行数据同步。

主节点收到PSYNC命令后,会判断是否可以进行部分同步(即增量同步),还是需要进行全量同步。如果从节点之前已经同步过,并且主节点有能力进行部分同步,它会尝试部分同步。但在初始同步的情况下,或者主节点无法进行部分同步时,它会执行全量同步。

全量同步过程

创建快照

主节点开始执行一个BGSAVE命令,这个命令会在后台生成当前数据集的快照(RDB文件)。此时主节点开始缓冲所有从现在开始收到的写命令,以确保从节点在加载快照后能够继续同步最新的数据变化。

发送快照

一旦快照生成完成,主节点会将这个RDB文件发送到从节点。从节点接收到RDB文件后,会将其加载到内存中,从而获得主节点数据集的一个完整副本。

发送缓冲区命令

在从节点加载完RDB文件之后,主节点会将自开始创建快照以来缓冲的所有写命令发送给从节点,从节点会执行这些命令,确保其数据状态与主节点保持一致。

通过这个过程,从节点能够获得主节点的数据副本,并开始在后续的操作中接收和执行主节点的写命令,以保持数据的同步。

增量同步(部分同步)过程

在初始同步完成后,主从节点之间会进行增量同步,也称为部分同步。

主节点和从节点都维护一个复制偏移量(offset),这是一个不断增加的计数器,用于记录主节点处理过的写命令的数量。

当从节点与主节点断开连接后重新连接,它会告诉主节点它最后一次同步时的复制偏移量。

主节点会根据从节点提供的复制偏移量,在它的复制缓冲区(replication backlog)中查找对应的同步点。

如果复制缓冲区足够大,能够包含从节点断开连接时的数据,主节点就可以从这个点开始发送后续的写命令给从节点。

主节点将从同步点开始,发送所有新的写命令给从节点,从节点接收到这些命令后,会按照相同的顺序执行它们,从而更新其数据集,使其与主节点的数据集保持一致。

心跳机制

主从节点之间会定期发送心跳包以维持连接状态。

从节点会每隔一定时间向主节点发送REPLCONF ACK <offset>命令,报告自己的复制偏移量(offset)。

主节点可以通过心跳包来检测从节点的存活状态,并判断复制是否滞后。

主从复制的一些问题

数据一致性问题:在网络延迟或故障时,可能会出现数据短暂不一致的情况。

复制延迟:如果主节点的写操作非常频繁,从节点可能会出现复制延迟。

资源消耗:全量同步过程中,主节点生成快照和传输数据会消耗大量CPU和带宽资源。

使用主从复制:

配置主节点

通常,主节点不需要特别配置,因为它默认就是以主节点模式运行的。但是,为了确保数据的安全性和可恢复性,建议在主节点上启用持久化功能(AOF或RDB)。

配置从节点

在从节点的配置文件(通常是redis.conf)中,需要添加以下配置项:

slaveof <master-ip> <master-port> # 指定主节点的IP地址和端口

masterauth <master-password> # 如果主节点设置了密码,需要在此配置

首先启动主节点,然后启动从节点。从节点在启动时将尝试连接到指定的主节点,并开始数据同步过程。

相关推荐
梦想平凡4 分钟前
棋牌游戏技术实战(五):从对局事件重新执行规则,核对棋盘和最终状态
数据库·游戏·oracle
白露与泡影11 分钟前
Oracle AI Database 26ai RAC 部署步骤、关键命令与一键脚本
数据库·人工智能·oracle
天天喝旺仔1 小时前
MySQL 索引原理与慢查询优化实战:从 B+ 树到执行计划调优
数据库·sql·mysql·性能优化
骇客野人1 小时前
微服务多级缓存架构设计
缓存·微服务·架构
liulilittle1 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
DongQiShanRen1 小时前
玄龙(上):TICK 主循环——意识心跳怎么跳
linux·jvm·数据库·人工智能·数据挖掘·rust
数据库小学妹2 小时前
存算分离到底分离了什么?四条架构变化与选型判断
数据库·数据库架构·云原生数据库·缓存一致性·存算分离
FPGA小徐2 小时前
【一生一芯 / PA】异常响应机制:RISC-V 中 ecall → mtvec → mret 的完整代
开发语言·数据库·c#
m0_646429972 小时前
MySQL 初始化 SQL 中文乱码问题总结
数据库·sql·mysql
实战派K8S&DB2 小时前
TDSQL 核心模块与进程体系
运维·数据库·分布式·sql·mysql