Redis再战之AKF、CAP、哨兵机制《七》

记录一下本地部署Dify的坑 1. 截止2025-3-4为止,请注意,不要直接拉Dify的1.0.0版本。请先试用0.15.3版本。1.0.0有一个bug需要解决。3. 请使用docker-ce 新版本,docker-engine等老版本可能会有部分容器启动脚本执行莫名报错。2. 注意,请使用docker-compose V2版本,或者V1较高版本,否则会导致解析官方yml模板错误。 阅读详情

AKF

AKF扩展立方体(Scalability Cube),是《架构即未来》一书中提出的可扩展模型,这个立方体有三个轴线,每个轴线描述扩展性的一个维度,他们分别是产品、流程和团队:
X轴 —— 代表无差别的克隆服务和数据,工作可以很均匀的分散在不同的服务实例上;
Y轴 —— 关注应用中职责的划分,比如数据类型,交易执行类型的划分;
Z轴 —— 关注服务和数据的优先级划分,如分地域划分。

运行一个redis实例会有哪些问题

  • 单点故障
  • 容量瓶颈
  • 访问压力

解决问题
在这里插入图片描述

  • x轴:在x轴方向上,做N个主机的全量镜像数据的副本,主redis与这些副本的关系为主从。主机可以对外提供read / write ,从机可以对外提供read(读写分离)。结合高可用, 可以解决单点故障和容量瓶颈的问题,只是解决了 read 的压力,而没有解决 write 的压力。
  • y轴:在y轴方向上,可以把之前一台redis中的数据按照业务功能来拆分成不同的redis实例存储,并且每个redis实例都可以再次做x轴的镜像副本进行读写分离,当然,x轴和y轴之间不是必须要结合使用。y轴的拆分解决了容量瓶颈问题和数据访问压力的问题。
  • z轴:如果y轴的某个redis实例过于臃肿,还可以把这个redis实例进行z轴的拆分,也就是把这个redis实例里面的数据按照一定规则查分。比如:取模,优先级等规则再次查分成多个redis,使得不同的数据出现在固定的redis里。

问题: 如何解决数据一致性问题

数据一致性(主从复制原理)

强一致性

所有节点同步阻塞,直到数据全部一致。

  • 引发问题:
    如果其中一台slave挂掉或者网络波动引起超时,即使其他salve都返回写入成功给master,master也会认为所有从机都写入失败,进而都进行回撤,最终客户端会认为写入失败。写入失败代表服务不可用,所以数据强一致性会破坏可用性!

为什么我们要把单机一变多为集群?

  • 就是单点故障,解决可用性的问题。但是强一致性中,只要其中一台机器出现异常,就会导致整个模块不可使用,问题又回到了原点。
  • 解决办法 : 给强一致性降级,采用异步的方式,容忍丢失一部分数据,就是弱一致性。

弱一致性

  • master收到Client命令直接返回给客户端ok,
  • master会异步的通知两个slave写操作,如果两个slave挂了导致写入失败,master也挂了。再重启之后slave就拿不到之前的master的写操作了,等于丢了一批数据。

问题: 如何解决数据丢失问题?
最终一致性(扯远了)

最终一致性

在这里插入图片描述

  • 在master和slave之间,添加一个可靠、响应速度够快 的 集群(比如:kafka),master到kafka之间为同步阻塞状态。master在写入的时候并没有直接通知两个slave,而是通知kafka,由kafka通知两个slave。如果master和kafka之间能够足够快的写入响应成功的话,就可以直接给Client返回OK了。
  • 只要最终两个slave从kafka中取到数据,那么最终两个slave就会和master的数据达成一致,数据就不会丢失。

问题: 最终一致性:master和slave之间维护一个可靠的集群。
但是一个客户端从一个黑盒化的集群中取数据。有可能会从master取到,也有可能从slave中取到,在slave和master数据最终达成一致之前,有可能取到不一致的数据。

CAP

CAP理论指的是一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项

在这里插入图片描述

  • 主备:Client只能访问master,不会访问slave。slave就是为了master挂了后接替master,使Client能够从新的master拿到数据,slave是不会参与业务的。
  • 主从:Client可以访问master,也可以访问slave。

主从集群搭建

老版用法
help slaveof

#新版用法
help replicaof

