Redis总结集群方式之主从复制[通俗易懂]

Redis总结集群方式之主从复制[通俗易懂]绪论最近由于小编颈椎病犯了,所以最近停更了文章,今天下午刚收到几千里地老父亲寄来的艾灸贴,晚上贴上之后,伴随着火辣辣的感觉开始创作现在这篇文章;若大家get到了东西,请爱心三连。废话不再多言,下面我们进入正题。主从复制同步策略全量同步时机:slave初始化阶段;机制:slave服务器需要将master服务器上的所有数据都复制一份。增量同步时机:slave初始化之后且正常工作;机制:master服务器每执行一次新的写操作命令同步到slave服务器上,从服务器接收并执行该写命令操作;.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在这里插入图片描述

绪论

最近由于小编颈椎病犯了,所以最近停更了文章,今天下午刚收到几千里地老父亲寄来的艾灸贴,晚上贴上之后,伴随着火辣辣的感觉开始创作现在这篇文章;若大家get到了东西,请爱心三连。
废话不再多言,下面我们进入正题。

主从复制

同步策略

  • 全量同步
    时机:slave初始化阶段;
    机制:slave服务器需要将master服务器上的所有数据都复制一份。
  • 增量同步
    时机:slave初始化之后且正常工作;
    机制:master服务器每执行一次新的写操作命令同步到slave服务器上,从服务器接收并执行该写命令操作;

总结

  • 主、从服务器刚建立连接时,采用全量同步;
  • 全量同步结束且正常工作,则新的写命令采用增量同步;
  • 此外,从服务器(slave)可以任意时刻发起全量同步命令;
  • 总之,redis策略,正常工作之后先进行增量同步,如失败,则要求从服务器发起全量同步。

同步过程

全量复制

  1. 从服务器连接主服务器时,发送SYNC命令;
  2. 主服务器接收SYNC命令后,执行bgsave命令开始生成RDB文件,并将之后所有的写入命令存储到缓冲区;
  3. 主服务器bgsave命令执行结束后,向所有的从服务器发送RDB快照文件,发送期间所有的写入命令继续存储到缓冲区;
  4. 从服务器接收到快照文件之后,替换旧的快照文件,并载入数据;
  5. 主服务器传输结束快照文件后,将缓冲区中的所有写入命令发给从服务器;
  6. 从服务器载入快照文件结束后,开始接收命令请求,并执行来自主服务器缓冲区的写命令;(从服务器初始化完成);
  7. 主服务器每执行一个写命令,就会给从服务器发送相同的写命令,从服务器接收并执行写命令(从服务器初始化完成之后的操作:增量);

部分复制

  • 工作原理:
    主服务器端为复制流维护一个内存缓冲区(in-memory backlog)。主从服务器都维护一个复制偏移量(replication offset)和master run id ,
    当连接断开时,从服务器会重新连接上主服务器,然后请求继续复制,假如主从服务器的两个master run id相同,并且指定的偏移量在内存缓冲
    区中还有效,复制就会从上次中断的点开始继续。如果其中一个条件不满足,就会进行完全重新同步(在2.8版本之前就是直接进行完全重新同步)。
    因为主运行id不保存在磁盘中,如果从服务器重启了的话就只能进行完全同步了。

  • 工作过程:

  1. 当主从节点之间网络出现中断时,如果超过了 repl-timeout 时间,主节点会认为从节点故障并中断复制连接。
  2. 主从连接中断期间主节点依然响应命令,但因复制连接中断命令无法发送给从节点,不过主节点内部存在复制积压缓冲区( repl-backlog-buffer ),依然可以保存最近一段时间的写命令数据,默认最大缓存 1MB。
  3. 当主从节点网络恢复后,从节点会再次连上主节点。
  4. 当主从连接恢复后,由于从节点之前保存了自身已复制的偏移量和主节点的运行ID。因此会把它们作为 psync 参数发送给主节点,要求进行补发复制操作。
  5. 主节点接到 psync 命令后首先核对参数 runId 是否与自身一致,如果一致,说明之前复制的是当前主节点;之后根据参数 offset 在自身复制积压缓冲区查找,如果偏移量之后的数据存在缓冲区中,则对从节点发送 +CONTINUE 响应,表示可以进行部分复制。
  6. 主节点根据偏移量把复制积压缓冲区里的数据发送给从节点,保证主从复制进入正常状态。

