Redis 主从数据同步

这篇具有很好参考价值的文章主要介绍了Redis 主从数据同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis 的高可靠性 :

  • 数据尽量少丢失 : AOF/RDB 保证
  • 服务尽量少中断 : 增加副本冗余量,同数据保存多个实例

Redis 提供主从库模式,保证数据副本的一致

主从库间采用 : 读写分离的方式

  • 读操作:主库、从库都接收
  • 写操作:先到主库执行,再把主库的写操作同步给从库

image.png

主从库同步的模式:全量复制、基于长连接的命令传播,增量复制

主从库第一次同步

设置实例 2 (172.16.19.5) 为实例 1 (172.16.19.3) 的从库 :

replicaof  172.16.19.3  6379

主从库第一次同步流程 :

  1. 主从库间建立连接,并告知主库同步,为全量复制做准备
    1. 从库给主库发 psync (参数 : runID : 随机 ID ; offset=-1 : 第一次复制) ,表示要数据同步
    2. 主库发 FULLRESYNC (第一次复制用 : 全量复制) 给从库
  2. 主库将所有数据同步给从库。从库收到数据后,在本地完成数据加载
    1. 主库执行 bgsave ,生成 RDB ,并把文件发给从库
    2. 从库收到 RDB 后,先清空当前数据库,再加载 RDB
    3. 为了主从库的数据一致性,主库会用 replication buffer,记录 RDB 生成后的所有写操作
  3. 主库会把 2 阶段中 , 新收到的写命令 , 发给从库
    1. 主库完成 RDB 发送后,把 replication buffer 的新修改操作 ,发给从库,从库再执行这些操作

image.png

主从级联模式

主从库间第一次的全量复制同步 :

  • 对主库,要完成两个耗时操作:生成 RDB 文件 , 传输 RDB 文件

当从库数量很多,并都和主库进行全量复制的问题 :

  • 主库忙于 fork 子进程生成 RDB 文件
  • fork 会阻塞主线程处理正常请求,并导致主库响应请求速度变慢
  • 传输 RDB 会占用主库的网络带宽,导致主库的资源使用压力

分担主库压力的解决方案 :

  • 主-从-从 模式 : 将主库生成 RDB/传输 RDB 压力,以级联方式分散到从库

级联的 主-从-从 模式 :

image.png

主从库间网络断

当主从库断后,主库会把写操作写入 replication buffer,并也写入 repl_backlog_buffer 环形缓冲区

  • 主库会记录自己写的位置,从库会记录自己已读的位置
  • 主从同步偏移量 master_repl_offset : 当主库的写操作越多,该值会越大
  • 当从库的读取速度较慢,环形缓冲区写满后,主库会覆盖之前写操作 , 可能会导致主从库间的数据不一致

repl_backlog_buffer :

image.png

Redis 增量复制流程 :

  • 主从库的连接恢复后,从库先给主库发 psync ,并把自己当前 slave_repl_offset 发给主库
  • 主库会判断自己的 master_repl_offset 和 slave_repl_offset 之间的差距
  • 主库把 master_repl_offset ~ slave_repl_offset间的写操作,同步给从库就行

image.png

避免主从库间的数据不一致 :

  • 方案 : 调整 repl_backlog_size
  • 计算公式 : 缓冲空间大小 = 主库写入命令速度 * 操作大小 - 主从库间网络传输命令速度 * 操作大小
  • repl_backlog_size = 缓冲空间大小 * 2

例子 : 主库每秒写入 2000 个操作,每个操作的大小 : 2KB,网络每秒能传输 1000 个操作

  • 缓冲空间大小 = 2000*2 - 1000 *2 = 2MB
  • 为了应对突发压力,repl_backlog_size = 2MB * 2 = 4MB

当并发请求量非常大 :文章来源地址https://www.toymoban.com/news/detail-430412.html

  • 调大 repl_backlog_size ,如 : 缓冲空间大小 * 4
  • 切片集群 : 分担单个主库的请求压力

