reids复制的原理和优化

reids复制的原理和优化

原理

主库经过RDB文件传给从库,从而进行复制redis

复制的原则

  1. 一个master能够有多个slave;
  2. 一个slave只能又一个master;
  3. 数据流向是单向的,master到slave;

主从复制的做用

  • 数据副本
  • 扩展读性能

方式

  • 命令行

slaveof 127.0.0.1 6379 #直接指向须要复制的master服务器

取消复制服务器

slaveof no one

注意:取消复制时,master不会对slave的数据进行清零,当slave从新对新的master进行断定时,新的master会对slave清零网络

  • 配置文件

slaveof ip port
slave-read-only yes

clipboard.png

由于我是在同一台服务器上去测试,端口6001的redis服务器是slave服务器,且只有以上配置,开启复制以后,会发现已经默认地做为端口为6000的从库了性能

clipboard.png

两种方式的比较

方式 命令 配置
优势 无需重启 统一配置
缺点 不便于管理 须要重启

全量复制和部分复制

runid

redis-cli -p 6379 info server| grep run

由上述命令能够知道该 redis服务器的runid是多少,但服务器被重启或者是网络的缘由,runid会发生变化,而从库探测到主库的runid发生了变化,会认为进行了很大的改动,则会进行一次全量复制。测试

偏移量

偏移量是用来检测从库和主库数据是否一致优化

redis-cli -p 6379 info replication

clipboard.png

全量复制

clipboard.png

  1. psync是从库内部本身调用的,在第一次的复制的时候,很明显从库是不知道主库的runid和偏移量,因此须要作一个全量的复制。
  2. 主库检测出了从库是第一次复制,由于从库不知道主库的runid和偏移量,因此主库把本身的runid和偏移量传给了从库
  3. 从库保存了主库的runid和偏移量
  4. 主库开始建立快照(bgsave),与其同时主库也会把在建立快照的时间间期中产生的数据传到了自身的复制缓冲区
  5. 主库向从库发送RDB文件
  6. 主库向从库发送复制缓冲区的数据,并添加到了从库接受到的RDB文件中
  7. 从库清除自身本来有的数据
  8. 从库执行RDB文件,从而达到复制
全量复制开销
  • bgsave的时间
  • RDB文件网络传输时间
  • 从节点清空数据的时间
  • 从节点加载RDB的时间
  • 可能的AOF重写的时间

部分复制

由于若是所有都是全量复制,这无疑给服务器带来了很大的开销,因此出现了部分复制spa

clipboard.png

  1. 有时候由于网络的抖动或者其余缘由,致使从库对主库失去链接。
  2. 主库会把这个时间段新增的数据写入复制缓冲区。
  3. 当从库再次链接以后
  4. 从库会告诉主库说,主库对应的runid以及最新的偏移量值
  5. 主库会判断从库是否须要部分复制,并判断偏移量是不是在复制缓冲区的偏移量范围内,若是不在证实从过错过的数据已经不少了。
  6. 若是是在范围内的话,主库会把剩下从库没有的数据传给从库,从而达到部分复制,减小开销
相关文章
相关标签/搜索