Redis 哨兵和集群

news2024/9/25 13:26:38

文章目录

    • 1. 单机模式
    • 2. 主从架构
    • 3. 哨兵
    • 4. 集群模式
    • 5. 哈希槽是什么?

1. 单机模式

Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。

优点:

  • 架构简单,部署方便。
  • 高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务。
  • 高性能。

缺点:

  • 不保证数据的可靠性。
  • 在缓存使用,进程重启后,数据丢失,即使有备用的节点解决高可用性,但是仍然不能解决缓存预热问题,因此不适用于数据可靠性要求高的业务。
  • 高性能受限于单核 CPU 的处理能力(Redis 是单线程机制),CPU 为主要瓶颈,所以适合操作命令简单,排序、计算较少的场景。也可以考虑用 Memcached 替代。

2. 主从架构

主(master)和 从(slave)部署在不同的服务器上,当主节点服务器写入数据时会同步到从节点的服务器上,一般主节点负责写入数据,从节点负责读取数据。

从节点设置只读属性,而主节点没有只写属性,因此,主节点可读可以写

优点:

  • 读写分离,提高效率
    主节点负责写操作,从节点负责读操作;如果写少读多场景,配置多个从节点的话,效率非常高
  • 数据热备份,提供多个副本。
    从节点宕机,影响较小

缺点:

  • 主节点故障,集群则无法进行工作,可用性比较低,从节点升主节点需要人工手动干预。

    因为只有主节点能进行写操作,一旦主节点宕机,整个服务就无法使用。当然此时从节点仍可以进行读操作,但是对于整个服务流程来说,是无法使用的。

  • Master的写的压力难以降低。

    如果写操作比较多,那么只有一个主节点的话,无法分担压力。

  • 主节点存储能力受到单击限制。

    主节点只能有一个,因此单节点内存大小不会太大,因此存储数据量受限。

  • 主从数据同步,可能产生部分的性能影响甚至同步风暴。

    风暴问题,对于任何集群分布式来说都存在,要合理分布节点。

3. 哨兵

  Redis哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控、通知、自动故障转移,是Redis实现高可用 的实现方案。

为什么需要Redis哨兵模式?

  Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。

如下图所示:
在这里插入图片描述

如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般。

优点:

  • 对节点进行监控,来完成自动的故障发现与转移

缺点:

  • 特别是在主从切换的瞬间存在访问瞬断的情况,等待时间比较长,至少十来秒不可用。
  • 哨兵模式只有一个主节点对外提供服务,没法支持很高的并发
  • 单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。

与主从相比,哨兵仅解决了手动切换主从节点问题,至于其他的问题,基本上仍然存在。

哨兵的主要问题还是由于中心架构,仅存在一个master节点引起的,写的效率太低。

4. 集群模式

Redis Cluster 是 3.0 版后推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。

Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。

注意:集群模式下 从节点不提供读写,与主从模式不一样。 总结一下经验,分布式 场景下:集群模式一般从节点不参与读写,仅作为备用节点。而主从一般都要负责读或写,都要参与具体的工作。

优点:

  • 无中心架构。

    即有多个master节点,不像哨兵模式下仅有一个。这样写的压力就可以分散了;并且存储量也可以扩展了,因为多个主节点都可以存储一部分数据,总量要远大于单主节点架构。
    在这里插入图片描述

  • 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。

  • 可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除

  • 高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够 实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升。

    当然,如果某个槽归属的小群内都不可用时,整个服务仍然是不可用的!通过cluster-require-full-coverageyes 控制该特性, 默认yes 即需要集群完整,方可对外提供服务,设置为no ,其他的小集群仍然可以对外提供服务。

缺点:

  • 如果主节点A和它的从节点A1都宕机了,那么该集群就无法再提供服务了。

5. 哈希槽是什么?

在redis集群中,一共会虚拟出16384个槽位来存储数据集,这16384个槽位分别映射到各个节点上。

在这里插入图片描述

哈希槽的计算规则

(1)假设主节点的数量为3,将16384个槽位按照用户自己的规则手动去分配这3个节点,16384除以4,那么每个节点大约得到5460个槽。(用户自定义分配的原因在于有些机器的配置高,有些机器的配置低,配置高的可以分配多一点槽位,配置低的可以分配少一点槽位)

