redis为什么需要主从复制?

news/2023/6/9 18:28:28

为什么要有主从复制,使redis具有高可用性!

多机情况下主从复制

同步文件和同步命令

同步文件

  • 客户端发送命令 slaveof 给从服务器
  • 从服务器发送 sync 命令给主服务器,主服务器收到以后,会执行bgsave命令 生成rdb文件,同时会使用缓冲区保存从现在开始执行的所有命令
  • 主服务器发送rdb文件给从服务器,从服务器同步状态,主服务器还会同步缓存区内的执行命令给从服务器

同步命令传播

当主从首次同步完全量数据后,此时主从数据是一致的,但是主服务器是可以一直接受命令的,所以主服务器执行完自己的命令,也需要发送相同的命令给从服务器的,来保证主从服务器的数据一致。

image-20221029150014543
image-20221029150014543

旧版,新版复制功能对比

旧版复制流程(redis2.8版本之前)

image-20221030140107131
image-20221030140107131

首先复制分两种:初次复制和断线复制

初次复制没什么好说的,就是利用从服务器发送sync命令 拿到rdb文件来同步自身的数据库数据,因为初次复制,从服务器是没有任何数据的,这也是最快最有效的方法。

断线复制:可以想象下,当在执行命令传播时,因为网络的原因,传播失败,从服务器重连主服务器的过程中,如果主服务器有新的命令需要执行时,那从服务器必然会丢失掉一些命令,也就是导致主从数据不一致的情况,而这时当从服务器重连成功后,就会向主服务器发送sync命令去重新同步主服务器的数据,这样就能达到主从服务器数据一致了。

弊端

每次主从断连,主服务器都要执行bgsave命令保存快照数据,非常耗内存,而从服务器也要恢复数据cpu也会上升。

image-20221030140434073
image-20221030140434073

新版复制流程

主服务器内会有一个数据的偏移量,当发送传播命令时,偏移量会随着发送的数据字节增加,而从服务器接收到命令后,之成功后,也会将自身的偏移量增加,正常情况下主从服务器的偏移量是一致的。

最大的变化:断线重连后,会根据offset偏移量是不是处于复制积压缓冲区 ,runId判断是否是部分复制还是全量复制,减少复制的数据量。客户端发送的命令不是sync,而是psync.

部分同步功能的实现三个部分组成:

  1. 主从服务器的复制偏移量
  2. 主服务器的复制积压缓冲区(固定长度的先进先出队列)
  3. 服务器的运行id(runId)(服务器的唯一标识)
新版复制流程
新版复制流程
image-20221030142611016
image-20221030142611016
image-20221030142618040
image-20221030142618040

主从建立连接的过程

image-20221030145829207
image-20221030145829207

心跳检测

从服务器会默认以每秒的频率,向主服务器发送命令 replconf ack <reolication_offset>

reolication_offset是从服务器的复制偏移量

作用:

  1. 检测主从服务器的网络连接状态
  2. 辅助实现min-slaves
  3. 检查命令丢失

检测主从服务器的网络连接状态

命令 info replication 查看最近一次从服务器向主服务器发送 replconf ack命令距离现在过了多少秒

image-20221030143343664
image-20221030143343664

辅助实现min-slaves

image-20221030143416700
image-20221030143416700

检查命令丢失

image-20221030143624002
image-20221030143624002

小记

  1. 为什么要读写分离?

避免资源竞争,增加开销

  1. 形成主从关系命令 (5.0之后,replicaof;5.0之前,salveof;)
  2. 主从级联模式分担全量复制时主库的压力

总结:学习主从连接过程,以及主服务器通过什么条件来判断进行部分复制还是全量复制。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4568580.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

多多情报通:拼多多虚假发货罚款是按什么罚款的?是由什么原因造成的?

拼多多为保障消费者的权益会对拼多多商家出台很多规则&#xff0c;其中虚假发货是很突出的一个问题&#xff0c;那么拼多多虚假发货罚款是按什么罚款的&#xff1f;拼多多虚假发货罚款是什么原因造成的&#xff1f; 拼多多虚假发货罚款是按什么罚款的 拼多多商家的虚假交易总订…

一度智信 | 拼多多规则避坑干货

小编今天给大家分享一些关于拼多多平台规则&#xff0c;避免拼多多新手商家采坑。 一.隐藏扣款。 &#xff08;1&#xff09;你因为买了个假单号&#xff0c;有物流信息&#xff0c;地址也一样&#xff0c;但是实物根本没发&#xff0c;后来客户申请了退款&#xff0c;不管用户…

弘辽科技:拼多多超时发货罚款规则是什么?具体介绍

无论是淘宝、京东&#xff0c;还是拼多多&#xff0c;商家都要在规定时间内完成发货。如果超时发货的话&#xff0c;是要受到平台的处罚的&#xff0c;还需要进行赔付。那拼多多超时发货罚款规则是什么&#xff1f; 拼多多延迟发货 1、定义&#xff1a;如果商家未在发货时限内…

算法练习——判断链表是否有环 leetcode.141 python

题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中存在环 &#xff0c;则返回 true 。 否则&#xff0c;返回 false 。 方法一&#xff1a;hash表 hashset是一种特殊的hashmap&#xff0c;可以理解为只有key的map。python语言的…

判断链表是否有环(Java)

快慢指针&#xff0c;如果有环&#xff0c;两指针一定会相遇 注意&#xff1a; ①空链表和一个元素的链表直接返回false ②如果没环&#xff0c;快指针一定会先到null&#xff0c;所以只需判断快指针是否为null ③注意空指针异常&#xff0c;快指针的next也要判断是否为null p…

详解:如何判断链表中是否有环?

如何判断链表中是否有环是一道非常经典的题目&#xff0c;下面用3种方法实现。 方法一&#xff1a;暴力双重循环 直接使用双重循环&#xff0c;没什么好讲的。 方法二&#xff1a;使用HashSet 在方法一的基础上进行优化降低复杂度&#xff0c;使用hashSet作为额外缓存&…

常见面试题:链表3-判断链表是否有环以及环入口节点

常见面试题3&#xff1a;链表-判断链表是否有环以及环入口节点 内容目录常见面试题3&#xff1a;链表-判断链表是否有环以及环入口节点一、判断链表是否有环1.解法1&#xff1a;使用列表2.解法2&#xff1a;快慢指针二、链表环入口节点解法1&#xff1a;使用列表解法2&#xff…

判断链表是否有环,并且找出链表环的接点

1.判断链表是否有环&#xff0c;根据Floyd判圈法&#xff0c;设置两个指针&#xff0c;fast, slow。fast指针每次移动2个位置&#xff0c;slow指针每次移动1个位置。如果链表有环&#xff0c;fast&#xff0c;slow指针会再次相遇。 2.如果链表有环&#xff0c;找出链表环的接点…