Redis 系列(十):高可用(一)——主从复制与哨兵
核心目标理解主从复制的原理全量/增量同步、replicationid 与 offset与数据一致性边界理解哨兵如何实现监控、客观下线与自动故障转移部署一主一从一哨兵环境并完整演练一次主库宕机与旧主归队。前置知识完成 Part 5RDB——全量同步的载体与 Part 9主从切换丢锁的机制基础。验证环境Redis 8.10.0cygwin 移植版主库 6380、从库 6381、哨兵 26379 均为隔离实例故障注入在隔离环境进行。最后复核日期2026-08-07。0. 本篇问题场景单机 Redis 的三个单点机器宕机唯一的主库挂了服务全部不可用恢复靠重启持久化数据丢了主库磁盘损坏RDB/AOF 跟着没——持久化救不了机器没了读瓶颈QPS 高到单机 CPU 饱和加内存加机器都没用单线程。主从复制解决读扩展 数据冗余哨兵解决主库挂了自动切换。本篇先把复制讲透再演练一次完整的故障转移。1. 主从复制一主多从1.1 配置与角色# 从库配置一行即可redis-server--port6381--replicaof127.0.0.16380# 或运行时REPLICAOF127.0.0.16380部署后的角色实测INFO replication# 主库 6380 role:master connected_slaves:1 master_repl_offset:422 # 从库 6381 role:slave master_host:127.0.0.1 master_port:6380 master_link_status:up slave_repl_offset:422 ← 与主库 offset 一致 无延迟复制生效验证写主读从$ redis-cli -p 6380 SET product:1 机械键盘 OK $ redis-cli -p 6381 GET product:1 机械键盘1.2 同步机制全量 增量从库主库从库主库之后进入增量同步M 实时推送新命令PSYNC ? -1首次无历史BGSAVE 生成 RDB传输 RDB全量同步期间新写命令进 repl_backlog加载 RDB补发 backlog 中的增量命令两个关键概念概念作用replicationid主库的身份标识从库复制后继承repl_backlog主库的环形缓冲区存最近 N 字节写命令——断线重连时靠它做增量同步从库断线后重连如果断线期间产生的增量仍在 backlog 内 →部分同步只补发缺口如果断开太久、backlog 已覆盖不到 → 退化为全量同步重新传 RDB。全量同步的代价随数据量增长生产要监控repl_backlog_size是否够大。1.3 复制的一致性边界重要异步复制主库写命令先执行后传播从库有一定延迟——master_repl_offset与slave_repl_offset的差值就是延迟Part 12 会监控它从库可读但可能旧从库默认replica-read-only yes读从库拿到的是主库某时刻之前的数据过期键删除动作只由主库发起Part 6从库收到DEL才删——读从库可能在 TTL 之后短暂读到已过期键replica-serve-stale-data默认放行主库未开持久化 高危主库宕机重启后数据为空从库会同步到空生产必须主库开持久化或保证从库优先。2. 哨兵 Sentinel自动故障转移2.1 哨兵做什么哨兵是独立的 Redis 进程--sentinel对主库做四件事监控每 1 秒向主库/从库发 PING通知状态变化通知管理员/客户端自动故障转移主库不可用时选一个从库提升为新主配置中心客户端问哨兵当前主库是谁。2.2 下线判定与故障转移流程主观下线sdown单个哨兵 PING 超时down-after-milliseconds 客观下线odown达到 quorum 个哨兵都认为 sdown 选举 leader哨兵集群投票选一个执行故障转移的 leader 故障转移 1. 选一个从库优先级高、复制进度新 2. 对从库 REPLICAOF NO ONE 提升为主 3. 通知其他从库转向新主 4. 旧主恢复后自动降级为从库2.3 实测完整故障转移演练部署主 6380 从 6381 哨兵 26379quorum 1、down-after-milliseconds 3000。第一步——强杀主库$ taskkill /F /PID 19420 成功: 已终止 PID 为 19420 的进程。第二步——等待哨兵检测与切换约 8 秒$ redis-cli -p 26379 sentinel get-master-addr-by-name mymaster 127.0.0.1 6381 ← 哨兵已把新主指向 6381 $ redis-cli -p 6381 info replication role:master ← 原从库被提升为新主 connected_slaves:0第三步——新主可写$ redis-cli -p 6381 SET order:1001 paid OK第四步——旧主恢复归队$ redis-cli -p 6380 REPLICAOF 127.0.0.1 6381 OK $ redis-cli -p 6381 info replication role:master connected_slaves:1 ← 旧主已作为从库归队切换期间的代价从主库宕机到新主可写客户端有约检测时间 选举 提升的不可写窗口本实验约 5-8 秒期间写请求会失败应用需重试/排队。数据丢失窗口 主库宕机时刻尚未复制到从库的写入异步复制的天然延迟Part 5 的丢失窗口在复制场景同样存在。3. 脑裂故障转移的阴暗面网络分区下可能发生主库与哨兵/从库失联但主库自身还活着分区而非宕机。客户端写旧主分区中旧主仍接受写 哨兵判定旧主 o_down → 提升从库为新主 分区恢复 → 旧主归队成为从库 → 分区期间写入旧主的数据因从未复制给任何人而丢失防护配置redis.confmin-replicas-to-write 1 # 主库写请求至少要有 1 个从库在线 min-replicas-max-lag 10 # 从库延迟超过 10 秒视为不在线效果分区期间从库全部失联 → 旧主拒绝写入→ 数据不丢代价是写入短暂失败。这是保数据还是保可用的权衡min-replicas 倾向保数据。4. 客户端接入哨兵应用不直连主库而是问哨兵拿当前主库redis-pyfromredis.sentinelimportSentinel sentinelSentinel([(127.0.0.1,26379)],socket_timeout0.5)mastersentinel.master_for(mymaster,db0,decode_responsesTrue)slavesentinel.slave_for(mymaster,db0,decode_responsesTrue)master.set(k,v)# 读写走主slave.get(k)# 只读走从故障转移后客户端重新向哨兵询问即可拿到新主——应用代码无需感知切换。5. 版本与环境差异差异点说明REPLICAOF5.0 起替代SLAVEOF旧客户端注意复制协议7.x/8.x 均为 PSYNC2支持断线增量同步哨兵sentinel monitor配置在 7.x/8.x 一致quorum建议 ≥ 2生产至少 3 个哨兵cygwin 移植版fork/BGSAVE 行为与 Linux 有细微差异实验环境注明即可6. 测试与验收复制测试写主读从、master_link_status:up、offset 对齐故障转移测试隔离环境强杀主库 → 哨兵提升 → 新主可写 → 旧主归队脑裂防护测试断从库网络/停从库 → 验证min-replicas生效拒绝写。本篇验收清单能画出全量/增量同步的时序并说出repl_backlog的作用能解释replicationid/offset 与部分同步 vs 全量同步的判定能说出复制场景的三个一致性边界异步延迟、从库旧数据、过期键能区分 sdown/odown 与故障转移四步选主、提升、改向、归队能解释脑裂的丢数据场景与min-replicas-*防护的取舍部署过一主一从一哨兵并完成一次故障转移演练。7. 常见误区“从库会自动故障转移”——不会复制只提供冗余自动切换是哨兵的职责。“主库挂了数据一条不丢”——异步复制下未同步到从库的写入会丢丢失窗口 复制延迟§1.3。“主库没开持久化没关系有从库”——主库重启后变空从库会同步成空双输§1.3。“哨兵越多越好”——quorum 与哨兵数量要平衡单哨兵quorum 1能跑但无脑裂裁决能力生产 ≥ 3 哨兵。“脑裂只会丢数据写不进是 bug”——min-replicas的拒绝写正是防止丢数据的主动选择§3。8. 本篇小结复制解决数据有备份、读可扩展代价是异步延迟与一致性边界哨兵解决主库挂了怎么办代价是切换窗口与脑裂风险脑裂防护是保数据 vs 保可用的显式选择。但哨兵仍有上限单主库的写能力、单机内存的容量。数据量或写入吞吐超出单机时需要横向分片——下一篇 Part 11Redis Cluster 讲 16384 个哈希槽、MOVED/ASK 重定向与集群的扩容。9. 官方资料Replication 文档https://redis.io/docs/latest/operate/oss_and_stack/management/replication/Sentinel 文档https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/PSYNC2 复制协议https://redis.io/docs/latest/operate/oss_and_stack/management/replication/

