Redis: 集群

文章目录

  • 一、单点Redis的问题
  • 二、主从架构
    • 1、概述
    • 2、集群结构
    • 3、主从数据同步原理
      • (1)全量同步
      • (2)增量同步
    • 4、总结
      • (1)全量同步和增量同步的区别
      • (2)什么时候执行全量同步
      • (3)什么时候执行增量同步
  • 三、Redis哨兵
    • 1、介绍
    • 2、哨兵原理
      • (1)集群结构
      • (2)哨兵的作用
  • 四、Redis分片集群
    • 1、概述
    • 2、分片集群介绍
      • (1)架构
      • (2)分片集群特征

一、单点Redis的问题

  • 数据丢失问题
    实现Redis数据持久化。
  • 并发能力问题
    搭建主从集群,实现读写分离。
  • 故障恢复问题
    利用reids哨兵,实现健康检查和自动恢复。
  • 存储能力问题
    单键分片集群,利用插槽机制实现动态扩容。

二、主从架构

1、概述

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离(主要应用于读多写少的情况)。

2、集群结构

在这里插入图片描述

3、主从数据同步原理

(1)全量同步

主从第一次建立连接时,会执行全量同步,将master节点的所有数据都拷贝到slave节点。这里有一个问题,master如何得知salve是第一次来连接呢,有几个概念,可以作为判断依据:

  • Replication Id
    简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid。
  • offset
    偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。
  • 判断流程
    slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据。因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。master判断发现slave发送来的replid与自己的不一致,说明这是一个全新的slave,就知道要做全量同步了。master会将自己的replid和offset都发送给这个slave,slave保存这些信息。以后slave的replid就与master一致了。因此,master判断一个节点是否是第一次同步的依据,就是看replid是否一致。
  • 完整流程描述
    • slave节点请求增量同步。
    • master节点判断replid,发现不一致,拒绝增量同步。
    • master将完整内存数据生成RDB,发送RDB到slave。
    • slave清空本地数据,加载master的RDB。
    • master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave。
    • slave执行接收到的命令,保持与master之间的同步。

(2)增量同步

  • 为什么需要增量同步
    全量同步需要先做RDB,然后将RDB文件通过网络传输给slave,成本太高。因此除了第一次做全量同步,其她大多数时候slave与master都是做增量同步。
  • 什么是增量同步
    只更新slave与master存在差异的部分数据

4、总结

(1)全量同步和增量同步的区别

  • 全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl_baklog,逐个发送给slave。
  • 增量同步:slave提交自己的offset到master,master获取repl_blaklog中从offset之后的命令给slave。

(2)什么时候执行全量同步

  • slave节点第一次连接master节点时
  • slave几点断开时间太久,repl_baklog中的offset已经被覆盖。

(3)什么时候执行增量同步

slave节点断开又恢复,并且在repl_baklog中能找到offset时。

三、Redis哨兵

1、介绍

Redis提供了哨兵(Sentienl)机制来实现主从集群的自动故障恢复。

2、哨兵原理

(1)集群结构

在这里插入图片描述

(2)哨兵的作用

  • 监控
    Sentinel会不断检查master和slave是否按预期工作

    • 集群监控原理
      Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令。
      • 主观下线
        如果某sentinel节点发现某实例未在规定时间响应,则认为改实例主观下线。
      • 客观下线
        若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。
  • 自动故障恢复

    • 如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后以新的master为主
    • 集群故障恢复原理
      • 一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据:

        • 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-millisconds * 10)则会排除该slave节点。
        • 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举
        • 如果slave-priority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
        • 最后是判断slave几点的运行id大小,越小优先级越高
      • 当选出一个新的master后,该如何实现切换:

        • sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master。
        • sentinel给所有其它slave发送slaveof 192.168.150.101 7002 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。
        • 最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点。
  • 通知
    Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端。

四、Redis分片集群

1、概述

主从和哨兵可以解决高并发读、高可用的问题。但是仍然有两个问题没有解决:

  • 海量数据存储问题
  • 高并发写的问题
    使用分片集群可以解决上述问题。

2、分片集群介绍

(1)架构

在这里插入图片描述

(2)分片集群特征

  • 集群中有多个master,每个master保存不同数据。
  • 每个master,都可以有多个slave节点。
  • master之间通过ping监测彼此健康状态
  • 客户端请求可以访问集群任意节点,最终都会被转发到正确的节点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试经典150题——跳跃游戏 II

