侧边栏壁纸
  • 累计撰写 18 篇文章
  • 累计创建 10 个标签
  • 累计收到 1 条评论

redis主从复制

gnng
2022-05-17 / 0 评论 / 0 点赞 / 869 阅读 / 1,825 字
温馨提示:
本文最后更新于 2022-05-17,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 简介

1.1 三高

  • 高并发
  • 高性能
  • 高可用

1.2 单机redis的问题

  1. 机器故障

    • 现象:硬盘故障、系统崩溃
    • 本质:数据丢失,很可能对业务造成灾难性打击
    • 结论:放弃使用redis
  2. 容量瓶颈

    • 现象:内存不足,从16G升至32G,无限升级内存
    • 本质:硬件条件跟不上业务需要
    • 结论:放弃使用redis

    结论:为了避免单点redis服务器故障,准备多台服务器,相互连通。将数据复制多个副本保存到多个服务器上,连接再一起并保证数据的同步。即使一台服务器宕机,其余服务器也可以提供继续服务,保证redis高可用,同时实现了数据冗余备份。

1.3 多机的连接方案

  • 数据提供方:master(主服务器,主节点,主库,主客户端)
  • 数据接收方:slave
  • 需要解决的问题:数据同步
  • 核心工作:将master中的数据同步到slave中

1.4 主从复制

  • 概念:将master中的数据即时、有效的复制给slave中
  • 特征:一个master可以对应多个slave,一个slave只对应一个master(一对多)
  • 职责:
    • master
      • 写数据
      • 执行写操作时,将变化的数据同步到slave中
      • 读忽略
    • slave
      • 读数据
      • 写禁止

1.5 作用

  • 读写分离:master写、slave读,提高服务的读写负载能力
  • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量。通过多个slave分担数据读负载,大大提高的redis并发量和数据吞吐量
  • 故障恢复:当master出现故障时,由slave提供服务,实现快速故障恢复
  • 数据冗余:实现数据热备份,是持久化之外的数据冗余方式
  • 高可用基石:基于主从复制,构建哨兵模式与集群,实现redis高可用方案

2. 工作流程

2.1 总述

  1. 建立连接
  2. 数据同步
  3. 命令传播

2.2 工作流程

  • 阶段一:建立连接
    • 建立slave到master的连接,使master能够识别slave,并保持slave端口号
      1. 设置master地址和端口,保存master信息
      2. 建立socket连接
      3. 发送ping指令(定时器)
      4. 身份验证
      5. 发送slave端口信息
  • 阶段二:数据同步工作阶段流程
    • 在slave初次连接master后,复制master中所有的数据到slave中
    • 将slave数据库状态更新成master当前的数据库状态
  • 阶段三:命令传播阶段
    • 当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要主从同步数据状态,同步的动作叫命令传播
    • master将收到的数据改变的命令发送到slave,slave接收命令后执行

2.3 部分复制

  • 命令传播阶段会出现部分复制的问题
    • 网络闪断闪连接 忽略
    • 短时间网络中断 部分复制
    • 长时间网络中断 全量复制
  • 部分复制的三个核心要素
    • 服务器运行的ID(run id)
      • 概念:服务器运行ID是每台服务器运行的身份标识码,一台服务器多次运行可以生成多个运行id
      • 组成:运行id由40位字符组成,是一个随机的16进制字符
      • 作用:运行id被用于服务器间传输时的身份识别(如果想两次操作均对同一台服务器进行,必须每次操作携带对应的运行id,用于对方识别)
      • 实现方式:运行id在每台服务器启动的时候生成,master在首次连接slave时,会将自己的运行id发送给slave,slave会保存此id,通过info server命令查看服务器运行id
    • 主服务器的复制积压缓冲区
      • 概念:复制缓冲区又叫复制积压缓冲区,是一个先进先出(FIFO)的消息队列,用于存储服务器执行过的命令,每次传播命令,master都会把传播的命令记录下来,存入复制缓冲区中。
      • 由来:
        • 每台服务器启动时,如果开启有AOF或被连接为master节点,即创建复制缓冲区。
        • 复制缓冲区默认存储空间为1M,由于存储空间大小是固定的,当入队元素大于队列长度时,最先入队的元素会被弹出,新元素被放入队列。
      • 作用:用于收集master所有运行指令(仅影响数据变化的指令)
      • 数据来源:当master收到主客户端指令时,除了执行指令,还会把它存入缓冲区
    • 主从服务器的复制偏移量
      • 概念:一个数字,描述积压缓冲区中指令字节的位置
      • 分类:
        • master复制偏移量:记录发送给所有slave的指令字节对应的位置(多个)
        • slave复制偏移量:记录slave接收master发送过来的指令对应的位置(一个)
      • 数据来源:
        • master端:发送一次记录一次
        • slave端:接收一次记录一次
      • 作用:同步信息,比对master和slave的差异,当slave断线后,恢复数据使用

3. 常见问题

  • 频繁的全量复制
  • 频繁的网络中断
  • 数据不一致
0

评论区