面试冲刺:46---Redis的复制是如何实现的呢?

一、Redis复制介绍

  • Redis复制的语法详情可以参阅:
    • https://blog.csdn.net/qq_41453285/article/details/106151825
    • https://blog.csdn.net/qq_41453285/article/details/106151899
    • https://blog.csdn.net/qq_41453285/article/details/106160219
  • 为了解决分布式系统中单点的问题,Redis提供了复制,通过创建一个主服务器(Master),创建一个或多个从服务器(Slave),让Slave复制与Master,当向Master中写入数据时,Master会将数据同步更新到所有的Slave中,从而达到主从数据的一致
  • 同时复制也是作为“Redis哨兵模式”与“Reids分布式模式”的基础

面试冲刺:46---Redis的复制是如何实现的呢?_第1张图片

二、使用语法

复制的建立

  • Master端配置:Master端不需要任何配置,如果一个Redis服务器节点被其他节点复制了,那么其自动变为Master节点
  • Slave端配置:一台服务器可以使用下面的3种方式去复制一个Redis节点,从而将自己变为一个Slave节点
    • 在配置文件中加入slaveof {masterHost} {masterPort}随Redis启动生效
    • 在redis-server启动命令后加入--slaveof {masterHost} {masterPort}生效
    • 直接使用命令:slaveof {masterHost} {masterPort}生效

复制的断开

  • 如果一台Slave不想去复制Master了,可以输入下面的命令来断开与Master之间的关系:
slaveof no one

复制的切换

  • 如果一台Slave想要从复制一台Master变为复制另一台Master,直接重新输入slaveof命令即可,与之间建立复制连接的命令是一样的
  • 输入之后会自动切换到要复制的Master节点

三、复制的结构

  • 一主一从:

面试冲刺:46---Redis的复制是如何实现的呢?_第2张图片

  • 一主多从:

面试冲刺:46---Redis的复制是如何实现的呢?_第3张图片

  • 树状结构:

面试冲刺:46---Redis的复制是如何实现的呢?_第4张图片

四、复制建立的原理

  • 复制大致分为6个过程:
    • 保存主节点信息:执行slaveof命令之后,从节点只保存主节点的地址信息便返回了
    • 主从建立socket连接:主从节点建立socket的连接
    • 发送ping命令:socket建立成功之后,从节点给主节点发送ping命令,ping的目的如下:
      • 检测主从之间网络套接字是否可用
      • 检测主节点当前是否可接受处理命令
    • 权限验证:如果主节点设置了requirepass参数,则需要密码验证,从节点必须配置masterauth参数保证与主节点相同的密码才能通过验证
    • 同步数据集:主节点将所有的数据同步到从节点中,同步的方式有两种(全量同步、部分同步)
    • 命令持续复制:主节点的数据同步到从节点之后,便完成了复制建立的流程,接下来主节点会持续地把写命令同步到从节点,从而保证主从数据一致性

面试冲刺:46---Redis的复制是如何实现的呢?_第5张图片

你可能感兴趣的:(面试冲刺)