面试经典150题 day10 题目来源我的题解方法一 动态规划方法二 贪心 题目来源 力扣每日一题;题序:45 我的题解 方法一 动态规划 动态规划,当j位置可达i位置时:dp[i]Math.min(dp[i],dp[j]1); 时间复杂度:O( n 2 n^2 n…

SpringBlade dict-biz/list SQL 注入漏洞复现

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpringBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 后台框架 /api/blade-system/dict-biz/list 路径存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞…

chromedriver最新版下载地址

地址1.百度网盘 链接(提取码:2vo3):百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com…

微信域名防封/QQ域名防封/域名状态检测/域名防红防封API平台源码

下载地址:API平台源码 这套源码是使用thinkphp3.1.3开发的,可以在PHP5.3-5.6下运行,程序是有一点老了,但是思路仍在!然后,这套源码我已经成功搭建起来了,后台、个人(用户&#xff0…

基于Material Design风格开源、易用、强大的WPF UI控件库

前言 今天大姚给大家分享一款基于Material Design风格开源、免费(MIT License)、易于使用、强大的WPF UI控件库:MaterialDesignInXamlToolkit。 项目介绍 MaterialDesignInXamlToolkit 是一个开源、易于使用、强大的 WPF UI 控件库&#x…

【opencv】示例-videocapture_starter.cpp 从视频文件、图像序列或连接到计算机的摄像头中捕获帧...

/** * file videocapture_starter.cpp * brief 一个使用OpenCV的VideoCapture与捕获设备,视频文件或图像序列的入门示例 * 就像CV_PI一样简单,对吧? * * 创建于: 2010年11月23日 * 作者: Ethan Rublee * * 修改于: 2013年4月17日 * …

mysql 查询实战3-解答

对mysql 查询实战3-题目,进行一个解答 11、查询每⽉产品交易与退款情况 目标:查询每⽉产品交易(交易总额,交易数)与退款情况(退款总额,退款数) 1,先把日期格式化 使用 E…

Savina Mx 高級的無塵擦拭布系列產品,吸水吸油性極強,不磨損原件

Savina Mx是日本KBSEIREN株式會社(原KANEBO)開發的目前*高級的無塵擦拭布系列產品,吸水吸油性極強,不磨損原件。廣氾用於光學鏡頭製造,辦公器材保養,10級以上的無塵車間淨化室,半導體生產線車間…

美易官方:以色列袭击伊朗!原油、黄金走势上涨?

以色列突然袭击伊朗的消息震惊了全球市场,引发了一场原油和黄金价格的飙升。这一事件不仅令投资者感到紧张,也引发了国际社会对于中东地区紧张局势的担忧。 以色列此次袭击的目标据说是伊朗的一处军事基地,据称该基地涉及到伊朗的核武器研发计…

Network: wirehark: 解包问题:乱序重组

如果一个大的TCP数据被分成几个segment,而每个segment如果走的路由途径不同的化,会导致下面这个解析上错误。从下面这个图里看,第一片和第二片的顺序的,但是第三片跑到了第二片的前面,wirehark就解析不出来了&#xff…

安卓apk文件签名

一、环境准备 链接: https://pan.baidu.com/s/1D3WxIL5M5ewyFNTqJzARPw 提取码: pd6w 上篇博文编译的apk文件 1、docker build -t android-build:v1.0.1 . 直接制作镜像 2、docker run -it android-build:v1.0.1 /bin/bash 运行进入容器 指定sdk的路径,然后直接…

华为欧拉系统(openEuler-22.03)安装深信服EasyConnect软件(图文详解)

欧拉镜像下载安装 iso镜像官网下载地址 选择最小化安装,标准模式 换华为镜像源 更换华为镜像站,加速下载: sed -i "s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g" /etc/yum.repos.d/openEuler.r…

使用Termux在Android设备上编译运行SpecCPU2006

Spec CPU 2006 的使用说明(曲线救国版) 因本部分实验用到的Spec CPU2006依赖于多个编译工具包,因此对源码的编译要在配置好环境的Linux设备上运行,根据实验发现,现有的环境(包括adb和termux)都不…

通过实例学C#之FileStream类

简介 可以通过此类进行文件读取。 首先在项目所在文件夹的Bin文件中新建一个test.txt文件,里面输入内容“hello world!”。 构造函数 FileStream (string path, FileMode mode,FileAccess access) 通过路径文件path,打开文件模式mode以及读写…

Arcgis Pro2.5安装教程(内含安装文件)

​最近处理的数据量大,发现arcmap这种老产品属实是不行了,相比于下一代的Arcgis Pro,不但运行速度慢,也容易遇到突然关闭的问题,之前基于团队的选择也没办法,最近实在是被数据搞得无语了,一鼓作气装上了Arc…

Java序列流和打印流、对象序列化

目录 1、序列流 1.1 SequenceInputStream 1.2 案例:切割mp3并合并 2、 对象的序列化 2.1 ObjectOutputStream与ObjectInputStream 2.2 Serializable 3、Properties. 4、打印流 4.1 PrintStream 5、操作基本数据类型的流对象 5.1 DataInputStream以及DataOutputStrea…

书生·浦语大模型全链路开源体系-第6课

书生浦语大模型全链路开源体系-第6课 书生浦语大模型全链路开源体系-第6课相关资源Lagent & AgentLego 智能体应用搭建环境准备创建虚拟环境安装LMDeploy安装 Lagent安装 AgentLego Lagent 轻量级智能体框架使用 LMDeploy 部署启动并使用 Lagent Web Demo使用自定义工具获取…

呼叫系统的技术实现原理和运作流程,ai智能系统,呼叫中心外呼软交换部署

呼叫系统的技术实现原理和运作流程可以涉及多个组成部分,包括硬件设备、软件系统和通信协议。以下是一般情况下呼叫系统的技术实现原理和运作流程的概述: 硬件设备: 服务器:用于承载呼叫系统的核心软件和数据库。电话交换机&#…

学习-官方文档编辑方法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Linux常用命令英文全称与中文解释

Linux操作系统中有许多常用的命令,每个命令都有其英文全称(Full Name)和中文解释。以下是一些常见的Linux命令及其英文全称和中文解释的列表: 你猜猜这个是哪个软件的快捷键↑ man: Manual 意思是手册,可以用这个命…