【Redis】redis主从哨兵
Redis 主从复制
在访问量极高的场景下,单台 Redis 已难以承载所有请求,且单点故障风险高。通过主从复制,可以实现读写分离、数据备份与高可用。
概念
- 主节点(Master):负责写操作,将数据变更同步给从节点。
- 从节点(Slave/Replica):负责读操作,自动从主节点拉取最新数据。
优势
- 性能提升:读请求分摊到多个从节点
- 数据备份:从节点持有一份完整数据副本
- 读写分离:写入在主节点,读取在从节点
- 提高可靠性:主节点故障后,从节点仍可提供读取服务
搭建主从复制集群
可以用两台机器,也可在一台机器上启动多个 Redis 实例,只需用不同配置文件。
通用配置(主从共用)
requirepass 123456
loglevel notice
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis/redis6379.log"
dbfilename dump.rdb
dir /var/lib/redis-slave6379
bind 0.0.0.0
port 6379
daemonize yes
从节点额外配置
masterauth 123456
replicaof 192.168.100.30 6379
-
先启动主节点,再启动从节点。
-
验证主从状态:
# 主节点 192.168.100.30:6379> info replication role:master connected_slaves:2 ...# 从节点 192.168.100.200:6389> info replication role:slave master_host:192.168.100.30 master_link_status:up ... -
测试读写
- 主节点:可读可写
- 从节点:只读,写入会报
READONLY You can't write against a read only replica.
-
断线重连
如果从节点短暂断开,重新上线后会自动补同步这段时间的所有数据,不会丢失。 -
故障恢复
主节点宕机,从节点不会自动“上位”。需人工或由哨兵进行故障转移。
主从从拓扑
当主节点被大量从节点挂载压力过大时,可使用“主→从→从”多级复制。
# 从节点命令示例,将当前实例从现有主切到新的主
192.168.100.200:6389> SLAVEOF 192.168.100.200 6379
注意:多级复制会引入更高的延迟。
退出从模式(无停机)
如果临时需要让某个从节点切换为主:
192.168.100.200:6389> SLAVEOF no one
OK
192.168.100.200:6389> info replication
role:master
connected_slaves:0
...
日志中会看到从节点断开主节点连接并开启主模式的记录。
主从复制工作流程
- 从节点启动 → 连接主节点 → 发送
SYNC(或PSYNC)命令 - 主节点
- 收到同步请求后后台生成一次完整的 RDB 快照
- 将快照数据发送给从节点
- 在生成快照期间及之后,将新的写命令缓存在内存并实时转发给从节点
- 心跳
- 默认每 10 秒发送一次 PING 确保主从连接正常,可通过
repl-ping-replica-period调整
- 默认每 10 秒发送一次 PING 确保主从连接正常,可通过
Redis 哨兵(Sentinel)
Sentinel 负责监控主从集群健康,自动故障转移并通知客户端。
Sentinel 核心功能
- 主从监控:实时检测主、从节点是否可用
- 故障通知:将故障及切换结果告知客户端
- 自动故障转移:主节点挂掉时,选举新的主节点并重配置所有从节点
- 配置中心:自动更新 Redis 和 Sentinel 的配置文件
部署示例
-
准备一主二从,分别启动:
redis-server /etc/redis6379.conf # 主 redis-server /etc/redis6389.conf # 从1 redis-server /etc/redis6399.conf # 从2 -
配置并启动三台 Sentinel(建议奇数台):
bind 0.0.0.0 protected-mode no port 26379 daemonize yes pidfile /var/run/redis-sentinel26379.pid logfile "/redisdata/sentinel26379.log" dir /redisdatasentinel monitor mymaster 192.168.100.131 6379 2 sentinel auth-pass mymaster 123456启动命令任选其一:
redis-sentinel /etc/sentinel26379.conf # 或 redis-server /etc/sentinel26379.conf --sentinel -
查看 Sentinel 日志,确认监控已生效。
故障转移流程
- 主观宕机判断(Sentinel 认为主不可达),标记
+sdown - 投票:至少
quorum台 Sentinel 同意 - 客观宕机确认,标记
+odown - 配置更新:Sentinel 更新自身及 Redis 实例配置
- 切换主节点,
+switch-master - 旧主恢复:如果旧主重启,按配置会被设为从节点,不再自动成为主
186501:X 19 Apr 2025 12:13:52.675 # +sdown master mymaster 192.168.100.30 6379
186501:X 19 Apr 2025 12:13:52.736 # +new-epoch 1
186501:X 19 Apr 2025 12:13:52.737 # +vote-for-leader 8e9617be2327ed19c589ee819bc725eb892ad700 1
186501:X 19 Apr 2025 12:13:52.747 # +odown master mymaster 192.168.100.30 6379 #quorum 3/2
186501:X 19 Apr 2025 12:13:53.874 # +switch-master mymaster 192.168.100.30 6379 192.168.100.200 6389
这些日志行展示了完整的故障转移过程:
- 首先检测到主节点宕机(+sdown)
- 开始新的选举周期(+new-epoch)
- 投票给指定的哨兵领导者(+vote-for-leader)
- 确认主节点客观宕机(+odown)
- 最终完成主节点切换(+switch-master),将主节点从192.168.100.30:6379切换到192.168.100.200:6389
常见问题排查
- 网络连通:防火墙、端口、SELinux 是否放行/关闭
- 认证密码:主从与 Sentinel 之间密码需一致
- 日志检查:从节点或 Sentinel 日志中有无错误提示
- 资源瓶颈:Redis 实例的 CPU、内存、磁盘 IO 是否到达上限
小贴士:生产环境中建议结合 Redis Cluster 或者更完善的高可用方案,根据业务需求选择合适的架构。
相关文章:
【Redis】redis主从哨兵
Redis 主从复制 在访问量极高的场景下,单台 Redis 已难以承载所有请求,且单点故障风险高。通过主从复制,可以实现读写分离、数据备份与高可用。 概念 主节点(Master):负责写操作,将数据变更同…...
windows docker desktop 无法访问容器端口映射
为什么使用docker desktop访问映射的端口失败,而其端口对应的服务是正常的? 常见问题,容器的防火墙没有关闭!!! 以centos7为例,默认情况下防火墙处于开启状态: 这下访问就OK了...
OpenRAN 6G网络:架构、用例和开放问题
英文标题: Open RAN for 6G Networks: Architecture, Use Cases and Open Issues 作者信息 Bharat Agarwal:2016年毕业于Galgotias University,获得电气与电子工程学士学位;2023年在爱尔兰都柏林城市大学获得电子工程博士学位。2…...
《TCP/IP详解 卷1:协议》之第四、五章:ARP RARP
目录 一、ARP && RARP 报文结构 1、ARP请求报文示例 2、ARP响应报文示例 3、RARP请求报文示例 4、RARP响应报文示例 5、关于 padding 6、免费ARP 二、tcpdump 的使用 1、基本语法 2、常用选项 3、常用过滤条件 三、arp 命令的使用 1、基本语法 2、常用选…...
ttsfrd的使用
ttsfrd的作用: 文本标准化,将数字转成大写等预处理,例:数字处理123 → 一百二十三, 日期处理2023-12-25 → 2023年12月25日,特殊符号 40¥→40元。从而适合TTS朗读。 SDK模型下载 from modelsc…...
实战华为1:1方式1 to 1 VLAN映射
本文摘自笔者于2024年出版,并得到广泛读者认可,已多次重印的《华为HCIP-Datacom路由交换学习指南》。 华为设备的1 to 1 VLAN映射有1:1和N :1两种方式。1:1方式是将指定的一个用户私网VLAN标签映射为一个公网VLAN标签,是一种一对一的映射关系…...
NLP 梳理03 — 停用词删除和规范化
一、说明 前文我们介绍了标点符号删除、文本的大小写统一,本文介绍英文文章的另一些删除内容,停用词删除。还有规范化处理。 二、什么是停用词,为什么删除它们? 2.1 停用词的定义 停用词是语言中的常用词,通常语义…...
使用若依二次开发商城系统-1:搭建若依运行环境
前言 若依框架有很多版本,这里使用的是springboot3vue3这样的一个前后端分离的版本。 一.操作步骤 1 下载springboot3版本的后端代码 后端springboot3的代码路径,https://gitee.com/y_project/RuoYi-Vue 需要注意我们要的是springboot3分支。 先用g…...
HarmonyOS-ArkUI: 组件内转场(transition)
什么是组件内转场 组件内转场指的是组件在触发转场的时机所具备的动画效果。转场的时机指的是,组件元素发生变化的时候,具体为: 组件被添加组件被删除组件可见性发生变化-Visibility这些场景有时候单纯的让其消失,出现,平移有时候视觉效果会比较突兀。我们可以利用组件内…...
MVVM框架详解:原理、实现与框架对比
文章目录 1. 引言2. MVVM的基本概念3. MVVM的原理与实现3.1 数据绑定原理3.2 命令模式实现 4. MVVM的优势与局限性4.1 优势4.2 局限性 5. 常见MVVM框架对比5.1 MVVM Light5.2 Prism5.3 Caliburn.Micro5.4 MvvmCross5.5 ReactiveUI 6. 实际应用示例7. 最佳实践与注意事项7.1 MVV…...
opencv--图像处理
这里所说的图像处理并不是专业术语,而是值开发人员对图像的处理技术方法。 教程 菜鸟教程 书籍推介--<opencv4.5 计算机视觉开发实践 基于vc>.朱文伟 获取图像数据 三种方式: cv::VideoCapture: OpenCV 提供的视频捕获类࿰…...
达梦官方管理工具 SQLark——全面支持达梦、Oracle、MySQL、PostgreSQL 数据库!
SQLark 是一款面向信创应用开发者的数据库开发和管理工具,用于快速查询、创建和管理不同类型的数据库系统,已支持达梦、Oracle、MySQL数据库;在最新的 V3.4 版本中,SQLark 新增了对 PostgreSQL 的支持,兼容 PostgreSQL…...
解读大型语言模型:从Transformer架构到模型量化技术
一、生成式人工智能概述 生成式人工智能(Generative Artificial Intelligence)是一种先进的技术,能够生成多种类型的内容,包括文本、图像、音频以及合成数据等。其用户界面的便捷性极大地推动了其广泛应用,用户仅需在…...
理解计算机系统_网络编程(1)
前言 以<深入理解计算机系统>(以下称“本书”)内容为基础,对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 网络是计算机科学中非常重要的部分,笔者过去看过相关的内…...
前端面试场景题
目录 1.项目第一次加载太慢优化 / vue 首屏加载过慢如何优化 2.说说了解的es6-es10的东西有哪些 ES6(ES2015)之后,JavaScript 新增了许多实用的数组和对象方法,下面为你详细介绍: 3.常见前端安全性问题 XSS&#…...
Unity使用Rider的常用快捷键
最近换了IDE,改用Rider进行Unity的代码编写 Rider提供了几个快捷键方案供选择,默认的是Visual Studio的快捷键方案。我索性直接选择了Rider的快捷键方案,一则这2年搞H5没用Visual Studio,快捷键已经忘的差不多了;二则…...
Spring Boot + MyBatis 动态字段更新方法
在Spring Boot和MyBatis中,实现动态更新不固定字段的步骤如下: 方法一:使用MyBatis动态SQL(适合字段允许为null的场景) 定义实体类 包含所有可能被更新的字段。 Mapper接口 定义更新方法,参数为实体对象&…...
Unity多线程渲染指令队列设计与集成技术详解
一、多线程渲染架构设计背景 1. 传统渲染管线瓶颈分析 阶段单线程耗时占比可并行化潜力场景遍历与排序35%★★★★☆材质属性更新20%★★★★★GPU指令提交25%★★☆☆☆资源上传20%★★★★☆ 2. 多线程渲染优势 CPU核心利用率:从单线程到全核心并行 指令缓冲优…...
栈和队列学习记录
一、栈 1.栈的概念 操作受限的线性表-----栈:栈只允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),另一端则是栈底(Bottom)。这种受限的操作方式使得栈遵循后进先出(LIFO…...
位运算练习:起床困难综合征(贪心,位运算)【算法竞赛进阶指南学习笔记】
目录 前情提要起床困难综合征(贪心,位运算) 前情提要 一些基础运算操作用法看看上一篇; 起床困难综合征(贪心,位运算) 题目原文 [P2114 NOI2014] 起床困难综合症 - 洛谷 思路分析 题目很长…...
ubuntu24设置拼音输入法,解决chrome不能输入中文
## 推荐方案:使用 Fcitx5 Fcitx5 是当前在 Wayland 环境下兼容性最好的输入法框架。 ### 1. 安装 Fcitx5 bash sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fcitx5-module-c…...
React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案
一条“Hydration failed”的错误,让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用,一切顺利,直到打开了 SSR(服务端渲染),突然看到这个令人头皮发麻的报错: …...
轻量级景好鼠标录制器
景好鼠标录制器(详情请戳 官网)是一款免费无广的键鼠动作录制/循环回放工具,轻松自动化应对一些重复繁琐的操作任务,如来回切换窗口、文档同一相对位置的复制粘贴等场景,兼容Win XP - 11 。毕竟此款本身主打简约类型&a…...
leetcode--两数之和 三数之和
1.两数之和 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 < index1 < index2 …...
FFMPEG-视频解码-支持rtsp|rtmp|音视频文件(低延迟)
本人亲测解码显示对比延迟达到7到20毫秒之间浮动兼容播放音视频文件、拉流RTSP、RTMP等网络流 基于 Qt 和 FFmpeg 的视频解码播放器类,继承自 QThread,实现了视频流的解码、播放控制、帧同步和错误恢复等功能 工作流程初始化阶段: 用户设置URL和显示尺寸 调用play()启动线程解…...
openEuler安装nvidia驱动【详细版】
注意:在 openEuler 24.03 LTS 系统中安装 NVIDIA 驱动(RTX 3090)需要禁用默认的 Nouveau 驱动并手动安装官方驱动。 一、准备工作 系统更新与依赖安装 更新系统并安装必要依赖包:sudo dnf update -y sudo dnf install gcc make k…...
力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值
前言 简单、中等 √ 二分法思路很简单,但是判断边界太麻烦了!难道真的要去背模板吗 搜索插入位置 我的题解 循环条件左不超过右,目标大于中间值(向下取整)时,左中1,小于,右中-1&…...
基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)
# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…...
程序员思维体操:TDD修炼手册
程序员思维体操:TDD修炼手册 ——从"先写代码"到"测试先行"的认知革命 一、重新认识TDD:不仅仅是写测试 什么是TDD(测试驱动开发) TDD其实很简单,不要看名字很高级复杂,传统开发是直…...
PHP异常处理__RuntimeException运行时错误
以下是对 PHP 中 RuntimeException 的详细解释: 一、RuntimeException 概述 RuntimeException 是 PHP 内置的异常类,它继承自 Exception 类。它通常用于表示在程序运行时发生的异常情况,这些异常情况通常是在程序正常执行过程中出现的错误&…...