replicaof 127.0.0.1 6379

redis-server ~/test/6381.conf --replicaof 127.0.0.1 6379			
//开启了aof,会导致6379发送全量rdb给6381
redis-server ~/test/6381.conf --replicaof 127.0.0.1 6379	--appendonly yes 

配置文件中配置主从复制:

1. replicaof <masterip> <masterport> : 配置master的ip和端口
2. masterauth <master-password> :访问master的密码
3. replica-serve-stale-data yes : 在slave启动时,如果master中的数据量很大,在数据传输过程中,slave中的老的数据对外暴露,如果值为 no 需要同步完才能对外提供服务 。
4. replica-read-only yes :yes表示salve只读;no表示slave支持写入。
5. repl-diskless-sync no : 如果为yes,表示直接走网络发送RDB。
6. repl-backlog-size 1mb : 在master里会维护一个消息队列缓存临时写入的数据,salve如果挂掉后又启动了,master可能会有一个数据的增量,slave可以重新在master里面拿一份RDB恢复数据,也可以用RDB文件给master一个offset,从master队列中根据offset取出增量的数据恢复,这个配置的1mb就是设置这个队列的大小,如果master访问量大,把slave给出的offset对应的数据挤出,那么slave是无法恢复被挤出的数据的,这个时候就触发一个全量的RDB。
7. min-replicas-to-write 3:要求有三个健康的slave,master才能写成功。
8. min-replicas-max-lag 10:延迟小于min-replicas-max-lag秒的slave才认为是健康的slave

总结:

  • 主从复制搭建,可以在slave中使用replicaof 命令追随master。
  • master对外提供全量读写,slave对外提供读。
  • slave挂了可以直接重启,如果以前有追随master记录,那么就不会发生全量rdb。但是开启了aof就一定会发生全量rdb传输。

问题: 那么master挂了怎么办? 答案:哨兵机制。

哨兵机制(过半机制)

多个哨兵根据过半原则监控redis是否活着进行裁决
在这里插入图片描述

#建立三个配置文件26379.conf,26380.conf,26381.conf 
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2

port 26380
sentinel monitor mymaster 127.0.0.1 6379 2

port 26381
sentinel monitor mymaster 127.0.0.1 6379 2

redis-server 6379.conf
redis-server 6380.conf --replicaof 127.0.0.1 6379
redis-server 6381.conf --replicaof 127.0.0.1 6379

redis-server 26379.conf --sentinel
redis-server 26380.conf --sentinel
redis-server 26381.conf --sentinel

/*哨兵能自动发现master上面有哪些slave,因为master被slave追随的时候 master就能收到slave的信息,所以哨兵监控master就能知道有哪些slave.但是底层是如何实现的呢?*/

哨兵之间通信的原理?

在这里插入图片描述

  • 哨兵使用了redis自带的发布订阅功能,哨兵会去监控master拿到两个slave分别是谁,同时在存活的master开启发布订阅发现其他的哨兵。
英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心 本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。 阅读详情

相关推荐

从零到一:KUKA机械臂与ROS的工业级通讯协议深度解析

本文深度解析KUKA机械臂与ROS的工业级通讯协议,重点对比EKI与RSI两种核心接口的技术特点与应用场景。详细介绍了网络架构设计、数据包解析机制及ROS-I集成方法,并提供实时性能优化与故障排除策略,为工程师实现高可靠性工业自动化集成提供完整解决方案。

2a4s6d8f0g的博客 296

AKF扩展立方体

本文节选自《高扩展性网站的50条原则》 如何通过克隆和复制、拆分功能或服务以及把相似的数据集分布到存储和应用系统中,从而扩展数据库和服务。只要利用本文介绍的这三种方法,几乎任何系统或数据库都可以无限扩展。这里用方法这个词有点牵强,但是根据我们为上百家公司、几千个数据库和系统服务的经验来看,这些技术还没有失败过。为了使这三种扩展方法更形象,我们采用AKF扩展立方,它是我们为了展示这三种扩展系统的方...

AscendentJava的专栏 6155

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5388

redis的三种模式以及涉及到的CAP理论

