Redis实战宝典:从主从模式、哨兵模式、集群模式一步步理解Redis集群
目录标题
- Redis 集群的三种模式
- 主从复制
- 主从复制概念
- 主从复制原理
- 主从复制优缺点
- 哨兵集群
- 哨兵概念
- 哨兵功能
- 下线判断
- 主库选举
- 故障转移
- 哨兵模式优缺点
- Cluser 集群
- Redis 集群的数据分片
Redis 集群的三种模式
在生产环境中,我们使用 Redis 通常采用集群模式,因为单机版 Redis 稳定性可靠性较低,而且存储空间有限。
Redis 支持三种集群模式
- 主从复制
- 哨兵模式
- Cluster 模式
主从复制
主从复制概念
主从复制模式,有一个主,多个从,从而实现读写分离。主机负责写请求,从机负责读请求,减轻主机压力。
主从复制原理
- 从数据库启动成功后,连接主数据库,发送 SYNC 命令;
- 主数据库接收到 SYNC 命令后,开始执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;
- 主数据库 BGSAVE 执行完后,向所有从数据库发送快照文件,并在发送期间继续记录被执行的写命令;
- 从数据库收到快照文件后丢弃所有旧数据,载入收到的快照;
- 主数据库快照发送完毕后开始向从数据库发送缓冲区中的写命令;
- 从数据库完成对快照的载入,开始接收命令请求,并执行来自主数据库缓冲区的写命令;(从数据库初始化完成)
- 主数据库每执行一个写命令就会向从数据库发送相同的写命令,从数据库接收并执行收到的写命令(从数据库初始化完成后的操作)
- 出现断开重连后,2.8之后的版本会将断线期间的命令传给重数据库,增量复制。
- 主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。Redis 的策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
主从复制优缺点
优点
- 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
- Slave 同样可以接受其它 Slaves 的连接和同步请求,这样可以有效的分载 Master 的同步压力
- Master Server 是以非阻塞的方式为 Slaves 提供服务。所以在 Master-Slave 同步期间,客户端仍然可以提交查询或修改请求
缺点
- 主从不具备容错和恢复能力,一旦主机挂了,那么整个集群处理可读状态,无法处理写请求,会丢失数据
- 主机宕机后无法自动恢复,只能人工手动恢复
- 集群存储容量有限,容量上线就是主库的内存的大小,无法存储更多内容
配置
# redis6379.conf master
# 包含命令,有点复用的意思
include /soft/redis6.0.6/bin/redis.conf
pidfile redis_6379.pid
port 6379
dbfilename dump6379.rdb
logfile "redis-6379.log"# redis6380.conf slave1
include /soft/redis6.0.6/bin/redis.conf
pidfile redis_6380.pid
port 6380
dbfilename dump6380.rdb
logfile "redis-6380.log"
# 最后一行设置了主节点的 ip 端口
replicaof 127.0.0.1 6379# redis6381.conf slave2
include /soft/redis6.0.6/bin/redis.conf
pidfile redis_6381.pid
port 6381
dbfilename dump6381.rdb
logfile "redis-6381.log"
# 最后一行设置了主节点的 ip 端口
replicaof 127.0.0.1 6379## 注意 redis.conf 要调整一项,设置后台运行,对咱们操作比较友好
daemonize yes
哨兵集群
哨兵概念
哨兵,我们经常在电视剧中看到一些放哨的,哨兵的作用和这些放哨的差不多,起到监控作用。一旦 Redis 集群出现问题了,哨兵会立即做出相应动作,应对异常情况。
哨兵模式是基于主从复制模式上搭建的,因为主从复制模式情况下主服务器宕机,会导致整个集群不可用,需要人工干预,所以哨兵模式在主从复制模式下引入了哨兵来监控整个集群,哨兵模式架构图如下:
哨兵功能
监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
通知(Notification):哨兵可以将故障转移的结果发送给客户端。
下线判断
Redis 下线分为主观下线和客观下线两种
- 主观下线:单台哨兵任务主库处于不可用状态
- 客观下线:整个哨兵集群半数以上的哨兵都认为主库处于可不用状态
哨兵集群中任意一台服务器判断主库不可用时,此时会发送命令给哨兵集群中的其他服务器确认,其他服务器收到命令后会确认主库的状态,如果不可用,返回 YES,可用则返回 NO,当有半数的服务器都返回 YES,说明主库真的不可用,此时需要重新选举
主库选举
当哨兵集群判定主库下线了,此时需要重新选举出一个新的主库对外提供服务。那么该由哪个哨兵来完成这个新库选举和切换的动作呢?
注意:这里不能让每个哨兵都去选举,可能会出现每个哨兵选举出的新主库都不同,这样就没法判定,所以需要派出一个代表。
哨兵代表选择
哨兵的选举机制其实很简单,就是一个Raft选举算法: 选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举
任何一个想成为 Leader 的哨兵,要满足两个条件:
- 第一,拿到半数以上的赞成票;
- 第二,拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值。
以 3 个哨兵为例,假设此时的 quorum 设置为 2,那么,任何一个想成为 Leader 的哨兵只要拿到 2 张赞成票,就可以了。
新库选择
上面已经选举出了哨兵代表,此时代表需要完成新主库的选择,新库的选择需要满足以下几个标准
- 新库需要处于健康状态,也就是和哨兵之间保持正常的网络连接
- 选择salve-priority从节点优先级最高(redis.conf)的
- 选择复制偏移量最大,只复制最完整的从节点
故障转移
上面一小节哨兵已经选举出了新的主库,故障转移要实现新老主库之间的切换
故障转移流程如下:
哨兵模式优缺点
优点
- 实现了集群的监控,故障转移,实现了高可用
- 拥有主从复制模式的所有优点
缺点
- 集群存储容量有限,容量上线就是主库的内存的大小,无法存储更多内容
配置
# 文件内容
# sentinel1.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 1
# sentinel2.conf
port 26380
sentinel monitor mymaster 127.0.0.1 6379 1
# sentinel3.conf
port 26381
sentinel monitor mymaster 127.0.0.1 6379 1
Cluser 集群
Redis 的哨兵模式实现了高可用了,但是每台 Redis 服务器上存储的都是相同的数据,浪费内存,而且很难实现容量上的扩展。所以在 redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容。
Redis 集群的数据分片
Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:
- 节点 A 包含 0 到 5500号哈希槽.
- 节点 B 包含5501 到 11000 号哈希槽.
- 节点 C 包含11001 到 16384号哈希槽.
这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我想移除节点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态
Redis提供了主从、哨兵、cluster等三种集群模式,其中cluster模式为目前大多数公司所采用的方式。
官方推荐,Cluser 集群至少要部署 3 台以上的 master 节点,最好使用 3 主 3 从。.
但是,redis的cluster模式,有不少的硬伤。redis cluster采用虚拟槽的概念,把所有的key映射到 0~16383个整数槽内,属于无中心化的架构。但它的维护成本较高,slave也不能够参与读取操作。它的主要问题,在于一些批量操作的限制。由于key被hash到多台机器上,所以mget、hmset、sunion等操作就非常的不友好,经常发生性能问题。
redis的主从模式是最简单的模式,但无法做到自动failover,通常在主从切换后,还需要修改业务代码,这是不能忍受的。即使加上haproxy这样的负载均衡组件,复杂性也是非常高的。哨兵模式在主从数量比较多的时候,能够显著的体现它的价值。一个哨兵集群,能够监控成百上千个集群,但是哨兵集群本身的维护是比较困难的。幸运的是,redis的文本协议非常简单,在netty中,甚至直接提供了redis的codec。自研一套哨兵系统,加强它的功能,是可行的。
配置
配置文件内容如下,6 个配置文件信息基本相同,编辑好一份后其他文件直接复制修改端口即可
# 端口
port 7001
# 启用集群模式
cluster-enabled yes
# 根据你启用的节点来命名,最好和端口保持一致,这个是用来保存其他节点的名称,状态等信息的
cluster-config-file nodes_7001.conf
# 超时时间
cluster-node-timeout 5000
appendonly yes
# 后台运行
daemonize yes
# 非保护模式
protected-mode no
pidfile redis_7001.pid
功能性需求
redis还能玩很多花样。举个例子,全文搜索。很多人都会首选es,但redis生态就提供了一个模块:RediSearch,可以做查询,可以做filter。
但我们通常还会有更多的需求,比如统计类、搜索类、运营效果分析等。这类需求与大数据相关,即使是传统的DB也不能胜任。这时候,我们当然要把redis中的数据,导入到其他平台进行计算啦。
如果你选择的是redis数据库,那么dba打交道的,就是rdb,而不是binlog。有很多的rdb解析工具(比如redis-rdb-tools),能够定期把rdb解析成记录,导入到hadoop等其他平台。
此时,rdb成为所有团队的中枢,成为基本的数据交换格式。导入到其他db后的业务,该怎么玩怎么玩,完全不会因为业务系统选用了redis就无法运转。
相关文章:

Redis实战宝典:从主从模式、哨兵模式、集群模式一步步理解Redis集群
目录标题 Redis 集群的三种模式主从复制主从复制概念主从复制原理主从复制优缺点 哨兵集群哨兵概念哨兵功能下线判断主库选举故障转移哨兵模式优缺点 Cluser 集群Redis 集群的数据分片 Redis 集群的三种模式 在生产环境中,我们使用 Redis 通常采用集群模式…...

828华为云征文|华为云Flexus X搭建借贷管理系统、二次开发借贷小程序 前端源码uniapp
在华为云828 B2B企业节的盛宴中,Flexus X实例以其卓越的算力性能和灵活的资源配置脱颖而出。对于追求极致性能、渴望在借贷管理、电商交易等场景中脱颖而出的您来说,Flexus X无疑是最佳拍档。搭载创新加速引擎,让您的自建MySQL、Redis、Nginx…...

网站安全需求分析与安全保护工程
网站安全威胁与需求分析 网站安全概念 网站:是基于B/S技术架构的综合信息服务平台,主要提供网页信息及业务后台对外接口服务。 网站安全性: 机密性:网站信息及相关数据不被授权查看或泄露完整性:网站信息及数据不能…...

后谷歌时代
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

【CMake编译报错小复盘】CMAKE_CUDA_ARCHITECTURES,CMake version,GCC version问题
今天在写大模型量化推理框架时遇到了一些编译上的错误,简单复盘一下问题和解决方案: 问题1:CMAKE_CUDA_ARCHITECTURES 报错信息: CMake Error: CMAKE_CUDA_ARCHITECTURES must be non-empty if set cmake和cuda相关的报错通常都…...

