【Redis学习】Redis复制(replica)

文章详细介绍了Redis的主从复制功能,包括其作用如读写分离、容灾恢复和数据备份等。通过配置slaveof命令或在配置文件中设定,实现从节点对主节点的复制。当主节点shutdown后,从节点不会自动升级为主,需手动处理。文中还探讨了复制过程中的全量复制和增量复制,以及哨兵机制在解决主节点故障时的重要性。

理论简介

在这里插入图片描述

在这里插入图片描述

定义

replica即主从复制,master以写为主,Slave以读为主。

当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。

功能

读写分离

容灾恢复

数据备份

水平扩容支撑高并发

使用

配从(Slave)不配主(Master)

权限细节

master如果配置了requirenass参数,需婴密码登陆,那么slave就要配置masterauth来设置校验密码,否则的话master会拒绝slave的访问请求。

基本操作命令

info replication

可以查看复制节点的主从关系和配置信息

replicaof 主库IP 主库端口

一般写入进redis.conf配置文件内

slaveof 主库IP 主库端口

临时命令,每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件

在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步(重新拜码头)

slaveof no one

使当前数据库停止与其他数据库的同步,转成主数据库(自立为王)

演示架构

架构说明

一个Master两个Slave

3台虚机,每台都安装redis

拷贝多个redis.conf文件

redis6379.conf

redis6380.conf

redis6381.conf

小口诀

三边网络相互ping通且注意防火墙配置

三大命令

主从复制

replicaof 主库IP 主库端口

配从(库)不配主(库)

改换门庭

slaveof 新主库IP 新主库端口

自立为王

slaveof no one

配置细则

以redis6379.conf为例

  1. 开启daemonize yes

在这里插入图片描述

  1. 注释掉bind 127.0.0.1

在这里插入图片描述

  1. protected-mode no

在这里插入图片描述

  1. 指定端口

在这里插入图片描述

  1. 指定当前工作目录,dir

在这里插入图片描述

  1. pid文件名字,pidfile

在这里插入图片描述

  1. log文件名字,logfile

在这里插入图片描述

  1. requirepass

在这里插入图片描述

  1. dump.rdb名字

在这里插入图片描述

  1. aof文件,appendfilename
    默认即可,无需修改

  2. 从机访问主机的通行密码masterauth,必须(从机需要配置,主机不用)

在这里插入图片描述

一主二仆

在这里插入图片描述

方案1:配置文件固定写死

配置文件执行:replicaof 主库IP 主库端口

配从(库)不配主(库)

先master后两台slave依次启动

主从关系查看

日志

主机日志

在这里插入图片描述

在这里插入图片描述

从机日志

在这里插入图片描述

命令

info replication命令查看

主机

在这里插入图片描述

从机

在这里插入图片描述

主从问题演示

  1. 从机可以执行写命令吗? ——N

在这里插入图片描述

  1. 从机切入点问题

slave是从头开始复制还是从切入点开始复制?

master启动,写到k3

slave1跟着master同时启动,跟着写到k3

slave2写到k3后才启动,那之前的是否也可以复制?

Y,首次一锅端,后续跟随,master写,slave跟

  1. 主机shutdown后,从机会上位吗? ——N

主机shutdown后情况如何?从机是上位还是原地待命

从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来。

在这里插入图片描述

  1. 主机shutdown后,重启后主从关系还在吗?从机还能否顺利复制? ——Y

  2. 某台从机down后,master继续,从机重启后它能跟上大部队吗? ——Y

方案2:命令操作手动指定

从机停机去掉配置文件中的主从配置项,3台目前都是主机状态,各不从属

  • 3台master

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 预设的从机上执行命令

    slaveof 主库IP 主库端口

    效果

    在这里插入图片描述

  • 用命令使用的话,2台从机重启后,关系还在吗? ——N

    slaveof只是一次服务开启时的临时配置,服务关闭后无效。

    在这里插入图片描述

配置VS命令的区别

配置:持久稳定

命令:当次生效

薪火相传

在这里插入图片描述

上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻主master的写压力

中途变更转向:会清除之前的数据,重新建立拷贝最新的

slaveof 新主库IP新主库端口

虽然对于6381是master,但6380的身份依旧是slave,无法执行写操作。

在这里插入图片描述

反客为主

