本文例子基于:5.0.4redis
在如今无论啥应用都谈分布式的阶段下(真的有必要???),咱们的redis都会作一下主备,唔,若是redis存的数据不重要的话,其实也能够不用作[手动狗头].为了能进一步上分布式,先让咱们来了解一下CAP原理吧~缓存
在分布式系统中,只能保证CP or AP,那么Redis里面采用哪种机制呢?网络
Redis采用的是AP机制,Redis的主备是异步同步数据的。也就是说,当Redis主服务接受了客户端的修改请求以后,会当即返回,这期间就算备服务节点网络不通(嗯,绝大部分是挖断了光缆),主服务依然走得风生水起。那么此时Redis备节点就处于数据落后的一种状况,此时Redis主节点同步的时候会采用快照同步的方式去将数据发送到备节点上(下文会讲到).正常状况下的数据同步都是经过增量buffer去同步的(即个人光缆开启了无敌状态).less
replicaof <masterip> <masterport> //当master有设置了密码的时候须要配置 masterauth <master-password>
当备份节点处于正常的状况下,redis会在master节点为replica节点设置一个复制缓冲区,而后每次异步将缓存区中的指令同步到replica节点上面,replica节点消费的时候会同时告知master节点消费到了那儿.异步
咱们先来看一下复制缓存区的设置配置socket
//当replica节点断开一段时间以后,若是其消费的进度还在该缓存区内,那么能够继续执行增量同步。 repl-backlog-size 1mb //当没有replica节点的时候,缓存区的设置过时时间 repl-backlog-ttl 3600
复制缓存区若是写满的话,会从头开始覆盖前面的数据,而后致使replica节点须要全量复制,因此这里须要设置一个合理的复制缓冲区的值,防止replica节点全量复制(eg: repl-backlog-size = 重启从实例时长 * 主实例offset每秒写入量).分布式
快照同步是一个耗时操做,将数据bgsave到磁盘中,而后将快照文件传输备份节点,当备份节点过长时间没有链接上master节点/新备份节点刚增长到集群中,须要执行快照同步。spa
快照同步有两种策略:code
当开启了无盘快照以后,每次传输的时候,默认不能为其余的备节点提供无盘快照,新的备节点将会排队等待下一次无盘快照,能够调整时间,达到多个副本并行传输.进程
当使用非SSD磁盘跟有比较大的带宽的时候,采用无盘快照会比磁盘备份好不少.
能够经过一下配置来设置无盘快照:
repl-diskless-sync no //当收到第一个无盘快照请求时,等待多少秒以后接受其余备节点的无盘快照请求 repl-diskless-sync-delay 5
其实写做这东西真的是花时间~不过当看到有人点赞/收藏的时候仍是很开心的,感受获得了承认~
谢谢关注的各位~