(2)存储数据时,对要存储的键进行crc16哈希运算,得到一个值,并取模16384,判断这个值在哪个节点的范围区间。

  假设crc16(“test_key”)%16384=3345,
  因为3345在区间0-5460之间,
  所以test_key数据写入到节点1里面。

(3)查询数据时,对要查询的键进行crc16哈希运算,得到一个值,并取模16384,判断这个值在哪个节点的范围区间。

  假设crc16(“test_key”)%16384=3345,

  因为3345在区间0-5460之间,

  所以test_key数据应该从节点1里面获取。

  以上就是redis集群采用的虚拟哈希槽的原理和计算规则说明,是不是没有想象的那么复杂。

关于哈希槽的一些疑问

1、 为啥要设置2^14个槽位?

  理论上crc16算法可以得到2^16个数值,其数值范围在0-65535之间,取模运算key的时候,应该是crc16(key)%65535,但是却设计为crc16(key)%16384,原因是作者在设计的时候做了空间上的权衡,觉得节点最多不可能超过1000个,同时为了保证节点之间通信效率,所以采用了2 ^14。

2、 为什么redis集群不采用一致性哈希算法:

  一致性哈希的节点分布基于圆环,无法很好的手动控制数据分布,比如有些节点的硬件差,希望少存一点数据,这种很难操作。

  redis集群的槽位空间是可以用户手动自定义分配的,类似于 windows 盘分区的概念,可以手动控制大小。

  其实,无论是一致性哈希还是哈希槽的方式,在增减节点的时候,都会对一部分数据产生影响,都需要我们迁移数据,当然,redis集群也提供了相关手动迁移槽数据的命令。

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

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

相关文章

【硬件外设使用】——SPI

【硬件外设使用】——SPI SPI基本概念SPI通信协议SPI使用方法pyb.spimachine.spi SPI可用的传感器 SPI基本概念 SPI是一种串行端口通信接口,它是一种同步的全双工协议,用于在数字电路之间传输数据。SPI代表串行外设接口,是一种非常流行的数字…

UDS诊断测试

UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是在汽车电子ECU环境下的一种诊断通信协议。这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面。这些ECU控制车辆的各种功能,包括电控燃油喷射系统&#xff0…

TI在物联网和AI边缘计算中落伍了吗?

摘要:本文介绍一下TI在边缘计算工作中所做的努力。 发明“人工智能”这个term的老头儿也不会想到人工智能在中国有多火。 不管是懂还是不懂,啥东西披上“人工智能“的面纱都能瞬间成为大项目。 学习AI 的年轻人认识NVIDIA,可能不太知道DSP是…

金毅:10x HTAP,企业级关系型数据库内核技术创新与演进

导语4月8日下午,为期两天的第十二届数据技术嘉年华(DTC 2023)在北京新云南皇冠假日酒店圆满落下帷幕。大会以“开源融合数字化——引领数据技术发展,释放数据要素价值”为主题,汇聚产学研各界精英到场交流。作为大会的…

网络原理之UDP

hi,大家好,又见面了,今天为大家介绍一下UDP的网络原理🐷🐷🐷 文章目录认识UDP报文格式UDP特点TCP,UDP应用场景基于UDP的应用层协议认识UDP报文格式 UDP特点 TCP,UDP应用场景 基于UDP的应用层协议 1.认识UDP报文格式 其实在真正传输的…

批量记录收支明细:手把手教你如何查看上个月的收支明细并打印。

记录收支明细太久,想要快速查看并筛选出上个月的某一个明细要如何进行查询,还要进行打印要如何操作?今天就由小编来教教大家要如何操作。 首先第一步,我们要进入晨曦记账本主页面,点击主页面上方功能栏里的“添加收支…

聚焦云原生安全|安全狗云甲荣膺CSA 2022安全金盾奖

4月13日,第六届云安全联盟大中华区大会“年度颁奖典礼”表彰仪式顺利开展。作为国内云原生安全领导厂商,安全狗也收到邀请出席此次活动。​ 此次活动上,“年度颁奖典礼”作为重要环节之一,获得业界的关注。安全狗旗下云原生安全产…

zabbix介绍及部署(超详细讲解)

目录 1.zabbix的基本概述 2.zabbix的构成 1、Server 2、web页面 3、数据库 4、proxy 5、Agent 3.zabbix的监控对象 4.zabbix的常用术语 5.zabbix的工作流程 1、主动模式 2、被动模式 6.zabbix进程详解 7.zabbix的监控框架 1、server_client架构 2、zabbix_prox…

