转自 https://juejin.cn/post/6844903880745025543
仅做个人备份,浏览请看原文
目录
1、复制方式
Redis
主从复制分为以下三种方式:
1、当master
服务器与slave
服务器正常连接时,master
服务器会发送数据命令流给slave
服务器,将自身数据的改变复制到slave
服务器。
2、当因为各种原因master
服务器与slave
服务器断开后,slave
服务器在重新连上maste
r服务器时会尝试重新获取断开后未同步的数据即部分同步,或者称为部分复制。
3、如果无法部分同步(比如初次同步),则会请求进行全量同步,这时master
服务器会将自己的rdb
文件发送给slave
服务器进行数据同步,并记录同步期间的其他写入,再发送给slave
服务器,以达到完全同步的目的,这种方式称为全量复制。
2、工作原理
master
服务器会记录一个replicationId
的伪随机字符串,用于标识当前的数据集版本,还会记录一个当数据集的偏移量offset
,不管master
是否有配置slave
服务器,replication Id和offset会一直记录并成对存在。
当master与slave正常连接时,slave使用PSYNC命令向master发送自己记录的旧master的replication id和offset,而master会计算与slave之间的数据偏移量,并将缓冲区中的偏移数量同步到slave,此时master和slave的数据一致。
注意:而如果slave引用的replication太旧了,master与slave之间的数据差异太大,则master与slave之间会使用全量复制的进行数据同步。
3、主从复制中的key过期问题
我们都知道Redis
可以通过设置key
的过期时间来限制key
的生存时间,Redis处理key过期有惰性删除和定期删除两种机制,而在配置主从复制后,slave服务器就没有权限处理过期的key
,这样的话,对于在master上过期的key,在slave服务器就可能被读取,所以master会累积过期的key,积累一定的量之后,发送del命令到slave,删除slave上的key。如果slave
服务器升级为master
服务器 ,则它将开始独立地计算key
过期时间,而不需要通过master
服务器的帮助。
4、主从复制的作用
1、保存Redis数据副本
当我们只是通过RDB
或AOF
把Redis
的内存数据持久化毕竟只是在本地,并不能保证绝对的安全,而通过将数据同步slave
服务器上,可以保留多一个数据备份,更好地保证数据的安全。
2、读写分离
在配置了主从复制之后,如果master
服务器的读写压力太大,可以进行读写分离(注意:默认状态下,从节点是不对外提供服务的,这样的优点是可以避免主从延迟对业务场景的影响问题),客户端向master
服务器写入数据,在读数据时,则访问slave
服务器,从而减轻master
服务器的访问压力。
3、高可用性与故障转移
服务器的高可用性是指服务器能提供7*24小时不间断的服务,Redis
可以通过Sentinel
系统管理多个Redis
服务器,当master
服务器发生故障时,Sentineal
系统会根据一定的规则将某台slave
服务器升级为master
服务器,继续提供服务,实现故障转移,保证Redis服务不间断。