Redis的三种模式 一、cluster的架构变化 1、单机redis:redis单机模式,保证了数据的一致性而牺牲了可用性,即不能够实现高可用,只是保证了用户可以看到相同的数据和当网络通信出问题是能够保证隔离的子系统能够继续运行,因为在单机模式中master与slave之间不存在通信问题 所以当master节点挂掉以后子节点不能保证能够正常的提供服务 2、哨兵redis:哨兵在单机redis上做了些许改动增加一个sentinel也就是哨兵来实现redis的可用性,让单机的redis的master和slav

weixin_56503821的博客 5365

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 401

高分影像批处理第三回——RPC文件与几何校正

前言 前面两章部分完成了图像的基本组织和大气校正,可是对于遥感影像地理相关数据,精确的地理坐标也是非常关键的。L1级数据,可惜,并没有帮我们处理地理坐标系统。无论是打开ENVI还是用gdal工具查看图像元数据,其坐标系统都是错误的或者说是未读入的。因此本章节来解决这个问题。

weixin_43762038的博客 1万+

redis(一):CAP简介和常用数据类型的操作命令

1.CAP简介 CAP定理又称CAP原则,指的是在一个分布式数据库系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得。简单理解就是CAP的3进2. CAP区别与sql数据库事务的ACID特性,一般适用于多种类型的数据库系统中。 Consistency(一致性):或者强...

jialiang的博客 1322

X猫免费小说安卓逆向分析

七猫免费小说安卓逆向分析 难度(♥♥) 文章目录七猫免费小说安卓逆向分析 难度(♥♥)1. 查壳2. 抓包分析3. sign1. Frida-rpc2. Native函数分析快3点了. 睡觉~ 白天再继续写! 1. 查壳 我这边使用的是ApkTool, 拖进去显示未加壳。 2. 抓包分析 POST https://xiaoshuo.wtzw.com/api/v1/login/index HTTP/1.1 net-env: 1 channel: qm-cbcpa056_wm is-white: 0 platf

Qiled的博客 4366

Redis与CAP定理—理解数据存储的权衡

在分布式系统的设计中,理解CAP定理的重要性是不言而喻的。CAP定理指出,一个分布式系统不可能同时完全满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。Redis作为一个广泛使用的键值存储系统,其在这三个方面的权衡尤其值得关注。本文将深入分析Redis如何应对这些挑战,并通过实际案例来说明这些权衡。Redis提供了多种配置选项,使得用户可以根据自己的具体需求在CAP三要素之间做出适当的权衡。

hello.reader 1660

实战!C#整合YOLO+Halcon做玻璃瓶口缺陷检测:裂纹识别+尺寸测量一步到位(附DLL交互代码)

AI擅长语义识别(裂纹、缺陷),传统机器视觉擅长精密测量(尺寸、位置),C#做整合层,才能满足工业生产的“精度+效率+稳定性”要求。这套方案不只是玻璃瓶检测能用,改改模型和测量逻辑,还能用到瓶盖缺陷检测、饮料瓶液位检测等场景。如果你们厂也有类似的质检痛点,评论区留个言,我帮你看看怎么调整算法参数。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 868

视频理解与处理——OpenClaw视频能力深度解析(2026视频版)

本文介绍了OpenClaw视频理解与处理的核心技术,重点分析了视频预处理流程。通过VideoProcessor类实现视频加载、帧采样、尺寸调整和归一化等基础处理功能,支持本地和在线视频源处理,为后续视频分析任务提供标准化输入。预处理模块采用均匀采样和标准化方法优化视频数据,确保动作识别、场景分析等高级应用的准确性,展现了OpenClaw强大的视频处理能力。

一键难忘的博客 464

(六)redis的集群:主从复制、CAP、PAXOS、cluster分片集群01

回顾:redis单机单线程 作为缓存,有RDB就够了,即使挂掉了恢复快,丢失了一小时的数据,也不过是穿透了,访问到了数据库。 作为数据库,为了不丢失数据,必须使用AOF。 单机的问题 1,单点故障 2,容量有限 3,压力 AKF 是微服务拆分的四个原则的第一项,实现的是一变多,但会引入新的问题:数据一致性。 X:全量,镜像 (主备 ),只能解决单点故障的问题 Y:单台有10G数据,但redis只有4G。按业务逻辑,功能拆分数据到多台redis上。 Z:基于一个优先级逻辑按编号拆分。 数据一致性:写的时候阻塞

