Redis主从复制

2021/9/4 2:07:37

本文主要是介绍Redis主从复制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 1.为什么需要?
  • 2.过程
  • 3.心跳机制部分注意事项


1.为什么需要?

主从复制的原因可以从这几个方面看一下:
1)读写分离,分担一个redis数据库的压力,主节点主要是写,然后同步到从节点,从节点主要负责读
2)数据备份,是持久化的另一种数据保存
3)故障恢复,当主节点凉凉的时候,可以选择一个从节点作为主节点

2.过程

在这里插入图片描述

主要分为三步:

  1. 建立连接
    从节点和主节点进行连接,从节点保存主节点的ip+端口;主节点保存从节点的端口;
    主要是建立的socket连接,内部包含一些授权操作。
  2. 数据同步
    主要分为两步:
    2.1)全量复制
    - 从节点发送psync2指令;
    - 主节点执行bgSave指令,保存RDB文件
    - 同时记录runid + offest
    - 将上面的RDB、offset、runid发送给从节点
    - 从节点进行恢复RDB
    2.2)增量复制
    - 从节点再次发送指令psync2 runid offset 指令
    - 主节点判断自身的offset > offset(slave)
    - 将这部分的内容 + offset 发给从节点
    - 从节点收到这些命令进行bgwriteaof,进行恢复数据,并保存新的offset(slave)
  3. 命令传播(心跳机制)
    这部分其实就是 增量复制的过程,只是中途可能出现主从节点的一个网络问题,导致重新进行第二步的数据同步:
    -主节点每10s发送ping 指令来判断从节点是否在线
    -而从节点每1s发送 ** replconf ack{offset}**指令,进行判断主节点是否在线,以及增量复制
    -增量复制(完整版)
    1:主节点判断从节点的runid和offset
    2:如果runid不同,直接全量复制
    3:如果offset(slave)不在slave,全量复制
    4:当offset(slave) = offset(master),不发送
    5:当offset(slave)!= offset(master),发送offset(master)和中间部分的内容

3.心跳机制部分注意事项

当slave多数掉线 + 延迟过高,则master则会拒绝同步
如:slave数量少于2个,或者所有slave的延迟都大于等于10秒时,强制关闭master写功能,停止数据同步



这篇关于Redis主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程