05.简单了解redis replication核心原理/断点续传/无磁盘化复制以及master持久化的意义

1、redis replication核心原理


(1) 当启动一个 slave node 的时候,它会发送一个 PSYNC 命令给 master node。
(2) 若是这是 slave node 初次链接到 master node,那么会触发一次 full resynchronization 全量复制。
(3) 此时 master 会启动一个后台线程,开始生成一份 RDB 快照文件,同时还会将从客户端 client 新收到的全部写命令缓存在内存中。
(4) master 会将这个 RDB 发送给 slave,slave 会先写入本地磁盘,而后再从本地磁盘加载到内存中
(5) 接着 master 会将内存中缓存的写命令发送到 slave,slave 也会同步这些数据。
(6) slave node 若是跟 master node 有网络故障,断开了链接,会自动重连,链接以后 master node 仅会复制给 slave 部分缺乏的数据。
在这里插入图片描述node


2、redis replication的核心机制


  • redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认本身每次复制的数据量
  • 一个master node是能够配置多个slave node的
  • slave node也能够链接其余的slave node
  • slave node作复制的时候,是不会block master node的正常工做的
  • slave node在作复制的时候,也不会block对本身的查询操做,它会用旧的数据集来提供服务;
    可是复制完成的时候,须要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了
  • slave node主要用来进行横向扩容,作读写分离,扩容的slave node能够提升读的吞吐量


3、replication的断点续传


若是主从复制过程当中,网络链接中断,那么能够接着上次复制的地方,继续复制下去,而不是从头开始复制一份程序员

原理:

master node 会在内存中维护一个 backlog,master 和 slave 都会保存一个 replica offset和一个 master run id,offset 就是保存在 backlog 中的。若是 master 和 slave 网络链接断掉了,slave 会让 master 从上次的offset 开始继续复制,若是没有找到对应的 offset,那么就会执行一次 resynchronizationredis


4、无磁盘化复制


master在内存中直接建立rdb,而后发送给slave,不会在本身本地落地磁盘了缓存

适用状况:由于磁盘传输性能比较低,网络带宽容许的状况下能够考虑使用diskless模式。
配置以下:安全

repl-diskless-sync no
repl-diskless-sync-delay 5

开启diskless模式,在主机开始同步以前须要等待全部slave的到来,并将传输任务缓存到传输队列。默认主机等待时间是5秒,若是设置为0时候,传输就不会等待全部从机的到来。网络


5、过时key处理


  • slave不会过时key,只会等待master过时key。架构

  • 若是master过时了一个key,或者经过LRU淘汰了一个key,那么会模拟一条del命令发送给slave。less


6、master持久化对于主从架构的安全保障的意义


若是采用了主从架构,那么建议必须开启master node的持久化!不建议用slave node做为master node的数据热备。异步

缘由分析
  1. 若是你关掉master的持久化,那么master的数据都存储在内存中,此时master宕机后是没有本地数据能够恢复的,而后就会直接认为本身的数据是空的,重启后master就会将空的数据集同步到slave上去,全部slave的数据所有清空,这样全部slave数据都丢失了。
  2. 即便采用了哨兵模式,slave node能够自动接管master node,可是也可能sentinal尚未检测到master failure,master node就自动重启了,仍是可能致使上面的全部slave node数据清空故障
总结

master节点,必需要使用持久化机制,master的各类备份方案,还要考虑本地文件丢失的状况; 从备份中挑选一份rdb去恢复master; 这样才能确保master启动的时候,是有数据的
这里能够参考个人上一篇文章04.简单了解一下Redis企业级数据备份方案性能




hi~我是Mirror,一个为了自由安逸的将来而不断前进的的程序员。 若是你以为文章对你有一点点帮助,一个小小赞,即是对个人承认,若是有不足之处,也欢迎各位指正。

相关文章
相关标签/搜索