到了这里,关于Redis 主从数据同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据可靠性】Flink和Kafka连接时的精确一次保证

    端到端的 exactly-once(精准一次) kafka - Flink - kafka 输入数据源端的 Kafka 可以对数据进行持久化保存,并可以重置偏移量(offset) Flink 内部可以通过检查点机制保证状态和处理结果的 exactly-once 语义 两阶段提交(2PC) 。 写入 Kafka 的过程实际上是一个两段式的提交:处理完毕

    2024年02月02日
    浏览(43)
  • 【可靠性测试】什么是可靠性测试:定义、方法和工具

    可靠性定义为在特定环境中指定时间段内无故障软件运行的概率。 执行可靠性测试是为了确保软件是可靠的,它满足其目的,在给定的环境中指定的时间量,并能够呈现无故障运行。 在这个机械化的世界里,现在人们盲目地相信任何软件。无论软件系统显示出什么结果,人

    2024年02月05日
    浏览(43)
  • TCP如何保证可靠性,TCP如何实现可靠性传输的

    tcp 如何保证可靠性 大家都知道TCP是可靠性传输协议,既然是可靠的,就需要解决比如包丢失了、数据被破坏了、包重复了、乱序了等等这样的问题。下面将从几个方面介绍TCP的可靠性。 1. 校验和 TCP每一段报文都有校验和,这保证了报文不被破坏或篡改,如果收到的报文在校

    2024年02月10日
    浏览(50)
  • 嵌入式硬件电路可靠性的关键问题的分析(可靠性介绍)

    :失效率 温度 可靠性 降额 器件工艺 质量与可靠性的区别 质量:时间点上去衡量                                              可靠性:一段时间上才能衡量,需要有量才能去衡量(大部分是产品量产之后才会出现问题) 质量:在时间点上衡量

    2024年03月24日
    浏览(48)
  • 配电网可靠性评估(4)—(顶刊复现)基于线性规划的配电网可靠性评估

            之前的博客中介绍了配电网可靠性评估的三种方法、分别是解析法中的最小路法,以及序贯蒙特卡罗模拟法及非序贯蒙特卡洛模拟法,顺带提到了含有分布式电源的配电网可靠性评估方法。 配电网可靠性评估(一)最小路法和非序贯蒙特卡洛模拟法 配电网可靠性评

    2024年02月08日
    浏览(53)
  • RabbitMQ --- 消息可靠性

    消息队列在使用过程中,面临着很多实际问题需要思考:      消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消息到达exchange后未到达queue MQ宕机,queue将消息丢失 co

    2024年02月14日
    浏览(50)
  • 可靠性测试

    我们认为软件可靠性始终是重要的,但它对于任务关键型、安全关键型和高使用率系统是必不可少的。如您所料,可靠性测试可用于降低可靠性问题的风险。可靠性故障背后的常见问题包括内存泄漏、磁盘碎片和耗尽、间歇性基础设施问题以及超时值低于可行值。 可靠性定义

    2024年02月16日
    浏览(49)
  • RabbitMQ-保证消息可靠性

    消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消息到达exchange后未到达queue MQ宕机,queue将消息丢失 consumer接收到消息后未消费就宕机 针对这些问题,RabbitMQ分别给出了

    2024年02月07日
    浏览(53)
  • RabbitMQ消息的可靠性

    面试题: Rabbitmq怎么保证消息的可靠性? 1.消费端消息可靠性保证: 消息确认(Acknowledgements) : 消费者在接收到消息后,默认情况下RabbitMQ会自动确认消息(autoAck=true)。为保证消息可靠性,可以设置autoAck=false,使得消费者在处理完消息后手动发送确认(basicAck)。如果消费

    2024年04月14日
    浏览(74)
  • 什么是软件可靠性测试?

    最近整理总结笔记,笔者发现可靠性测试记得含糊笼统,于是花了一些时间,通过查阅资料,引入自己的理解,整理出了什么是可靠性测试,如何做可靠性测试。 什么是软件可靠性测试? “可靠”一词意味着某种事物是可靠的,并且每次都会给出相同的结果。可靠性测试也

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包