阿昊的博客 628

解锁PyCharm+Deepseek:本地部署AI编程超能力

在本次探索中,我们成功地在 PyCharm 中实现了 DeepSeek 的本地化部署,这一过程虽然涉及多个步骤,但每一步都为我们开启 AI 编程大门奠定了基础。从安装最新版 PyCharm,确保我们拥有一个功能强大且兼容性良好的开发环境,到注册 DeepSeek 账号并获取 API Key,这是连接我们与强大 AI 能力的关键纽带。接着,在 PyCharm 中安装 Continue 插件并进行精细配置,让 DeepSeek 能够深度融入我们的编程流程。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 5548

Redis实战(六):Redis的集群:AKF,主从复制的概念引入,CAP,Sentinel 哨兵

单击、单节点、单示例存在的问题 单点故障(物理机挂了,要等很久才能可用) 容量有限 压力过大 解决方式 AKF 有XYZ三个轴,可以只发生一个,可以多个维度一起发生 X轴:Redis示例的副本,数据库的副本…读写分离,增加备用性,解决单点故障的问题,全量镜像,不能解决容量有限的问题 Y轴:对要存的数据按照不同的功能业务拆分,不同类别的数据分开存储,客户端实现指定查询哪个库,解决容量有限的问题 Z轴:在按照业务拆分的前提下,如果又存不下了,可以基于一定的规则,将一个业务将数据再拆分,存储到不同的库里。 数

寒泉 7万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

8.Redis- 集群:AKF拆分(y轴和z轴),twemproxy,predixy,cluster

Redis- 集群:AKF拆分,CAP,主从复制,哨兵机制

xi_rurensheng的博客 1514

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Redis主从复制 AKF

Redis主从复制 文章目录Redis的数据一致性Redis高可用 Redis的数据一致性 单机Redis会带来哪些问题 单点故障问题 容量有限问题 (IO、CPU)压力 利用AKF理论解决上述的问题,分别从XYZ三个轴解决问题。 X轴:是进行全量的复制,相当于镜像的功能,解决了单点故障,并分担了主机压力。 Y轴:安装业务、功能进行区分。解决了容量的问题。 Z轴:按照优先级再拆分。如果按照Y轴redis的容量还不够,那么再进行全量的复制,也就是对业务的redis执行全量的镜像功能。 但是,通过AKF

qq_40223516的博客 392

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

redis的使用(二)

redis分布式锁:setnx锁,为了阻止并发到达数据库,使用分布式锁,首先,get key,为空加锁setnx,获得锁的去访问数据库,获得锁失败的sleep之后再get key重复上述过程,存在的问题是获得锁的挂了,就会出现死锁,解决办法可以设置锁的过期时间,另一个问题是没有挂但是锁超时了,解决办法是使用多线程,一个线程访问数据库,一个线程检查value是否取回来,更新锁时间。X轴:可以使用多节点Redis,水平复制多个副本,是主Redis的全量镜像,解决了单点故障问题,单不能解决容量有限问题。

a_belle的博客 60

听马士兵讲redis笔记四 REDIS 主从复制 哨兵

一、集群方式 AKF x轴方向多进程,y轴方向分业务,Z轴方向复制X,Y轴方向 二、数据一致性 通过AKF 三、为了提供主设备的高可用性,即主从设备无缝切换,需要增加自动监控程序 四、监控程序需要建立势力关系,也就是需要通过quorum机制,进行投票,人数多的决定就是正确的,百度一下CAP原则 五、CAP原则 CAP原则又称CAP定理,指...

caofengtao1314的专栏 499

眼看拿到50万年薪,没想到死在了redis多线程问题上

做为技术人,从程序员到架构师,要跨越的最大鸿沟是什么? 我认为是架构设计能力。 代码能力的培养,可以从教材入手,通过自学基本就能掌握,但架构设计能力的培养相对就要难很多了。 以前的架构师成长更多是通过师傅带徒弟,口口相传。随着在线教育的发展,行业大咖的体系化培训,正在加速架构师的成长。 互联网面试题更新了!随便呈上几道,看看大家能否答出来: (0)redis为什么是key,value...

javajavajava 2908

Redis的集群

