大佬教程收集整理的这篇文章主要介绍了06 数据同步:主从库如何实现数据一致,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本篇重点
若redis只有一个实例运行,当该实例服务宕机后,宕机这段时间内redis无法为新来的数据请求提供服务。
多实例保存同一份数据,需要考虑的问题:
redis高可靠性的保证
- 数据尽量少丢失——持久化存储(AOF/RDB)
- 服务尽量少中断——主从库(本质是增加副本冗余量)
replicaof
命令——建立主从库关系[1]
replicaof
与主库建立连接)
psync
命令形式:psync runID offset
runID:redis实例ID,首次连接主库ID未知,传?
offset:复制进度,第一次复制传-1
FULLRESYNC: 全量复制,第一次建立连接采用全量复制
Q:主从库同步中,主库执行RDB快照时,需要fork bgsave子进程,若从库数量很多,则主库fork的压力就会增加,如何应对这种问题?缓解主库压力? A:主从级联模式——“主—从—从”,在从库间建立“主从”关系,分担主库全量RDB的压力
增量复制——仅同步断连期间主库收到的命令
repl_BACklog_buffer——环形缓冲区,存储主库收到的写命令——记录主/从的写/读进度,通过offset
redis增量复制流程
Q: 主库写入速度快,从库读取慢,导致未读的命令被新写的命令覆盖,引起的主从库数据不一致问题如何预防? A:
- 调整 repl_BACklog_size 大小,通常 = 缓冲空间大小*2
- 或采用切片集群分担单个主库的请求压力(将写请求分散到集群中)
Q: 主从断连时间过长,导致slave_repl_offset上的未读数据已经被新写入操作覆盖(同上一个问题),如何数据同步? A: 主库采用全量复制
- 主库判断被覆盖—— master_repl_offset - slave_repl_offset > repl_BACklog_size (个人猜想)
- 若上式成立,则执行全量复制,否则增量复制
Q: 本篇讨论的都是“主库如何同步数据给从库”、“断连恢复后主库如何同步断连期间的数据给从库”的问题,那么当主库挂了,redis如何对外提供服务?此时从库能起到什么样的作用?——主从库模式的重要功能——服务尽量少中断 A: redis的哨兵机制[链接]
图片来源于极客时间专栏《redis核心技术与实战》
redis5.0前使用slaveof
命令 ↩︎
以上是大佬教程为你收集整理的06 数据同步:主从库如何实现数据一致全部内容,希望文章能够帮你解决06 数据同步:主从库如何实现数据一致所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。