Redis-6 三种集群模式:主从模式、哨兵模式、分片集群

  • 主从模式

一.介绍一下redis的主从同步

单节点的redis的并发能力是有上限的,要实现高并发,就要搭建主从集群,实现读写分离。通常是一主多从,主节点负责写数据,从节点负责读数据。

二.介绍一下主从模式同步数据的流程

1.全量同步——用于主从第一次建立连接

(1)从节点请求主节点同步数据,向主节点发送版本信息:replication id和offset

        replication id:简称为replid,是数据集的标记,replid一致说明使用同一个数据集。通常每一个master节点都有唯一的replid,slave节点则会继承master节点的replid。

        offset:偏移量,随着命令日志文件的数据的增多而增大。slave节点完成同步时会记录当前同步的offset,如果slave的offset小于master的offset,说明该slave的数据落后于master,需要进行数据同步。

(2)主节点根据replid是否一致判断是否是第一次请求同步,如果replid不一致,说明是第一次同步,执行全量同步

(3)主节点执行bgsave,生成一个RDB文件,发送给从节点去同步

(4)在从节点同步RDB文件期间,如果主节点接受了新的写命令,则会将这些写命令记录在一个命令日志文件repl_baklog里面,该日志文件相当于一个缓冲区

(5)从节点同步完成后,主节点会将repl_baklog中的命令发送给从节点进行同步

2.增量同步——用于slave重启或后期数据变化

(1)从节点请求主节点同步数据,向主节点发送版本信息

(2)主节点根据replid是否一致判断是否是第一次请求同步,如果replid一致,说明不是第一次同步,执行增量同步

(3)主节点从repl_baklog中获取从节点的offset值之后的命令,发送给从节点进行同步

  • 哨兵模式

一.介绍一下哨兵模式

redis提供了哨兵(sentinel)机制用来实现主从集群的自动故障恢复,哨兵具有以下三个功能:

1.监控:sentinel会不断检查master节点和slave节点是否按预期工作。其基于心跳检测机制运行,每隔1秒就向集群的每个实例发送ping命令

(1)主观下线:如果某个sentinel节点发现集群中某个实例未在规定时间内响应,则认为该实例主观下线。该sentinel会向其余所有sentinel节点发送信息,询问它们该实例是否下线。

(2)客观下线:如果超过指定数量的sentinel节点都认为该实例主观下线,则判定该实例为客观下线,即该实例不可用。这个指定数量最好超过sentinel节点数量的一半。

2.自动故障恢复:如果master节点被判定为客观下线,则sentinel会依据选主规则将一个slave节点提选为新的master节点。当原master节点故障恢复后也会变成slave节点,以新的master节点为主。哨兵选主规则有多个,常用的有:

(1)先判断从节点的slave-priority值,值越小优先级越高

(2)如果slave-priority值相同,则判断从节点的offset值,值越大优先级越高

3.通知:sentinel充当redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给redis客户端。

二.你使用的redis是单点还是集群,如果是集群,是哪种集群?

示例:我使用的redis是集群,用的主从模式(一主一从)+哨兵模式。单节点不超过10G内存,如果redis内存不足,可以给不同的服务器分配独立的redis主从节点。

三.介绍一下redis的集群脑裂

1.集群脑裂是由于master节点 与 slave节点和sentinel 处于不同的网络分区,导致sentinel未能感知到master节点的心跳,判断master节点主观下线,提选一个slave节点作为新的master节点,这样就同时存在了两个master节点,像大脑分裂了一样。客户端仍然会向原master节点写入数据,而新节点无法同步数据。当网络恢复后,原master节点会被降为slave节点,其数据也会因为从新的master节点那同步数据而被覆盖,这样就导致了网络故障期间写入原master节点的数据全部丢失。

2.解决方式

通过修改redis的配置,实现

(1)设置最少从节点数量,只有当主节点的从节点数量超过指定值,才允许向主节点写入数据

(2)缩短主从同步数据的延迟时间

如果达不到要求就拒绝请求,这样就可以避免大量的数据丢失。

  • 分片集群

一.介绍一下分片集群

1.主从模式解决了高并发读的问题,哨兵模式解决了高可用的问题,但仍有两个问题为解决:海量数据存储和高并发写。使用分片集群可以解决这两个问题。

2.分片集群的特征和功能

(1)分片集群中有多个master节点,每个master节点存储不同的数据——解决了海量数据存储和高并发写的问题

(2)每个master节点都可以有多个自己的slave节点——相当于主从模式,解决了高并发读的问题

(3)master节点之间通过ping命令检测彼此的心跳——相当于哨兵模式,解决了高可用的问题

(4)客户端请求可以访问集群的任意节点,最后都会被转发到正确的节点——路由规则,进行数据定位

二.redis的分片集群中数据是如何读写的? == 分片集群的路由规则是什么?

1.redis分片集群引入了哈希槽的概念,集群共有16384个哈希槽

2.将16384个哈希槽分配给不同的master实例

3.根据key的有效值部分计算哈希值,将计算结果对16384取余,得到了对应的槽位,就可以对该槽位中的数据进行读写。

key的有效值:如果key前面有大括号,则大括号的内容就是有效值;如果没有大括号,就将整个key作为有效值。有效值常用于主动选择要将数据存储在哪个master实例下。

       

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

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

相关文章

1010: 折半查找的实现

解法&#xff1a; #include<iostream> #include<vector> using namespace std; void solve() {int n;cin >> n;vector<int> vec(n);for (int& x : vec) cin >> x;int x;cin >> x;int l 0, r n-1, cnt 0;while (l < r) {cnt;int…

Ubuntu22.04下安装kafka_2.12-2.6.0并运行简单实例

