Redis: 集群

news2024/11/16 16:35:47

文章目录

  • 一、单点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.coloradmin.cn/o/1605468.html

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

相关文章

基础拓扑学习

基础拓扑 有限集、可数集和不可数集 2.1 定义 考虑两个集 A A A和 B B B,他们的元素可以是任何东西。假定对于 A A A的每个元素 x x x,按照某种方式,与集 B B B的一个元素联系着,这个元素记作 f ( x ) f\left( x \right) f(x);那…

Django框架设计原理

相信大多数的Web开发者对于MVC(Model、View、Controller)设计模式都不陌生,该设计模式已经成为Web框架中一种事实上的标准了,Django框架自然也是一个遵循MVC设计模式的框架。不过从严格意义上讲,Django框架采用了一种更…

Syncthing实时共享同步数据,可用于异地备份数据

一、Syncthing概述 Syncthing的主要功能是用来进行文件传输,我需要对多台不同系统的(windows,linux)服务器的数据进行备份,当前测试使用Syncthing来进行两台Centos7服务器数据备份,注意在不同服务器使用Syn…

手写商城项目学习/复习到的知识

1.在windowr创建项目可以选择自定义/vue2/vue3,但尝试在vscode不能选择. 2.vant vant是组件库,可导入结构等.vant2用于vue2,vant3,vant\4用于vue3 vant2的使用 官网: Vant 2 - 轻量、可靠的移动端组件库 (gitee.io) 全部导入:将vant所有的组件放到了所有组件内component使…

web自动化测试系列-selenium常用方法定位(五)

目录 1.selenium的定位方法 2.操作案例 3.实现代码 前面我们介绍了html页面元素主要是通过标签和属性来进行定位 ,只要满足唯一,无论是标签还是属性 ,都能进行定位 。当然 ,我们要通过selenium来进行定位 ,同样还是…

Python:可迭代对象与迭代器

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 根据Python官方文档,可迭代对象(iterable)是“一种能够逐个返回其成员项的对象”。具体来说,这种对象要么定义了一个返回迭代器(iterator)的魔术…

深入解析Nacos配置中心的动态配置更新技术

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在微服务架构中,配置管理变得尤为关键。Nacos,作为一个开源的、易于使用的、功能丰富的平台,为…

python 无处不在的二分搜索

我们知道二分查找算法。二分查找是最容易正确的算法。我提出了一些我在二分搜索中收集的有趣问题。有一些关于二分搜索的请求。我请求您遵守准则:“我真诚地尝试解决问题并确保不存在极端情况”。阅读完每个问题后,最小化浏览器并尝试解决它。 …

从计算机视觉到生命科学

人工智能技术的快速发展正在深刻影响和重塑我们的生活。作为AI领域的前沿方向,多模态大模型凭借其强大的跨域学习和推理能力,在众多行业和科学领域展现出广阔的应用前景。多模态AI指的是能够同时处理和整合文本、图像、音频、视频等不同模态数据的智能系统。这种融合不同信息源…

Java详解:GUI容器组件 | 功能组件

✎ 简介: Graphical User Interface(GUI)图形用户界面 图形界面对于用户来说在视觉上更易于接受. ✎ 关于swing: • swing是一个为java设计的GUI工具包javax.swing,包括了用户界面的各种组件. • swing中组件可以分为两大类&…

刷题之Leetcode19题(超级详细)

19.删除链表的倒数第N个节点 力扣题目链接(opens new window)https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗&#x…

【C语言__函数栈帧的创建和销毁__复习篇9】

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题: 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的,传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

Jmeter 性能压测-常见问题

1、怎么确定系统最大负载? 通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了性能拐点。 比如,当用户数达到某个数量级时,响应时间突然增长,那…

算法:期望场景;鲁棒优化

部分代码 for i1:T stst[D_DGk(i)*min_P_DG<P_DGk(i)<D_DGk(i)*max_P_DG]; end for i2:T indicatorD_DGk(i)-D_DGk(i-1); rangei:min(T,iT_up-1); st st[D_DGk(range)>indicator]; end for i2:T indicatorD_DGk(i-1)-D_DGk(i); rangei:min(T…

《QT实用小工具·二十九》托盘图标控件

1、概述 源码放在文章末尾 托盘图标控件 可设置托盘图标对应所属主窗体。 可设置托盘图标。 可设置提示信息。 自带右键菜单。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef TRAYICON_H #define TRAYICON_H/*** 托盘图标控件* 1. 可设置托盘图标…

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

书生浦语大模型全链路开源体系-第5课 书生浦语大模型全链路开源体系-第5课相关资源LMDeploy基础配置LMDeploy运行环境下载internlm2-chat-1_8b模型使用Transformer来直接运行InternLM2-Chat-1.8B模型使用LMDeploy以命令行方式与InternLM2-Chat-1.8B模型对话设置KV Cache最大占用…

Spring Batch

Spring是一个开放源代码的J2EE应用程序框架&#xff0c;由Rod Johnson发起&#xff0c;是针对bean的生命周期进行管理的轻量级容器&#xff08;lightweight container&#xff09;。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题&#xff0c;提供了功能强大IOC、AOP及W…

线上废品回收小程序,数字化回收模式带来的发展优势

近几年&#xff0c;废品回收行业的发展如火如荼&#xff0c;不少年轻人开始进入到市场中&#xff0c;进行回收创业模式。 随着废品回收市场规模的扩大&#xff0c;关于回收的方式也越来越多样&#xff0c;为居民提供了更多的便利&#xff0c;其中线上预约回收小程序就是一种新…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode&#xff1a;第 491 题 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&…

【配电网故障定位】基于二进制蝙蝠算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#80】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制蝙蝠算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络发生故障的…