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监测彼此健康状态
  • 客户端请求可以访问集群任意节点,最终都会被转发到正确的节点。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绝地求生更新反作弊系统“ZAKYNTHOS”杀疯了

绝地求生的反作弊系统“ZAKYNTHOS”近期取得了显著的成绩。从2024年1月1日至3月3日,共有117,3588个违规账号被封禁,其中107,3317个账号因使用外挂而被永久封禁。 根据官方每周封禁数据公告,1月至3月每周的永久封禁违规账号平均数高达13万&am…

javafx实现音频播放功能

上链接: https://download.csdn.net/download/jasonhongcn/89146520

腾讯云幻兽帕鲁一键开服教程

腾讯云作为领先的云计算服务提供商,为广大用户提供了便捷、高效的游戏服务器搭建解决方案。其中,幻兽帕鲁一键开服功能,更是让游戏开服变得简单易懂。本文将为大家详细介绍腾讯云幻兽帕鲁一键开服的步骤,帮助大家轻松搭建自己的游…

单链表使用里面为什么是二级指针

这里很多人就会疑问,为什么顺序表里面是一级指针,单链表里面是二级指针。 这里我们专门列出来进行讲解。 因为传递的不是二级指针的话,会导致传参之后,形参改变,实参不改变 你希望形参改变实参也改变就必须传递地址 简…

Stylus入门使用方法

Stylus入门使用方法 Stylus是一个先进的CSS预处理器,它为开发者提供了更加强大和优雅的方式来编写CSS代码。通过使用Stylus,你可以享受到如混合(Mixins)、函数、条件语句等高级功能,同时还能保持代码的可读性和可维护性…

【MySQL面试题pro版-7】

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据…

学习javaEE的日子 Day36 字符流

Day36 1.字符流 应用场景:操作纯文本数据 注意:字符流 字节流编译器 编译器:可以识别中文字符和非中文字符,非中文字符获取1个字节(一个字节一个字符),编译器会根据编码格式获取中文字符对应的…

企业数智化产品如何设计?

企业数智化,是基于新一代数字与智能技术的各类云服务,通过网络协同、数据智能、连接资源、重组流程、赋能组织,处理交易,执行作业,融入数字经济,推进企业业务创新(研发、生产、营销、服务等&…

媒体邀约采访的分类?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约采访可以根据不同的标准进行分类。以下是一些常见的分类方式: 1. 按照邀约形式: - 电话邀约:通过电话与媒体联系,说明采访或报道…

Gartner 《2024安全和风险管理技术路线图》:高价值技术 DSP 进入广泛部署阶段

近期,Gartner 发布《2024年技术采用路线图:安全与风险管理》(以下简称:《路线图》),该信息图表识别了全球企业正在采用的 44 种与安全相关的技术,并根据采用阶段、部署风险和企业价值进行了映射…

Windows创建线程与事件示例

文章目录 1、# Windows创建线程与事件示例 1、# Windows创建线程与事件示例 初始化事件以及清理事件 void CSDOLApp::InitializeEvents() {TRACET();g_hStopEvent CreateEvent(NULL, TRUE, FALSE, NULL);if (g_hStopEvent NULL) {// 错误处理} }void CSDOLApp::CleanupEve…

Web 前端 Javascript笔记2

1、数组 为什么需要数组:因为变量只能存储一条数据,但是储存多条数据 数组的声明方式 1、new let a1new Array() console.log(a1) 2、字面量 let a2[1,2,4,"k",true,"zhangsan",11] console.log(a2) 数组里面可以存放不同的数据类…

【Vue】v-model和.sync

Vue中的v-model和.sync修饰符都是用于实现父子组件间数据双向绑定的机制。尽管它们的作用相似,但在使用方式和实现细节上有所区别。 v-model v-model是一个指令,用于在表单类元素上创建双向数据绑定。在Vue3中,v-model可以在自定义组件上使用…

深入理解go语言中的切片

写在文章开头 从一个Java的开发角度来看,切片我们可以理解为Java中的ArrayList即一种动态数组的实现,本文会从源码的角度对切片进行深入剖析,希望对你有帮助。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java …

loadash常用的函数方法

Lodash是一个JavaScript实用工具库,提供了很多常用的函数方法来简化开发过程。以下是一些常用的Lodash函数方法: _.map(array, iteratee):对数组中的每个元素应用一个函数,并返回结果数组。_.filter(collection, predicate)&…

Transformer架构实现一

从0-1搭建Transformer架构 架构图 本文主要讲解 1)输入层的词嵌入 2)输入层的位置编码 3)编码层的多头注意力机制 4)编码层的前馈全连接 1)输入层的词嵌入 class Embeddings(nn.Module):"""构建emb…

a == 1 a== 2 a== 3 返回 true ?

1. 前言 下面这道题是 阿里、百度、腾讯 三个大厂都出过的面试题,一个前端同事跳槽面试也被问了这道题 // ? 位置应该怎么写,才能输出 trueconst a ?console.log(a 1 && a 2 && a 3) 看了大厂的面试题会对面试官的精神…

git操作基本命令

Git命令操作: 1、服务器上面有新的修改,pull出现错误操作如下 git stash git pull origin master git stash pop 2、删除本地一个文件test.py,想重新download远程服务器最新的文件 #git checkout test.py 3、查看当前处于哪一个分支 #git …

代码随想录算法训练营第五十天|123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。 视频讲解:https://www.bilibili.com/video/BV1WG411K7AR https://programmercarl.com…

数码相框-显示JPG图片

LCD控制器会将LCD上的屏幕数据映射在相应的显存位置上。 通过libjpeg把jpg图片解压出来RGB原始数据。 libjpeg是使用c语言实现的读写jpeg文件的库。 使用libjpeg的应用程序是以"scanline"为单位进行图像处理的。 libjpeg解压图片的步骤: libjpeg的使…