Redis高可用方案对比:哨兵与集群架构解析

创始人
2024-12-16 16:54:00
0 次浏览
0 评论

redis哨兵和集群区别是什么?

redis哨兵和集群的区别如下。

监控:Sentinel持续监控您的主从服务器是否正常运行。
通知:当受监控的Redis服务器出现问题时,Sentinel可以通过管理员API或其他应用程序提醒服务器发送通知。

即使集群使用Sentinel,每个Redis实例存储的是全量,每个Redis存储的内容都是完整的数据,浪费内存,并且有木桶效应。
为了最大限度地提高内存使用率,您可以使用集群,即分布式存储。

即每个Redis存储的内容不同,总共16384个slot。
每个redis都被分配了一些槽位。
hash_slot=crc16(key)mod16384找到对应slot的key为可用key。
如果有{},则取{}中的为可用键,否则整个键为可用键。

主从、哨兵、集群架构优缺点对比

优点:·架构简单,易于实现。
高性价比:使用缓存时无需备份节点(通过supervisor或crontab即可保证单实例可用性)。
当然,为了满足公司的高可用,也可以牺牲一个备份节点,但同时只有一个实例对外提供服务,这意味着高性能。

缺点:·无法保证数据的可靠性。
使用缓存并重新启动进程后,数据就会丢失。
即使有备份节点解决高可用,仍然无法解决缓存发热问题,因此不适合数据可靠性要求较高的企业。

高性能受限于单核CPU的处理能力(Redis是单线程机制),CPU是主要瓶颈,所以适合操作命令简单、操作简单的场景减少排序和计算。
您还可以考虑使用Memcached。

玩转Redis的高可用(主从、哨兵、集群)

所谓高可用性,也称为HA(HighAvailability),是分布式系统架构设计时必须考虑的因素之一。
是保证系统SLA的重要指标。
Redis高可用主要有三种模式:主从模式、看门狗模式和组模式。

Redis提供了复制功能,当一个redis数据库中的数据发生变化时,这个变化会自动同步到其他redis机器上。

当Redis部署在多台机器上时,这些机器节点会被分为两类,一类是主节点(masternode),一类是从节点(slavenode)。
一般来说,主节点既可以进行读操作,也可以进行写操作,而从节点只能进行读操作。
一个主节点可以有多个从节点,但一个从节点只能有一个主节点,即所谓的多从一主结构。

堵塞。
因此,在Master-Slave同步过程中,客户端仍然可以提交查询或者修改请求;

·Slave也以非阻塞的方式完成数据同步。
同步过程中,如果客户端提交查询请求,Redis会返回同步前的数据。

·Redis没有自动容错和恢复功能,手动更改前端IP即可恢复;


问题,降低系统可用性;

·Redis很难支持在线扩容,当集群容量达到上限时,在线扩容会变得非常复杂;

·Redis的主节点和从节点上的数据是相同的,降低了内存可用性

在当前的生产中,我们优先考虑哨兵模式。
在此模式下,如果主设备发生故障,看门狗将自动选择主设备并将其他从设备指向新的主设备。

在主从模式下,redis还提供了sentinel命令redis-sentinel。
作为一个进程,它将独立运行。
其原理是sentinel进程向所有redisbot发送命令并等待Redis服务器响应,从而监控多个正在运行的Redis实例。
一般情况下,监护人的数量为奇数,以方便决策和选择。
多个守护者组成一个守护者群,守护者之间会直接沟通,检查守护者是否正常工作,同时会发现主人和守护者做出选择新主人的决定。

哨兵模式的作用:

·通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器;

·但是,当哨兵进程监控Redis服务器时也会出现问题。
因此,我们可以使用多个守卫来进行监控。
每个守卫也会受到监控,从而形成多种守卫模式。

·看门狗模式基于主从模式,看门狗模式具有主从模式的所有优点。

·主从自动切换,使系统更加健壮、可用。

·具有主从模式的缺点,每台机器上的数据相同,内存可用性较低。