PMP--一、二、三模--分类--14.敏捷--技巧--DoDDoR
文章目录 技巧DoD&DoR 二模14.敏捷--术语表--完成的定义DoD--Definition of Done--是指一个项目什么时候可以被认为是“完成”的标准,它可以包括各种质量和功能的具体要求。--它是团队需要满足的所有标准的核对单,只有可交付成果满足该核对单才能视为…...

【大数据】如何读取多个Excel文件并计算列数据的最大求和值
导语: 在数据分析和处理中,我们经常需要从多个Excel文件中提取数据并进行计算。本文将带您通过一个实用的Python教程,学习如何读取D盘目录下特定文件夹内的多个Excel文件,并计算特定列数据的最大求和值。 文章目录 一、准备工作二…...

【运维项目经历|043】上云项目-服务从物理机迁移到AWS云服务器
🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 文章目录 项目名称项目背景项目目标项目成…...

【OpenCV】灰度化和二值化处理图像
文章目录 1. 图像灰度化处理对比2. 代码示例3. 二值化处理 1. 图像灰度化处理对比 2. 代码示例 #include <opencv2/opencv.hpp> using namespace cv;int main() {Mat currentImage imread("path_to_image.jpg"); // 读取彩色图像Mat grayImage;// 将彩色图像…...

