Redis主从、哨兵、集群模式

news2025/1/6 20:15:18
众所周知,redis是目前非常流行的缓存中间件之一。在redis官网有这么一段话: redis有着丰富的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。

本文基于官方文档,对主从模式、哨兵模式、Cluster集群三种模式进行简单介绍,让大家对三种模式有一个基础的认知,想要获取各个模式更加深入的理解,可以查看文档后面对应的官网链接。

1 主从模式(replication)

我们使用Redis单机时,由于数据是存储在一台服务器上的,所以当这台服务器出现问题时或者这个Redis单机服务出现故障时,就会导致存储的数据丢失,以及Redis服务的不可用。为了避免单点故障,Redis 提供了复制(replication)功能,可以将主 Redis 服务器(下文称 master)的数据精准地复制到多个从 Redis 服务器(下文称 slave)上,并且每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。我们将这种基于复制功能的模式称为主从模式。

在主从模式下,master可以进行读写操作,当写操作导致数据变化时会自动将数据同步给slave。而slave默认只能读不能写,但是可以接受master同步过来的数据。一个master可以拥有多个slave,而一个slave只能拥有一个master,从slave也可以拥有自己的slave。

优点:增强了Redis单机的高可用性

缺点:当主节点宕机后,需要手动将从节点变更为主节点,否则系统不可用。

推荐版本:Redis 4.0及以后

详细介绍:

  • 中文-http://www.redis.cn/topics/replication.html

  • 英文-https://redis.io/topics/replication

2 哨兵模式(Sentinel)

哨兵模式是基于主从模式的,我们知道主从模式最大的缺点就是当主节点宕机后,从节点无法自动上升为主节点对外提供服务。Redis 2.8及以后版本提供了哨兵工具来实现自动化的系统监控和故障恢复功能。

哨兵的作用就是监控master、slave是否正常运行,master出现故障后自动将slave转换为master。

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 哨兵主要起以下作用:

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

b、当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

需要强调的是,哨兵模式中将主服务器判断为失效至少需要 2 个 Sentinel 同意,所以我们至少要部署两个及以上的Sentinel 。

优点:

a、哨兵集群模式是基于主从模式的,所有主从的优点,哨兵模式同样具有;

b、主从可以切换,故障可以转移,系统可用性更好;

c、哨兵模式是主从模式的升级,系统更健壮,可用性更高。

缺点:

不能支持高并发,哨兵模式能提供写入功能的也就只有主节点。

推荐版本:Redis 4.0及以后

详细介绍:

  • 中文-http://www.redis.cn/topics/sentinel.html

  • 英文-https://redis.io/topics/sentinel

3 集群模式(Cluster)

Redis集群结构是:N个平权主节点(master),每个主节点对应M个从节点(slave)。

