Redis三种集群模式详解


Posted in Redis onOctober 05, 2021

三种集群模式

  • redis有三种集群模式,其中主从是最常见的模式。
  • Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。哨兵顾名思义,就是用来监控的,主要作用就是监控主从集群,自动切换主备,完成集群故障转移。
  • cluster 模式是redis官方提供的集群模式,使用了Sharding 技术,不仅实现了高可用、读写分离、也实现了真正的分布式存储。

一、主从复制

redis主从复制

1、reids主从模式

Redis三种集群模式详解

2、redis复制原理

redis 的复制分为两部分操作 同步(SYNC)和 命令传播(command propagate)

  • 同步(SYNC)用来将从服务器的状态 更新到 和主服务器 一致。白话文解释就是从服务器主动获取 主服务器的数据。保持数据一致。具体实现是,主服务器收到SYNC命令后,生成RDB快照文件,然后发送给从服务器。
  • 命令传播 (command propagate)用于在主服务器数据被修改后,主从不一致,为了让从服务器保持和主服务器状态一致,而做的命令传播。白话文解释就是主服务器收到客户端修改数据命令后,数据库数据发生变化,同时将命令缓存起来,然后将缓存命令发送到从服务器,从服务器通过载入缓存命令来达到主从数据一致。这就是所谓的命令传播。
  • 为什么需要有同步和命令传播的两种复制操作: 当只有同步操作时候,那么在从服务器向主服务器发送SYNC命令时候,主服务器在生成RDB快照文件时候,仍然会收到客户端的命令修改数据状态,这部分数据如果不能传达给从服务器,那么就会出现主从数据不一致的现象。这时候就出现了命令传播,主服务器收到从服务器的SYNC命令后,生成RDB快照文件同时,将此段时间内收到的命令缓存起来,然后使用命令传播的操作发送从服务器。来达到主从数据一致。

3、redis主从复制原理

上面介绍了redis复制的两种操作,而redis得主从复制正式基于 同步 和 命令传播 来实现得。下面两张图展示了redis复制的流程:

Redis三种集群模式详解

Redis三种集群模式详解

4、redis主从复制优缺点

优点:

1、实现读写分离,提高了可用性,解决了单机故障2、主从复制期间master和slave都是非阻塞方式,仍然可用。

缺点:

1、master宕机期间,需要手动切换主机,同时会有部分数据不能及时同步从服务器,造成数据不一致(需要人工手动介入)

2、slave宕机后,多个slave恢复后,大量的SYNC同步会造成master IO压力倍增(可以手动规避启动时间)

3、在线扩容较复杂。

总结:
redis主从复制的优点主要是提高了可用性缺点

二、Sentinel 哨兵模式

Sentinel 哨兵Sentinel 哨兵介绍
Sentinel 哨兵本质上是一个运行在特殊模式下的Redis实例,只是初始化的过程和工作与普通的Redis不同,本质上也是一个单独的进程。
Sentinel 哨兵 是Redis的高可用解决方案:一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在主服务器下线时可以自动切换从服务器升级为主服务器。

1、Sentinel系统

下图是一个简单的Sentinel系统架构图,一个Sentinel系统监视一个主从集群,其中server1是Redis主服务器,server2/3/4是Redis 从服务器。主从之间利用上面的主从复制来达到主从一致。而Sentinel系统监视整个主从集群。

Redis三种集群模式详解

2、Sentinel故障转移

当Sentinel系统察觉到Server1主服务器下线时,就会终止server2/3/4的复制。

Redis三种集群模式详解

同时Sentinel将server2升级为主服务器,server3/4从新的主服务器进行复制。同时等待server1的再次上线。

Redis三种集群模式详解

Sentinel系统也可以主动降级主服务为从服务器,将从服务器升级为主服务器。

Redis三种集群模式详解

2.1、Sentinel 哨兵监控过程

Sentinel 哨兵监控集群过程:

  • 命令 Sentinel哨兵通过发送命令,让redis服务器返回运行状态。发布订阅 当主服务器状态发生变化时,Sentinel哨兵通过
  • 发布订阅模式通知其他从服务器。

2.2、Sentinel 哨兵故障转移