目录 一、版本信息 二、安装Kafka 1. 将Kafka安装包移到下载目录中 2. 安装Kafka并确保hadoop用户对Kafka目录有操作权限 三、启动Kafka并测试Kafka是否正常工作 1. 启动Kafka 2. 测试Kafka是否正常工作 一、版本信息 虚拟机产品&#xff1a;VMware Workstation 17 Pro…

一套C语言开发的 PACS影像系统源码 PACS系统的基本概念、系统业务流程

PACS系统基本概念 PACS&#xff0c;全称 Picture Archiving and Communication Systems&#xff0c;中文意为影像归档和通信系统。它是应用于医院影像科室的一种系统&#xff0c;主要任务是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#…

Faststone Capture:高效屏幕捕获神器评测【AI写作】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

Java毕设之基于SpringBoot的在线拍卖系统

运行环境 开发语言:java 框架:springboot&#xff0c;vue JDK版本:JDK1.8 数据库:mysql5.7(推荐5.7&#xff0c;8.0也可以) 数据库工具:Navicat11 开发软件:idea/eclipse(推荐idea) 系统详细设计 管理员功能模块 管理员登录&#xff0c;管理员通过输入用户名、密码、角色等信…

AI日报:干翻AI PC!苹果M4芯片首发;GoEnhance可生成粘土风格视频;DeepSeek-V2模型已在魔搭社区开源

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 1、干翻AI …

Zip压缩归档库-libzip介绍

1.简介 libzip是一个C库&#xff0c;用于读取、创建和修改zip格式的压缩文件。它支持从zip文件中读取、写入、添加和删除文件&#xff0c;还支持密码保护的zip文件。libzip是跨平台的&#xff0c;可以在多种操作系统上使用&#xff0c;包括Linux、Windows和macOS。 常用接口介…

【Ping】Windows 网络延迟测试 ping 、telnet、tcping 工具

ping 命令 属于网络层的ICMP协议&#xff0c;只能检查 IP 的连通性或网络连接速度&#xff0c; 无法检测IP的端口状态。 telnet telnet命令&#xff0c;属于应用层的协议&#xff0c;用于远程登录&#xff0c;也可用于检测IP的端口状态。但是功能有限&#xff0c;只能检测一时…

【OpenHarmony 实战开发】 做一个 loading加载动画

本篇文章介绍了如何实现一个简单的 loading 加载动画&#xff0c;并且在文末提供了一个 demo 工程供读者下载学习。作为一个 OpenHarmony 南向开发者&#xff0c;接触北向应用开发并不多。北向开发 ArkUI 老是改来改去&#xff0c;对笔者这样的入门选手来说学习成本其实非常大&…

网页主题自动适配:网页跟随系统自动切换主题

主题切换是网站设计中一个非常有趣的功能&#xff0c;它允许用户在多种预先设计的样式之间轻松切换&#xff0c;以改变网站的视觉表现。最常见的就是白天和黑夜主题的切换&#xff0c;用户可以根据自己的喜好进行设置。 除了让用户手动去切换主题外&#xff0c;如果能够让用户第…

Vue从入门到实战Day03

一、生命周期 1. 生命周期四个阶段 思考&#xff1a; ①什么时候可以发送初始化渲染请求&#xff1f; 答&#xff1a;越早越好&#xff0c;在创建阶段后 ②什么时候可以开始操作DOM&#xff1f; 答&#xff1a;至少DOM得渲染出来&#xff0c;在挂载阶段结束后。 Vue生命周…

Python从0到POC编写--实用小脚本02

爆破脚本&#xff1a; 爆破脚本也是我们经常使用的东西 这里就简单讲讲后台爆破脚本的编写吧 在编写之前&#xff0c;我们先通过访问网站去看看情况 首先我们可以先登录看看 输入账号 admin &#xff0c;密码 12345 后 登录失败&#xff0c;提示 用户名或密码错误 在输入…

MultiBooth:文本驱动的多概念图像生成技术

在人工智能的领域&#xff0c;将文本描述转换为图像的技术正变得越来越先进。最近&#xff0c;一个由清华大学和Meta Reality Labs的研究人员组成的团队&#xff0c;提出了一种名为MultiBooth的新方法&#xff0c;它能够根据用户的文本提示&#xff0c;生成包含多个定制概念的图…

去除视频背景音乐或人物声音的4种方法,建议收藏

你是否曾想移除视频中令人分心的声音呢&#xff1f;对于需要裁剪声音或去除背景噪音的视频来说&#xff0c;消音是一种非常有用的技能。那么&#xff0c;视频怎么消除声音&#xff1f;看看下文就知道了。 方法一&#xff1a;使用 智优影 去除视频中的音频 在线转换工具不仅支持…

怎样选择IT外包公司?需要注意什么?

随着网络化、数字化、智能化快速发展&#xff0c;一部分企业成立自己的IT部门&#xff0c;负责各个科室的网络安全&#xff0c;大部分企业把网络安全、数据安全&#xff0c;外包给专业的IT外包公司&#xff0c;既提升了办公效率&#xff0c;企业又能把主要精力放在发展核心业务…

【C】语⾔内存函数--超详解

1. memcpy 使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠&am…

Chrono下载管理器:提升下载体验,有效管理文件

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、介绍二、下载安装1、Chrome应用商店&#xff08;需科学&#xff09;2、第三方直链下载 三、使…

nacos下载安装和nacos启动报错

nacos简介: Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您…

Spring底层入门(九)

boot的执行流程分为构造SpringApplication对象、调用run方法两部分 1、Spring Boot 执行流程-构造 通常我们会在SpringBoot的主启动类中写以下的代码&#xff1a; 参数一是当前类的字节码&#xff0c;参数二是main的args参数。 public class StartApplication {public static…

(一)Linux的vim编辑器的使用

一.vim编辑器 Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。 二…
最新文章