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

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

相关推荐
o(╥﹏╥)16 分钟前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
海海不掉头发22 分钟前
苍穹外卖-day05redis 缓存的学习
学习·缓存
阿里嘎多学长30 分钟前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_33 分钟前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Sunyanhui137 分钟前
牛客网 SQL36查找后排序
数据库·sql·mysql
老王笔记1 小时前
MHA binlog server
数据库·mysql
lovelin+v175030409662 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
川石教育2 小时前
Vue前端开发-缓存优化
前端·javascript·vue.js·缓存·前端框架·vue·数据缓存
DT辰白2 小时前
基于Redis的网关鉴权方案与性能优化
数据库·redis·缓存