相关新闻

Redis 系列(九):分布式锁与限流——用 Redis 做并发治理

Redis 系列(九):分布式锁与限流——用 Redis 做并发治理

核心目标:掌握分布式锁的正确实现(SET NX EX 持有者标识 Lua 原子释放);理解锁过期、主从切换的失效边界与 Redlock 争议;掌握固定窗口、滑动窗口、令牌桶三种限流算法及其 Redis 实现。 前置知识:完成 P…

2026/8/10 9:29:10 阅读更多 →
Spring Statemachine实现订单状态管理的最佳实践

Spring Statemachine实现订单状态管理的最佳实践

1. 为什么需要状态机? 在开发复杂业务系统时,我们经常遇到需要管理对象状态流转的场景。比如订单从"待支付"到"已支付"再到"已发货",或者工单从"新建"到"处理中"再到"已解决"。…

2026/8/10 9:29:10 阅读更多 →
AI应用Token成本管控实战:从架构优化到监控治理的三层防御体系

AI应用Token成本管控实战:从架构优化到监控治理的三层防御体系

1. 项目概述:当AI的“账本”翻到Token成本这一页 最近和不少企业的技术负责人、产品经理聊天,发现一个挺有意思的现象。大家谈起AI,尤其是大语言模型(LLM),已经从最初的“哇,好厉害”的惊叹&…