Redis集群产生的原因: Redis单机产生的问题 1.单机故障 2.容量有限 3.socketIO的压力 从而引出AKF 当客户端在取redis中的数据时,会产生redis备用机还没有同步数据的问题 当主机挂掉后,从机不能进行工作,没有实现高可用 引出监控 监控数量为单数,因为双数和单数可挂掉的服务器数量一致,双数发生风险的概率更高,所以使用单数台监控 CAP定理 1.可用性 2.一致性 3.分区容错性:允许一些分区挂掉,只要某部分得到的数据准确 不可能三项都满足 在完成绝对一致性时,不可能完

sam475259540的博客 135

redis集群篇一:主从复制以及哨兵

redis集群搭建redis集群相关了解背景一、集群知识背景了解二、单机redis的局限三、redis集群:主从复制操练主机故障需要人为干预维护注意事项搭建过程遇到问题小结四、redis哨兵 redis集群相关了解背景 一、集群知识背景了解 cap规则:只能满足其中两个(ca,cp,ap),不可能同时三个都满足(c 一致性,a 可用性,p 分区容错性),想全面了解可以查下百度:cap 理论 二、单机redis的局限 单点故障 容量有限 连接数压力 为了解决以上问题,可通过akf的拆分思想 解决或缓解re

小浪与艳花 818

答错这道题让我和50万年薪擦肩而过,redis到底多线程还是单线程

互联网面试题更新了!随便呈上几道,看看大家能否答出来:(0)redis为什么是key,value的,为什么不是支持SQL的?(1)redis是多线程还是单线程?(回答单线程的请回吧,为什...

架构文摘 345

Redis [5] Redis开放式问题

针对网上Redis常见问题的思考 实际情况中 面试者不会这么提问。 如有错误 欢迎私信交流 1.redis为什么是key,value的,为什么不是支持SQL的? Redis 本身设计思想就是 key-value 底层数据结构,数据持久化只是支持 key-value Redis 本身方向是共享内存数据,SQL 语句更多是查找硬盘的数据。 个人理解: Redis是这个名字本就是是Remote Dictionary Server的缩写。 Redis的作者是antirez,最早创建Redis的目的就是用作缓存,加速

keep_learn的专栏 215

redis大纲

常识(磁盘、内存、IO) 数据储存的发展进程 数据库引擎介绍 redis介绍 redis安装 epoll介绍(IO模型) redis原理 redis的key redis的value redis管道pipeline的使用 发布订阅 事务 redis的model、bloom布隆过滤器 redis作为缓存使用 redis持久化机制 linux管道 redis中fork() 写入时复制copy on write RDB、fork()、copy on write redis中RDB、AOF redis中AKF原理 .

draymond7107的博客 217

Redis 分区之如何把数据存储到多个Redis实例中

回顾 redis中的AKF理论和CAP理论详解中我们知道redis可以从xyz三个方向进行扩展,前面我们通过主从复制可哨兵机制解决了redis的高可用,没有解决容量有限问题,这篇文章主要对redis集群的理论知识进行分享 客户端拆分业务 如果数据交集比较少, 我们可以把业务进行拆分,比如:我们可以把用户信息放到redis-1中,订单放到redis-2中,如图: 弊端:如果用户信息数据量比较大,一个实例承载不下,数据分析有限,怎么办?如果业务耦合比较严重,数据交集比较多,这种方案肯定是不合适的。 按算法拆分

weixin_45239670的博客 2553

简历模板1

对于大学生、实习生、经验不多的学生,要展示的是你的学习能力和态度对技术有热情,深入研究过XXX、XXX等技术、leetcode有多少题目的储备、做过哪些教研室的项目,获得了什么成长,自己私下怎么学习技术的,阅读过哪些书籍,看过哪些github的项目,做过哪些博客的积累。展示你的行业背景和技术经验,比如做过什么行业的项目,提出过什么技术解决方案,接触过多大数据量的项目对那些技术有深入研究,阅读过哪些技术类的书籍,做过哪些博客的积累,热爱工作,沟通能力强,责任心强。公司名称 职位 时间。

weixin_42725397的博客 1011
上一篇: Redis再战之持久化 rdb 和 aof《六》
下一篇: redis再战之AKF的Z轴拆分和代理集群搭建《八》
漂吧
博客等级 码龄8年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值