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 哨兵集群的实现
Jun 18 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
Redis高并发防止秒杀超卖实战源码解决方案
Nov 01 Redis
Redis模仿手机验证码发送的实现示例
Nov 02 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
Feb 12 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
Redis基本数据类型Zset有序集合常用操作
Jun 01 Redis
利用Redis实现点赞功能的示例代码
Jun 28 Redis
浅谈Redis的keys命令到底有多慢
基于Redis结合SpringBoot的秒杀案例详解
Jedis操作Redis实现模拟验证码发送功能
Sep 25 #Redis
为什么RedisCluster设计成16384个槽
使用redis生成唯一编号及原理示例详解
Sep 15 #Redis
Redis读写分离搭建的完整步骤
Sep 14 #Redis
在项目中使用redis做缓存的一些思路
You might like
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
php使用google地图应用实例
2014/12/31 PHP
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
python动态监控日志内容的示例
2014/02/16 Python
在Python中使用成员运算符的示例
2015/05/13 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
浅谈python之新式类
2018/08/12 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
wxPython实现画图板
2020/08/27 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
幼儿园的门卫岗位职责
2014/04/10 职场文书
活动宣传策划方案
2014/05/23 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
合作经营协议书范本
2014/09/16 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书