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 14 Redis
Redis6.0搭建集群Redis-cluster的方法
May 08 Redis
基于Redis位图实现用户签到功能
May 08 Redis
浅谈redis缓存在项目中的使用
May 20 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
Redis三种集群模式详解
Oct 05 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
使用RedisTemplat实现简单的分布式锁
Nov 20 Redis
Redis实现分布式锁的五种方法详解
Jun 14 Redis
利用Redis实现点赞功能的示例代码
Jun 28 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
咖啡的化学
2021/03/03 咖啡文化
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
Python Socket使用实例
2017/12/18 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
为什么说python更适合树莓派编程
2020/07/20 Python
Python中qutip用法示例详解
2020/10/02 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
编辑找工作求职信范文
2013/12/16 职场文书
课程设计心得体会
2013/12/28 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
公司周年庆寄语
2019/06/21 职场文书
600字作文之感受大自然
2019/11/27 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android