一文搞懂C#工程中程序数据库文件.pdb(符号文件)的作用,延伸搞懂Debug/Release、AnyCPU(首选32位)/x86/x64/ARM的区别

一、准备工作 MS引用:在 Visual Studio 调试器(C#、C、Visual Basic、F#)中指定符号 (.pdb) 和源文件 MS引用:为 C#、ASP.NET 或 Visual Basic 项目 (.NET Framework) 生成符号文件 MS引用:用…

ASP.NET动态Web开发技术第6章续

第6章续ASP.NET内置对象一.预习笔记 1.ASP.NET提供了七大内置对象,Page、Request、Response、Application、Session、Server和Cookies。这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息,以实现其他特定的状态管理和页面…

【动力节点】杜老师Vue笔记——Vue程序初体验

目录 一、Vue程序初体验 1.1 下载并安装vue.js 1.2 第一个Vue程序 1.3 Vue的data配置项 1.4 Vue的template配置项 一、Vue程序初体验 可以先不去了解Vue框架的发展历史、Vue框架有什么特点、Vue是谁开发的,对我们编写Vue程序起不到太大的作用,…

云HIS源码 基层卫生健康云HIS源码

云HIS全称为基于云计算的医疗卫生信息系统(Cloud-BasedHealthcareInformationSystem),是运用云计算、大数据、物联网等新兴信息技术,按照现代医疗卫生管理要求,在一定区域范围内以数字化形式提供医疗卫生行业数据收集、…

正版软件 Directory Opus 12 Pro Windows 平台上的资源管理器,定是功能完全、可定制化程度高的那款。

Directory Opus 是一款 Windows 平台上的资源管理器,定是功能最完全、可定制化程度最高的那款。你可以通过它完成几乎所有操作,包括查看图片元信息、预览图片、阅读文本文件内容、批量重命名、操作压缩文件以及 FTP 同步请求等。 Directory Opus 是一款由…

QGIS数据可视化学习笔记00——为什么用QGIS以及QGIS设置中文界面

一、为什么用QGIS? 1、qgis的概念 qgis原称Quantum GIS,是开源的桌面地理信息系统软件。 qgis是一款桌面版gis软件,他是基于qt平台使用c开发出来gis软件。 2、qgis的主要特点 1.支持多种GIS数据文件格式 2.集成或支持其他开源GIS&#…

rust的并发以及kv server网络处理和网络安全部分

理解并发和并行 Golang 的创始人之一,对此有很精辟很直观的解释:并发是一种同时处理很多事情的能力,并行是一种同时执行很多事情的手段。 我们把要做的事情放在多个线程中,或者多个异步任务中处理,这是并发的能力。在多…

postman同时传递文件和对象参数

属性 required true 意思为 必填对象属性 /*** descroptions: 再保临分请求* author: c* date: 2023/1/9 14:26* version: 1.0*/public class UwReinsureReportReqDTO extends BaseInfoReqDTO implements Serializable {private static final long serialVersionUID -59047…

No message available问题解决

概述 在EFK日志查询平台断断续续看到若干个应用的报错信息: 排查 上述截图里报错的类(省略掉Import语句后): Slf4j RestController public class FilterErrorController extends BasicErrorController {public FilterErrorC…

Pytorch安装与测试

1.Anaconda安装 官方网址:www.anaconda.com 找到anaconda的历史安装版本,我安装的是此版本 一直使用默认安装下来即可 1.1安装下来打开终端,创建python环境 1.2创建完成后 创建完成后,通过pip list发现没有torch 2.pytorch安装 进入pytorch官网:PyTor…

C语言 字符串解析strchr/strrchr/strtok//strtok_r函数使用

在程序中,解析用户输入的参数(命令行参数)是很常见的操作,本文将讲解C语言中常见的一些解析字符串函数使用方法。 1 strchr 1.1 描述 strchr() 用于查找字符串中的一个字符,并返回该字符在字符串中第一次出现的位置…

【数学知识】一文学会算法中的数学知识(1.1)

目录 一.数论 1.质数 (1)质数的判断 (2)分解质因数(数几个质数相乘) (3)求1-n的所有质数 2.约数 (1)试除法求所有约数 (2)约数个数和约数之和 (3)最大公约数(欧几里得算法 ) 一.数论 1.质数 在大于1 的整数&#x…