扩展点:
服务器运行ID(run_id):每个Redis节点(无论主从),在启动时都会自动生成一个随机ID(每次启动都不一样),由40个随机的十六进制字符组成;run_id用来唯一识别一个Redis节点。 通过info server命令,可以查看节点的run_id。

总结

特点

a. 采用异步复制的方式;
b. 一个master服务器可以存着多个slave服务器;每个slave服务器可以接受其他slave服务器的连接;
c. 无论对于master、slave服务器都是非阻塞的,master服务器进行主从复制期间时,master服务器依然可以处理外部访问请求;
而slave服务器依然可以处理外部的查询请求,但是查询的结果为旧数据。

优点

a. 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
b. 为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成
c. Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。
d. Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
e. Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。

缺点

a. Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
c. 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
d. Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170311.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)

    CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)上一篇文章(http://blog.csdn.net/u012116457/article/details/52161201)提到,为了更好的满足我们的要求,还需要对服务端进行改造。最近发现了一个巨牛的人工智能教程,不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!所以分享给大家,感兴趣的童鞋可以看看。点这里可以跳转到教程。1.新建cas_server为了方便,首先我们现在…

    2022年6月5日
    95
  • mysql左连接多个表_mysql可以创建多少张表

    mysql左连接多个表_mysql可以创建多少张表A表:姓名,学号,班级编号B表:学号,成绩C表:班级编号,班级名称最后想显示为姓名,学号,成绩,班级名称A、B表用wherea.学号=b.学号查出之后再和C表左连接sql语句如下:selecta.姓名,a.学号,b.成绩,c.班级名称fromA表aleftjoinB表bona.学号=b.学号leftjoinC表cona.班级编号=c.班级编号…

    2022年9月2日
    2
  • Socker编程之TCP

    Socker编程之TCP一:TCP介绍TCP协议,传输控制协议(英语:TransmissionControlProtocol,缩写为TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,”打电话””二:TCP特…

    2022年10月29日
    0
  • 从零开始学 iOS 开发的15条建议「建议收藏」

    从零开始学 iOS 开发的15条建议「建议收藏」作者:清醒疯子利炳根授权本站转载。事情困难是事实,再困难的事还是要每天努力去做是更大的事实。因为我是一路自学过来的,并且公认没什么天赋的前提下,进步得不算太慢,所以有很多打算从零开始的朋友会问我,该怎么学iOS开发。跟粉丝群的朋友交流了一下,决定把之前的《18条建议》修改一下,这里统一回答一次。分三部分:第一部分:态度和电脑1、不要关注别人的学习经历,不要关注别人加薪经历

    2022年5月30日
    33
  • github上开源的优秀android项目

    github上开源的优秀android项目源码大招:不服来战!撸这些完整项目,你不牛逼都难!经常有人问我有没有什么项目代码,我回复说去Github找,但是还是好多人不知道如何找到那些比较好的项目。今天花了点时间找了些安卓的项目,觉得还是不错的,几乎就是自己生活常用的一些app,如果你是一个Android开发者,我觉得撸完这些项目,你想不牛逼都难。菜鸟新闻菜鸟新闻客户端是一个仿照36Kr官方,实时抓取36Kr…

    2022年6月16日
    34
  • jvm垃圾回收算法有哪些_jvm垃圾回收过程

    jvm垃圾回收算法有哪些_jvm垃圾回收过程JVM垃圾回收算法两个概念:新生代:存放生命周期较短的对象的区域。老年代:存放生命周期较长的对象的区域。相同点:都在Java堆上1.标记–清除算法执行步骤:标记:遍历内存区域,对需要回收的对象打上标记。清除:再次遍历内存,对已经标记过的内存进行回收。图解:缺点:效率问题;遍历了两次内存空间(第一次标记,第二次清除)。空间问题:容易产生大量内存碎片,当再需要一块比…

    2022年9月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号