Redis集群通过哈希槽((hash slot)来分配数据,哈希槽的编号为0-16383。集群把这个16384分配给这N个主节点,当存取的key值到达时,通过CRC16(key) % 16384 取余找到对应插槽,并跳转到对应节点上进行存取操作。

Redis集群投票机制:服务器之间通过互相的ping-pong判断是否节点可以连接上。如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点宕机了。此时该主节点对应的从节点上升为主节点。当没有从节点可替补时,集群宕机。

因为投票机制,N须为奇数。

必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

优点:

a、主节点宕机后,基于投票机制从节点可自动上升为主节点;

b、数据分区存储在不同的主节点上,可以大幅度提升Redis服务的性能支撑。

缺点:由于数据分区存储,所以当一个主节点及其对应的从节点全部宕机后,整个Redis集群即不能使用。

推荐版本:Redis 5.0及以后

详细介绍:

  • 中文-①http://www.redis.cn/topics/cluster-tutorial.html ②http://www.redis.cn/topics/cluster-spec.html

  • 英文-①https://redis.io/topics/cluster-tutorial ②https://redis.io/topics/cluster-spec

最后总结一下,哨兵模式和集群模式对于期望Redis服务能够达到高可用的用户,都是能够满足需求的,如果需要高性能的用户,则推荐使用Redis集群。

对于Redis的主从模式,高可用和并发均不能有效支持,不推荐使用。

参考文献:

Redis中文官方文档:http://www.redis.cn/documentation.html

Redis英文官方文档:https://redis.io/documentation

Redis详解6.主从模式-https://www.jianshu.com/p/b46cb093a083

关于redis的主从、哨兵、集群-https://blog.csdn.net/c295477887/article/details/52487621

浅析redis主从、哨兵和Cluster-https://cloud.tencent.com/developer/article/1499541

Redis哨兵(Sentinel)模式-https://www.jianshu.com/p/06ab9daf921d

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

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

相关文章

Please restart this script from an administrative PowerShell!

执行 npm install --global --vs2019 --production windows-build-tools报一下错误信息 Downloading python-2.7.15.amd64.msi Downloading Python failed. Error: Error: getaddrinfo ENOTFOUND cdn.npmmirror.com at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:…

养老院管理系统|基于JavaWeb开发实现养老院管理系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

ROS用pyqt实现GUI界面控制乌龟运动

#!/usr/bin/env python3 #codingutf-8 from PyQt5.QtWidgets import * import sys from window import MainWindow,TurtleWindow import rospy if __name__ __main__: rospy.init_node(turtle_ctrl_node) appQApplication(sys.argv) #窗口展示 windowTurtleWindow() …

问题排查 - DotNet 6 后台服务Docker部署后部分接口返回值乱码

问题描述 最近有一个DotNetWebApi服务需要使用Docker在服务器部署,部署后部分接口返回内容会出现部分乱码的情况。 一些关键点: 服务本机直接启动,此接口无异常;服务器直接启动,此接口无异常 服务器为Ubuntu20.04安…

rabbitmq加入linux开机自启动脚本

cd /etc/init.d编辑脚本 vi rabbitmq#! /bin/sh # chkconfig: 2345 20 60 # description: rabbitmq server export HOME/root export PATH/usr/local/rabbitmq/erlang/bin:$PATH case "$1" instart)/usr/local/rabbitmq/sbin/rabbitmq-server start;;stop)/usr/loc…

命令模式Command

1.意图:将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 2.结构 Command声明执行操作的接口。 ConcreteCommand将一个接收者对象绑定于一个动作&#xff1…

利用nginx 反向代理解决跨域问题

说到nginx,不得不说真的很强大,也带来很多便利用于解决一些头疼的难题。 一般来说可以用来做:静态页面的服务器、静态文件缓存服务器、网站反向代理、负载均衡服务器等等,而且实现这一切,基本只需要改改那万能的配置…

前端插件的应用

像这种页面四个页面下面的展示格式都一样&#xff0c;这个时候就把公共部分代码抽取出来作为组件使用 直接把中间部分代码赋值过来 <template> <div> <div v-for"(items, index) in ford" :key"index"> <div v-if"items.shopC…

P3- 傅里叶变换1-通讯原理

前言&#xff1a;傅里叶变换是Modulation, OFDM 技术的理论基础这里主要介绍连续性随机变量的傅里叶变换,以及对应的性质。https://zhuanlan.zhihu.com/p/339281545https://wenku.baidu.com/view/ab338e55a16925c52cc58bd63186bceb19e8ede4.html?_wkts_1672887094135https://w…

pdf如何防止被他人编辑

好多人一直在寻找研究如何编辑或者修改PDF文件&#xff0c;有需求就会有市场&#xff0c;现在市场上或者网络上有非常多的PDF编辑软件&#xff0c;可以编辑修改PDF文件中的内容。即使PDF文件加了密码保护&#xff0c;我们大部分人依然可以轻易的通过在浏览器中虚拟打印的方式&a…

2023.1.6 学习总结

1.set容器的相关函数 set&#xff0c;顾名思义是“集合”的意思&#xff0c;在set中元素都是唯一的&#xff0c;而且默认情况下会对元素自动进行升序排列。 set容器 包含头文件&#xff1a; #include<set> set中只能用insert函数实现数据的输入。 set<int> s…

32.深度学习模型优化加速方法-1

32.1 模型优化加速方法 模型优化加速能够提升网络的计算效率,具体包括: Op-level的快速算法:FFT Conv2d (7x7, 9x9), Winograd Conv2d (3x3, 5x5) 等;Layer-level的快速算法:Sparse-block net [1] 等;优化工具与库:TensorRT (Nvidia), Tensor Comprehension (Facebook) …

【代码题】栈的应用

目录 1.有效的括号 2.逆波兰表达式求值 1.有效的括号 点击进入该题 https://leetcode.cn/problems/valid-parentheses/description/ 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有…

【黑马】瑞吉外卖-Day01、02笔记

瑞吉外卖 数据库搭建 表结构 Maven项目 创建Maven项目 编写pom文件 编写配置文件application.yml 创建启动类ReggieApplication.java 前端静态资源的配置 将两个前端静态资源包导入到resource目录下方&#xff0c;由于Spring-MVC默认只能访问static和templete下面的文件…

04-GC的常见收集方法:标记清除、标记复制、标记整理算法、分代收集的原理与特点?

1.标记清除算法(Mark-Sweep) 最基础的垃圾回收算法&#xff0c;分为两个阶段&#xff0c;标记和清除。 1.标记阶段标记出所有需要回收的对象 2.清除阶段回收被标记的对象所占用的空间 缺点: 1.容易产生大量的内存碎片,后续可能发生大对象不能找到可利用空间的问题 2.标记和清…

【JavaGuide面试总结】Java基础篇·上

【JavaGuide面试总结】Java基础篇上1.JVM vs JDK vs JRE2.Java 和 C 的区别?3.Java 程序从源代码到运行的过程4.为什么说 Java 语言“编译与解释并存”&#xff1f;5.说说default关键字的几个用法6.静态变量有什么作用&#xff1f;7.字符型常量和字符串常量的区别?8.成员变量…

Verilog语法笔记(夏宇闻第三版)-运算符及表达式

目录 运算符按其功能可分为以下几类: 按其所带操作数的个数运算符可分为三种&#xff1a; 基本的算术运算符&#xff1a; 位运算符&#xff1a; 逻辑运算符&#xff1a; 关系运算符&#xff1a; 等式运算符&#xff1a; 移位运算符&#xff1a; 位拼接运算符(Concatati…

png如何转pdf?这几个方法快收藏起来

现如今&#xff0c;电脑上拥有的图片格式那么多&#xff0c;而每种格式分别都有自己的特点&#xff0c;就例如png格式。它是一种无损压缩算法的图片格式&#xff0c;能够保证在不失真的情况下&#xff0c;压缩图片文件大小。但在我们工作中&#xff0c;难免会需要将png图片转换…

字典树基础与应用

字典树&#xff08;Trie) 字典树&#xff08;Trie&#xff09;也叫前缀树&#xff0c;是一种针对字符串进行维护的树。 其中的键通常是字符串&#xff0c;由节点在树中的位置决定&#xff0c;键保存在边而不是在节点 一个节点的所有子孙具有相同的前缀&#xff0c;也就是这个…

PLGA-MAL/COOH/NH2基团封端聚(D,L-丙交酯-co-乙交酯)共聚物;可以用于制备胶束或者囊泡等新型靶向材料

1. HO-PLGA-Mal 马来酰亚胺封端聚&#xff08;D&#xff0c;L-丙交酯-co-乙交酯&#xff09;共聚物中文名称 马来酰亚胺封端聚&#xff08;D&#xff0c;L-丙交酯-co-乙交酯&#xff09;共聚物英文名称 HO-PLGA-Mal分子量&#xff1a;1000-100000之间选择 比例&#xff08;LA…