• 主从复制分两种(主从刚连接的时候,进行全量同步;全同步结束后,进行增量同步)
  • 全量复制
  • master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件
  • 主服务器会缓存所有接收到的来自客户端的写命令,当后台保存进程 处理完毕后,会将该rdb文件传递给slave服务器
  • slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存
  • 在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器
  • 然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性
  • 增量复制
  • Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程
  • 服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令
  • 特点
  • 主从复制对于 主/从 redis服务器来说是非阻塞的,所以同步期间都可以正常处理外界请求
  • 一个主redis可以含有多个从redis,每个从redis可以接收来自其他从redis服务器的连接
  • 从节点不会让key过期,而是主节点的key过期删除后,成为del命令传输到从节点进行删除
  • 从节点开启 sync 看日志
  • 加速复制
  • 完全重新同步需要在磁盘上创建一个RDB文件,然后加载这个文件以便为从服务器发送数据
  • 在比较低速的磁盘,这种操作会给主服务器带来较大的压力
  • 新版支持无磁盘的复制,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储
  • repl-diskless-sync yes (默认是no)
  • 主从断开重连
  • 如果遭遇连接断开,重新连接之后可以从中断处继续进行复制,而不必重新同步
  • 2.8版本后 部分重新同步这个新特性内部使用PSYNC命令,旧的实现中使用SYNC命令