2026/8/10 9:29:10 阅读更多 →

最新新闻

做了5年社区公益项目负责人|项目汇报终于不只剩“做了几场活动”

做了5年社区公益项目负责人|项目汇报终于不只剩“做了几场活动”

做社区公益项目的人,应该都经历过这种阶段性汇报:会议开始前,手上已经有活动场次、参与人数、志愿者工时、物资数量、照片、报名表和居民反馈,但真正打开PPT时,还是不知道先讲哪个成果。白天要和社区确认场地&#xff…

2026/8/11 13:16:59 阅读更多 →
JMeter文件上传接口测试实战:从原理到复杂场景全解析

JMeter文件上传接口测试实战:从原理到复杂场景全解析

1. 项目概述:为什么JMeter文件上传测试是面试“送命题”? 最近在带团队新人,也和一些测试圈的朋友交流,发现一个挺有意思的现象:很多有几年经验的测试工程师,简历上写着“精通JMeter接口测试”,…

2026/8/11 13:16:59 阅读更多 →
苏州爱采购运营哪家好?本土优质服务商盘点,首选江苏一网推对接赵小园--企优托

苏州爱采购运营哪家好?本土优质服务商盘点,首选江苏一网推对接赵小园--企优托

当下B2B线上采购市场竞争日趋激烈,沈阳众多工业品、建材、机械设备供应商,常会布局百度爱采购拓宽全国客源;不少扎根沈阳的工厂商家,会优先找寻苏州专业的爱采购运营服务商,依靠成熟代运营团队打理线上店铺,拿下多地工程集采、批量采购订单。很多企业对比多家机构之后,都会疑惑…

2026/8/11 13:16:58 阅读更多 →
园区数字孪生怎么做?开发的关键步骤有哪些?

园区数字孪生怎么做?开发的关键步骤有哪些?

园区数字孪生怎么做?开发的关键步骤有哪些?近年来,园区管理走向数据驱动管理型。园区数字孪生的需求日益旺盛,但很多企业仍面临一个实际问题:数字孪生到底怎么做?是不是成本很高、技术门槛很大?…

2026/8/11 13:16:58 阅读更多 →
Unity热更新安全实战:基于xLua的签名校验完整方案

Unity热更新安全实战:基于xLua的签名校验完整方案

1. 项目概述:为什么热更新安全是Unity项目的生命线在Unity游戏开发圈子里,热更新技术,尤其是基于xLua的方案,几乎是中大型项目的标配。它能让我们绕过漫长的应用商店审核,快速修复线上Bug、发布新活动,甚至…

2026/8/11 13:16:58 阅读更多 →
MySQL关闭慢查询日志

MySQL关闭慢查询日志

一、永久性关闭 (对应是永久性方式打开) 修改my.cnf或my.ini文件。方式1、把[mysqld]下的slow_query_log的值修改为OFF,保存再重启MySQL 服务器。[mysqld] slow_query_log OFF方式2、把[mysqld]下的slow_query_log一项删除或注释掉&#xff…

2026/8/11 13:15:58 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →