redis学习-复制功能


今天介绍下redis的复制功能

复制配置

  • 参与复制的Redis实例划分为主节点(master)和从节点(slave)
  • 复制的数据流是单向的,只能由主节点复制到从节 点。配置复制的方式有以下三种
    • 在配置文件中加入slaveof{masterHost}{masterPort}随Redis启动生 效
    • 在redis-server启动命令后加入–slaveof{masterHost}{masterPort}生 效
    • 直接使用命令:slaveof{masterHost}{masterPort}生效

拓扑介绍

  • 一主一从结构
    • 最简单的复制拓扑结构,用于主节点出现宕机时从节点 提供故障转移支持
    • 当应用写命令并发量较高且需要持久 化时,可以只在从节点上开启AOF,这样既保证数据安全性同时也避免了持 久化对主节点的性能干扰
    • 当主节点关闭持久化功能时, 如果主节点脱机要避免自动重启操作。因为主节点之前没有开启持久化功能 自动重启后数据集为空,这时从节点如果继续复制主节点会导致从节点数据 也被清空的情况,丧失了持久化的意义。安全的做法是在从节点上执行 slaveof no one断开与主节点的复制关系,再重启主节点从而避免这一问题
  • 一主多从结构
    • 一主多从结构(又称为星形拓扑结构)使得应用端可以利用多个从节点 实现读写分离
    • 对于读占比较大的场景,可以把读命令发送到 从节点来分担主节点压力。同时在日常开发中如果需要执行一些比较耗时的 读命令,如:keys、sort等,可以在其中一台从节点上执行,防止慢查询对 主节点造成阻塞从而影响线上服务的稳定性
  • 树状主从结构
    • 树状主从结构(又称为树状拓扑结构)使得从节点不但可以复制主节点 数据,同时可以作为其他从节点的主节点继续向下层复制
    • 通过引入复制中 间层,可以有效降低主节点负载和需要传送给从节点的数据量

原理

  • 复制过程
    • 保存主节点(master)信息:
    • 从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑, 当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接
    • 发送ping命令
    • 权限验证。如果主节点设置了requirepass参数,则需要密码验证, 从节点必须配置masterauth参数保证与主节点相同的密码才能通过验证;如 果验证失败复制将终止,从节点重新发起复制流程
    • 同步数据集。(主从复制连接正常通信后,对于首次建立复制的场 景,主节点会把持有的数据全部发送给从节点,这部分操作是耗时最长的步 骤。Redis在2.8版本以后采用新复制命令psync进行数据同步,原来的sync命 令依然支持,保证新旧版本的兼容性。新版同步划分两种情况:全量同步和 部分同步)
    • 命令持续复制。当主节点把当前的数据同步给从节点后,便完成了 复制的建立流程。接下来主节点会持续地把写命令发送给从节点,保证主从 数据一致性
  • 数据同步
    • 全量复制:一般用于初次复制场景,Redis早期支持的复制功能只有全 量复制,它会把主节点全部数据一次性发送给从节点,当数据量较大时,会 对主从节点和网络造成很大的开销
    • 部分复制:用于处理在主从复制中因网络闪断等原因造成的数据丢失 场景,当从节点再次连上主节点后,如果条件允许,主节点会补发丢失数据 给从节点。因为补发的数据远远小于全量数据,可以有效避免全量复制的过 高开销

文章作者: Xudong Jiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xudong Jiang !
 上一篇
我的博客说明 我的博客说明
做一件事,要学会倾尽全力
2018-12-28 xudongj
下一篇 
redis学习-支持的数据结构 redis学习-支持的数据结构
今天分享下redis支持的一些数据结构 字符串 字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其 他数据结构的学习奠定基础 字符串类型的值实际可以 是字符
2018-10-30
  目录