Redis主从复制

文章目录


1.为什么需要?

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

2.过程

Redis主从复制

主要分为三步:

  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写功能,停止数据同步

上一篇:spring动态切换多数据源


下一篇:现代源代码管理工具——重点描述TFS