·Redis难以支持在线扩容当集群容量达到上限时,在线扩容将变得非常复杂。

Redis集群模式本身并没有使用稳定的哈希算法,而是使用了槽。

在每个Redis节点上,都有两件事。
其取值范围为三个master中这16383个槽位的0-16383。
另外一个是cluster,可以理解为集群管理插件,类似于sentinel。

当我们的访问key到来时,Redis会根据crc16算法计算出一个结果,然后计算该结果与16384的余数,这样每个key对应一个数字在0-16383之间的哈希槽通过这个值找到对应槽位对应的节点,然后自动直接跳转到对应节点进行访问操作。

为了保证高可用性,redis-cluster引入了主从模式,一个主节点对应一个或多个从节点。
当其他主节点ping主节点master1时,如果超过半数的主节点与master1通信一​​定时间,则认为master1宕机,master1的从节点slave1将被激活,slave1将成为主节点继续。
提供服务。

redis-cluster采用了去中心化的思想。
客户端不需要直接连接Redis节点集群中的所有节点,可以连接集群中的任意节点。

redis集群扩容是向集群中添加机器,缩容是从集群中删除机器并将16383槽位重新分配给集群中的节点(数据迁移)。

扩容时,首先使用redis-tri.rbadd-node将新机器添加到集群中。
e.只有使用redis-tri.rbreshard重新分片(迁移数据)并将旧节点上的空间分配给新节点后,新节点才能生效。

缩容时,先使用redis-tri.rbreshard移除机器上的socket,然后使用redis-tri.rbadd-del移除机器。

采用去中心化的思想,数据按照时隙跨多个节点存储和分布,节点之间数据共享,数据分布可动态调整;

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

高可用:当部分节点不可用时可用,该套件仍然可用。
通过添加一个Slave作为待处理数据的副本,可以通过gossip协议实现节点之间的自动状态故障转移,并利用投票机制完成从Slave到Master的角色晋升;

降低运维成本,提高系统可靠性和可用性。

1RedisCluster是一种没有中心节点的集群架构。
它依靠Goss(八卦传播)协议来协作自动修复群组状态。
但GosSIp存在消息延迟和消息冗余的问题,当集群节点较多时,节点之间必须持续进行PING/PANG通信,不必要的流量占用大量网络资源。
虽然Reds4.0对此进行了优化,但是这个问题仍然存在存在。

2数据迁移问题

RedisCluster可以动态扩容和缩容节点。
当扩容或缩容时,需要进行数据迁移。

为了保证迁移的一致性,所有的Redis迁移操作都是同步操作,两端的Redis会进入不同长度的死锁状态,但是如果Key内存占用太大,严重时会导致集群内部故障,造成不必要的切换。

主从模式:主节点关闭后,必须手动指定新的主节点。
可用性不高,基本不用。

Sentinel模式:master节点关闭后,sentinel进程会主动选举新的master,可用性高,但每个节点上存储的数据是相同的,浪费内存空间。
数据量不大,batchsize也不太大。
当需要自动容错和灾难恢复时使用。

热门文章
1
SQL2000数据库备份压缩技巧:优化空... 怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...

2
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

3
SQL字符串处理技巧:单引号使用与转义标... SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...

4
Windows环境下Redis安装指南与... redis安装windowsredis基本简介与安装安装Redis首先需要获取安...

5
深度解析:Redis性能优势与局限性,助... redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...

6
深入解析:MySQL数据库的特性与应用 mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...

7
MySQL命令行操作指南:轻松启动和登录... 用命令行方式启动和登录mysql服务的方法1.启动MySQL服务1打开命令行窗口...

8
Linux Redis后台启动教程:配置... linux怎么启动redis1、首先,为了管理方便,将Redis文件中的conf...

9
MySQL浮点数与Decimal类型详解... MySQL中的float和decimal类型有什么区别小数类型可以准确地表示非常...

10
C语言实现输入10个整数并找出最大最小值... C语言从键盘输入任意的10个整数,从中找出最大值和最小值并输出代码:#inclu...