【生命不息,动出奇迹!】多系统萎缩患者必看
亲爱的朋友们,当我们面对生活的挑战,尤其是像多系统萎缩(MSA)这样的复杂疾病时,保持乐观与积极,寻找适合自己的锻炼方式显得尤为重要!💪 MSA虽然会影响身体的多个系统,包…...

Verilog FPGA 仿真 控制任务
在Verilog仿真中,我们可以使用一些控制语句和系统任务来管理仿真过程。这些语句和任务可以帮助我们控制仿真的进行并输出必要的信息。 1. $stop:这是一个系统任务,用于停止运行仿真。在ModelSim中,可以继续仿真。 2. $stop(n)&…...

在Vision Pro上实现五子棋、益智休闲游戏:一个可二次开发的框架
苹果Vision Pro平台的推出,空间计算技术迎来了新的发展机遇。在这一背景下,物流游戏(Logistics Game)作为一个为Vision Pro平台量身打造的空间计算战略游戏,不仅展示了空间计算的魅力,也为开发者提供了一个可参考的框架。本文将介绍物流游戏的核心玩法,并总结其开发过程…...

使用 `Vitesse Uni App` 创建微信小程序并配置 uview-plus 和 alovajs
使用 Vitesse Uni App 创建微信小程序 Vitesse Uni App:https://vitesse-docs.netlify.app/ UI:https://uview-plus.jiangruyi.com/components/intro.html 编辑器:VScode 安装 Volar(Vue Offices)插件 创建项目 pnpm …...

C#迭代器和接口IEnumerable,IEnumerator
一.迭代器 学过C的都知道,迭代器是STL中的一个类,用来遍历容器。 vector<int>::iterator iter; for (iter v1.begin(); iter ! v1.end(); iter) C#中迭代器也是用来遍历集合,本质上是一个类/接口(IEnumerator),可以解决…...

通信工程学习:什么是IP-CAN(IP连接接入网)
IP-CAN:IP连接接入网 IP-CAN(IP连接接入网)是一个通过IP实现用户设备(UE)与IP多媒体子系统(IMS)实体之间连通的网络实体和接口的集合。以下是对IP-CAN的详细解释: 一、定义与概述 1…...

使用 MongoDB 构建 AI:Patronus 如何自动进行大语言模型评估来增强对生成式 AI 的信心
大语言模型可能不可靠,这几乎算不上头条新闻。对于某些用例,这可能会带来不便。而对于其他行业,尤其是受监管行业,后果则要严重得多。于是,业内首个大语言模型自动评估平台 Patronus AI 应运而生。 Patronus AI 由 Met…...

openpose1.7.0编译 cuda12.2 cudnn 8.9.7.29 python3.7
参考链接: openpose(windows11)安装及常见问题及解决方案_openpose windows-CSDN博客 openpose笔记--Win11编译安装OpenPose(Python API)_openpose安装-CSDN博客 https://zhuanlan.zhihu.com/p/383661308 遇到问题: 1、cmake时,手动设置…...

【华为OD流程】性格测试选项+注意事项
可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练(备注【CSDN】否则不通过) 文章目录 相关推荐阅读性格测试形式性格测试题型性格测试原则性格测试一致性性格测试选项举例最合适的性格适中的性格不适合的性格答题方法分享特别注意华为OD算法/大厂…...

《生物学教学》
《生物学教学》杂志是由国家教育部主管、华东师范大学主办,向国内外正式发行的全国教育类核心期刊。主要栏目有:生物科学综述、课程标准与教材、当代教育论坛、国外教育动态、教师教育、教育教学研究、教学设计案例、信息技术、考试与评价、实验教学、探…...

C++ 标准库的典型内容
目录 C 标准库的典型内容1. std::declval定义使用方法常见用途注意事项 2. std::true_type 和 std::false_type定义使用方法常见用途注意事项 3. std::void_t定义使用方法常见用途注意事项 4. std::conditional定义使用方法常见用途注意事项 5. std::function定义使用方法常见用…...