Sentinel 故障转移:

  • 1、Sentinel系统中的Sentinel实例每隔1s就像集群发送PING命令
  • 2、如果集群中有实例的回复Sentinel实例时间超过了 down-after-milliseconds,那么这个实例就会发送PING命令的Sentinel实例被主观下线
  • 3、那么什么时候会客观下线呢?需要Sentinel系统中其他实例也确认集群中该实例主管下线。
  • 如果master主服务器被标记为主观下线,则Sentinel系统中监视master的Sentinel进程需要以每秒一次的频率确认Master是否进入主管下线状态
  • 4、当有足够的Sentinel实例(取决于配置)确认Master进入了主管下线,则Master会被标记为客观下线。

Redis三种集群模式详解

3、Sentinel 哨兵优缺点

优点:

1、哨兵模式基于主从复制,因此主从复制的优点哨兵都具备2、哨兵具备了主从切换和故障转移,因此集群有了更高的可用性

缺点:

1、Redis较难支持在线扩容,在线扩容比较复杂。

总结:
sentinel 哨兵主要用来监控redis主从集群,提高了redis 主从集群的可用性。

三、cluster 模式

redis cluster

1、reids cluster

Redis Cluster是一种服务器 Sharding 技术,redis 3.0版本开始正式提供。
Sentinel基本已经实现了高可用,但是每台机器都存储相同内容,很浪费内存,所以Redis Cluster实现了分布式存储。每台机器节点上存储不同的内容。

Redis三种集群模式详解

2、Redis Cluster 数据分片原理

redis 数据分片使用的是hash slot, redis集群有16384个哈希槽,每个Key通过CRC16校验后对16384取模来决定放置哪一个槽。
当存取redis key时候,redis会根据CRC16算法得到一个结果,然后把结果和16384求余,通过这个值去对应得节点获取数据。
这个时候,应用客户端实际上只需要连接其中任意一个节点即可,然后Redis Cluster 中每个节点都保存了其他节点得槽信息。这样当存取key计算完槽之后,通过保存槽信息从配置中获取节点信息,然后再去对应得节点获取数据。

3、Redis Cluster 复制原理

redis-cluster集群引入了主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点 ping 一个主节点 A 时,如果半数以上的主节点与 A 通信超时,那么认为主节点 A 宕机了。如果主节点 A 和它的从节点 A1 都宕机了,那么该集群就无法再提供服务了

4、redis Cluster 优缺点

优点:

1、实现了分布式存储,节省了内存

到此这篇关于Redis三种集群模式介绍的文章就介绍到这了,更多相关Redis三种集群模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
redis连接被拒绝的解决方案
Apr 12 Redis
详解Redis实现限流的三种方式
Apr 27 Redis
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
redis 查看所有的key方式
May 07 Redis
聊一聊Redis与MySQL双写一致性如何保证
Jun 26 Redis
Redis Stream类型的使用详解
Nov 11 Redis
Redis安装使用RedisJSON模块的方法
Mar 23 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
解决 redis 无法远程连接
May 15 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
如何使用注解方式实现 Redis 分布式锁
Jul 23 Redis
Redis过期数据是否会被立马删除
Jul 23 Redis
浅谈Redis的keys命令到底有多慢
基于Redis结合SpringBoot的秒杀案例详解
Jedis操作Redis实现模拟验证码发送功能
Sep 25 #Redis
为什么RedisCluster设计成16384个槽
使用redis生成唯一编号及原理示例详解
Sep 15 #Redis
Redis读写分离搭建的完整步骤
Sep 14 #Redis
在项目中使用redis做缓存的一些思路
You might like
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
教你如何把一篇文章按要求分段
2006/10/09 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
使用Python获取Linux系统的各种信息
2014/07/10 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python实现控制COM口的示例
2019/07/03 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
flask项目集成swagger的方法
2020/12/09 Python
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
中国制造网:Made-in-China.com
2019/10/25 全球购物
你对IPv6了解程度
2016/02/09 面试题
销售总监工作职责
2013/11/21 职场文书
医院护士的求职信
2014/01/03 职场文书
结婚邀请函范文
2014/01/14 职场文书
酒店经理职责
2014/01/30 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
珍惜资源的建议书
2014/08/26 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
节约用水广告语60条
2019/11/14 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android