主从切换
生产环境的主从间的数据复制通常都是异步进行的,当进行failover时,可能会出现在数据没有完全同步到从库的情况下进行了主从切换
解决方案:
• 【择优选择】主从切换时优先选择同步进度更加靠前的节点,尽可能的减少数据丢失
• 【缩短主库持久化的周期性间隔】
主从延迟
主从延迟带来的现象主要有以下2种情况
- 主库有从库没有
- 主库没有从库却有
上述情况1大家都好理解,这里我重点介绍下情况2.主库没有从库却有的情况,举个例子,当一个key设置过期时间比如1分钟,expire 60 到redis中过期时间其实是(当前timestamp+60*1000),由于主从同步会有一定的延迟,从库当前timestamp的值会大于主库当前stimestamp的值,假若延迟5秒, 也就是说会有5秒的gap主库查不到但是从库却可以查到的情况。
解决方案:
- 【降低延迟】提升网络环境,主从节点尽可能是在一个局域网中
- 【使用expireAt代替expire命令】
新增从节点
新增一个从节点,整个流程大致这个样子的
- 主库生成一份rdb文件
- 主库将rdb文件同步到从库
- 从库载入rdb文件到自身内存
问题造成的原因:
- 主库在做RDB快照文件的时候,发现key已经过期了,则此时不会将过期的key写到RDB文件中。
- 从库在load RDB文件到内存中的时候,发现key已经过期了,则此时不会将过期的key load进去。
点评:这个对于我们做数据校验的时候会有些影响,会觉得key不一致,但是不影响业务逻辑。
解决方案:
修改源码在生成与载入rdb文件时,不进行过期化判断,详细参见这篇文章https://segmentfault.com/a/1190000013144617