在这里插入图片描述

slaveof no one

使当前数据库停止与其他数据库的主从关系、

在这里插入图片描述

工作流程总结

slave启动,同步初请

slave启动成功连接到master后会发送一个sync命令

slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身的数据会被master覆盖

首次连接,全量复制

master节点收到sync命令后会开始在后台保仔快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步。

而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。

心跳持续,保持通信

repl-ping-replica-period 10

默认每10秒钟主机向从机发送信息,确保从机状态正常。

进入平稳,增量复制

Master继续将新的所有收集到的修改命令自动依次传给slave,完成同步。

从机下线,重连续传

master会检查backlog里面的offset,master和slave都会保存一个复制的offset;还有一个masterId,offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传。

痛点和改进需求

复制延时,信号衰减

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

在这里插入图片描述

master挂了怎么办?

那每次都要人工干预?

无人值守安装变成刚需 —— 哨兵机制

Redis 中,副本(replica)功能是实现高可用性和数据冗余的关键机制。Redis 支持主从复制(master-replica replication),其中 replica 节点会从 master 节点同步数据,从而确保多个节点间的数据一致性。 ### 配置 replica 节点 要配置一个 Redis 实例作为 replica 节点,可以在其配置文件中设置以下参数: ```properties replicaof <masterip> <masterport> ``` 此指令使当前 Redis 实例成为指定 master 的 replica。例如,如果 master 的 IP 地址为 `192.168.1.10`,端口为 `6379`,则配置如下: ```properties replicaof 192.168.1.10 6379 ``` 此外,还可以通过命令行动态设置 replica: ```shell REPLICAOF <masterip> <masterport> ``` 若需要停止复制并恢复为独立的 master 节点,可使用: ```shell REPLICAOF NO ONE ``` ### 认证与安全 如果 master 启用了密码认证,则需在 replica 的配置文件中添加: ```properties masterauth <password> ``` 该设置确保 replica 在连接到 master 时能够提供正确的身份验证信息[^4]。 ### 数据同步机制 Redis 使用异步复制机制,默认情况下,replica 在启动后会向 master 发送 SYNC 命令以进行全量同步。随后,master 将其内存中的所有数据发送给 replica。一旦初次同步完成,后续的写操作将通过命令传播的方式持续发送至 replica,以保持数据一致性[^1]。 从 Redis 2.8 开始引入了部分重同步(Partial Resynchronization)功能,它允许断线重连后的 replica 仅同步断线期间丢失的部分数据,而不是执行完整的 SYNC 操作。这一机制依赖于复制积压缓冲区(replication backlog buffer)和 run ID 等特性。 ### 只读模式 默认情况下,replica 被配置为只读模式: ```properties replica-read-only yes ``` 这意味着 replica 不允许执行任何写入操作。然而,可以通过修改配置来启用写入能力: ```properties replica-read-only no ``` 需要注意的是,在非只读模式下对 replica 执行的写操作不会被传播回 master 或其他 replica,这可能导致数据不一致问题。 ### 复制拓扑结构 Redis 支持链式复制结构,即一个 replica 可以进一步作为其他节点的 master。这种设计有助于减轻主节点的网络负载,并提高系统的扩展性。例如,可以构建如下结构: - Master → Replica A → Replica B 在这种情况下,Replica A 既是 master 的 replica,也是 Replica B 的 master[^1]。 ### 故障转移与高可用 尽管 Redis 原生支持主从复制,但为了实现自动故障转移,通常建议结合 Redis Sentinel 或 Redis Cluster 使用。Sentinel 系统可以监控 master 和 replica 的状态,并在检测到 master 不可用时自动选举新的 master,同时更新其他节点的复制关系[^3]。 ### 性能调优 当部署大量 replica 时,应注意调整以下参数以优化性能: - **client-output-buffer-limit**:控制客户端输出缓冲区大小,防止因大量数据传输导致内存溢出。 - **repl-ping-slave-period**:定义 master 向 replica 发送 PING 的频率,用于检测连接状态。 - **repl-timeout**:设置复制过程中某些阶段的最大等待时间,包括连接建立、数据传输等[^4]。 ### 日志与调试 启用适当的日志级别有助于监控复制过程中的行为及排查潜在问题。推荐在生产环境中使用 `notice` 级别记录日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值