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> # 如果主节点设置了密码,需要在此配置

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

相关推荐
行业研究员19 小时前
腾讯云数据库:团队知识统一检索实践
数据库·云计算·腾讯云·腾讯云数据库·团队知识
朱容zr33313319 小时前
什么是覆盖索引?它的优点是什么?
数据库
changjiahong20 小时前
lvs总结
服务器·数据库·lvs
【心态好不摆烂】20 小时前
MySQL——复合查询
数据库·mysql
AC赳赳老秦20 小时前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
瞬间&永恒~20 小时前
【MySQL】 InnoDB 锁等待排查与并发压测实验
运维·数据库·mysql
布鲁飞丝20 小时前
对 .NET线程 异常退出引发程序崩溃的反思
数据库·c#·.net
zcmodeltech20 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
江晓鱼未暖21 小时前
十七、Redis 核心原理与架构详解
大数据·数据库·数据仓库·redis·缓存·架构
copyer_xyf21 小时前
PostgreSQL 做向量检索:一条单库路线
数据库·agent·nestjs