【C++初阶】:C++入门,引用概念及其性质
文章目录 一、引用的概念二、引用的语法规则1、引用特性2、常引用 二、引用的使用场景1. 引用做参数2. 引用做返回值 三、引用和指针的区别 一、引用的概念 首先明确一下,引用不是定义一个新的变量,而是给已经存在的变量起一个别名,变量和他…...

Linux 中的 crontab 命令介绍以及使用
文章目录 Linux Crontab 完全指南什么是 Crontab?Crontab 文件的基本格式特殊符号解释: 如何使用 Crontab查看当前用户的 Crontab编辑 Crontab删除 Crontab Crontab 示例每天晚上 12 点备份数据库每个工作日的早上 9 点发送日报每隔 15 分钟清理临时文件…...

单片机组成原理
大纲 C语言指针如何与硬件对应 底层疑问的源头 我已造好轮子,等你来理解 外设电路大概是什么结构 解决底层开发中关于配置、寄存器) 外设电路的疑问 从此可以快速上手新的单片机、新的外设芯片 对外设芯片的内部结构有本质理解,看手册不再是问题 固件库…...

《机器学习》—— SVD奇异值分解方法对图像进行压缩
文章目录 一、SVD奇异值分解简单介绍二、代码实现—SVD奇异值分解方法对图像进行压缩 一、SVD奇异值分解简单介绍 SVD(奇异值分解)是一种在信号处理、统计学、线性代数、机器学习等多个领域广泛应用的矩阵分解方法。它将任何 mn 矩阵 A 分解为三个特定矩…...

英文文本预处理——文本清理
文本清理定义 文本清理是英文文本预处理的重要步骤,旨在提高数据质量和一致性。以下是文本清理的具体内容: 去除标点符号 (Removing Punctuation): 删除文本中的标点符号,如句号、逗号、问号等。这一步骤有助于减少文本噪音,使得文本分析更加专注于有意义的词汇内容。 去…...

Spring Boot 注解探秘:常用配置值读取注解的魔力
在 Spring Boot 应用开发中,我们会常常借助Apollo,Spring Cloud Config等配置中心来集中管理配置信息,在拥有配置信息之后,高效且准确地读取这些配置信息无疑是极为关键的一环。今天我们就来介绍几个常用的用于配置值读取的注解。…...

Ps初步使用教程
1.画面快捷键 Ctrl鼠标滚轮:画面左右移动 Shift鼠标滚轮:画面上下快速移动(不加Shift正常速度移动) Alt鼠标滚轮:画面大小缩放 2.工具快捷键 ShiftG:渐变、油漆桶、3D材质施放 切换 CtrlO:…...

远程连接Hiveserver2服务
目录 1.修改 core-site.xml 和 hive-site.xml 的配置文件 2.启动HiveServer2服务 3.启动Beeline工具连接Hiveserver2服务 4.利用IDEA工具连接Hiveserver2服务 完成Hive本地模式安装后,可以启动hiveserver2服务进行远程连接和操作Hive。 1.修改 core-site.xml …...

PDF样本图册转换为一个链接,随时打开无需印刷
想象一下,您手中有一本厚重的样本图册,里面包含了丰富多样的内容,如产品介绍、项目方案、学术论文等。在过去,您需要逐一翻阅、筛选,甚至为了便于查看,不得不将其印刷出来。如今,借助先进的数字…...

自己动手实现mybatis的底层框架(不用动态代理直接用执行器、用动态代理自己实现。图文分析!)
目录 一.原生mybits框架图分析 自己实现Mybatis框架的分析 两种框架操作数据库的方法: 二.搭建开发环境 1.先创建一个maven项目 2.加入依赖(mysql dom4j junit lombok) 三.mybatis框架的设计思路 具体实现过程 3.1实现任务阶段 1- 完成读取配置文件&#x…...