当前位置: 首页 > news >正文

Redis 哨兵模式

目录

一、Redis 哨兵介绍

1. 概述

2. 实现原理

3. 架构

4. 选举领导者哨兵的过程

5. 故障后恢复过程

6. 实现原理

二、实验案例环境

三、搭建基础环境

四、部署 Redis 主从

五、部署哨兵节点

1. 部署哨兵

2. 修改配置文件

3. 编写服务脚本

4. 查看哨兵状态信息

5. 故障转移

6.查看哨兵epoch


一、Redis 哨兵介绍

1. 概述

Redis 哨兵是 分布式高可用解决方案,用于实现:

  1. 主从自动故障转移(Master-Slave Failover)

  2. 集群监控(节点健康检测)

  3. 配置中心(自动更新客户端连接信息)

2. 实现原理

工作原理三阶段

  1. 监控(Monitoring)

    • 哨兵每秒向主/从节点发送 PING 命令

    • 若节点超时(down-after-milliseconds,默认 30s),标记为 主观下线(SDOWN)

  2. 共识(Agreement)

    • 哨兵集群通过 Gossip 协议 交换节点状态

    • 当多数哨兵(≥ quorum)认为主节点下线,标记为 客观下线(ODOWN)

  3. 故障转移(Failover)

    • 选举 领导者哨兵 执行故障转移

    • 从从节点中选出新主节点(基于优先级、复制偏移量等)

    • 通知客户端和从节点更新配置

3. 架构

哨兵最基础架构由哨兵节点和数据节点。其中哨兵节点是特殊的Redis节点,不存储数据,只为监控;哨兵架构要由多个哨兵节点共同提供服务;数据节点用于存储Redis数据,包括主、从节点。

关键规则

  • 哨兵节点数 ≥ 3(推荐奇数台,避免脑裂)

  • 故障转移决策需满足:同意数 > 哨兵总数/2

4. 选举领导者哨兵的过程

基于 Raft 协议的选举流程

选举细节

  1. 发现主节点 ODOWN 的哨兵发起选举

  2. 每个哨兵在每个 配置纪元(epoch) 仅投一票

  3. 最先获得 多数票(≥ N/2 + 1) 的哨兵当选

  4. 选举超时(默认 100ms)后重新发起

5. 故障后恢复过程

步骤拆解

  1. 筛选候选节点

    • 排除已下线节点

    • 排除 replica-priority=0 的节点

    • 选择优先级最高 → 复制偏移量最大 → Run ID 最小的节点

  2. 提升新主节点

    # 领导者哨兵执行SLAVEOF NO ONE # 提升为独立节点
  3. 重配置从节

    SLAVEOF new_master_ip port # 指向新主节点

  4. 通知客户端

    • 通过 __sentinel__:hello 频道发布新主节点信息

    • 客户端监听频道自动更新连接

  5. 旧主节点处理

    • 恢复后自动转换为从节点

    • 同步新主数据

6. 实现原理

哨兵节点的配置文件需添加

sentinel monitor master-name IP port quorum
#需指定要监控的masterIP地址和端口
quorum用来表示执行故障恢复操作之前至少需要几个哨兵节点同意

 建立连接后,哨兵会定时执行任务(贯穿整个生命周期):

  •  每10秒哨兵会向主节点和从节点发送info命令
  • 每2秒哨兵会向主节点和从节点发送自己的信息
  • 每1秒哨兵会向主节点、从节点和其他哨兵发生ping命令

二、实验案例环境

操作系统配置IP主机名角色
Open Euler242C4C192.168.10.101master
Open Euler242C4C192.168.10.102slave1
Open Euler242C4C192.168.10.103slave2
Open Euler242C4C192.168.10.104sentione101哨兵
Open Euler242C4C192.168.10.105sentione102哨兵
Open Euler242C4C192.168.10.106sentione103哨兵

三、搭建基础环境

systemctl stop firewalld
setenforce 0
systemctl disable firewalld
vim /etc/selinux/config 
SELINUX=disabledhostnamectl set-hostname 主机名(master/salve)

四、部署 Redis 主从

--部署redis
dnf -y install gcc
tar zxvf redis
cd redis
make
make PREFIX=/usr/local/redis install--软链接环境变量
ln -s /usr/local/redis/bin/* /usr/local/bin/--适用默认配置文件
mkdir /etc/redis
cp /root/redis/redis.conf /etc/redis/6379.conf--编写服务脚本
vim /etc/systemd/system/redis.service
[Unit]
Description=redis
After=network.target[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf[Install]
WantedBy=multi-user.target--修改主从配置文件
vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.10.101  //这个监听三台不一致,为本机的IP
daemonize yes
logfile "/var/log/redis_6379.log"--启动服务
systemctl daemon-reload
systemctl start redis
systemctl enable redis
--查看监听
netstat -anpt | grep 6379从配置
从节点
vim /etc/redis/6379.conf
replicaof 192.168.10.101 6379  //指定主--重启
systemctl restart redis
netstat -anpt |grep redis--验证主从
redis-cli
info replication

五、部署哨兵节点

1. 部署哨兵

systemctl stop firewalld
setenforce 0
systemctl disable firewalld
dnf -y install gcc
tar zxvf redis-6.2.4
cd redis-6.2.4make
make PREFIX=/usr/local/redis installmkdir /etc/redis
cp redis.conf /etc/redis/6379.confln -s /usr/local/redis/bin/* /usr/local/bin/

2. 修改配置文件

vim /etc/redis/6379.conf 
bind 0.0.0.0
daemonize yes  //75行
sentinel monitor master 192.168.10.101 6379 2  //添加出来,监测master,当主节点故障,至少需要2个哨兵节点同意,才能判断主故障(客观故障)

3. 编写服务脚本

cd /lib/systemd/system
vim redis.service[Unit]
Description=redis
After=network.target[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-sentinel /etc/redis/6379.conf[Install]
WantedBy=multi-user.target-启动
systemctl daemon-reload
systemctl start redis
systemctl enable redis-查看进程
netstat -anpt | grep redis

4. 查看哨兵状态信息

redis-cli
info sentinel  

5. 故障转移

-在主上模拟故障,停止服务
systemctl stop redis
-再查看哨兵状态信息
info sentinel  //master发生变化

6.查看哨兵epoch

每进行一次主从切换,epoch相关的参数都会加1
tail /etc/redis/6379.conf

http://www.xdnf.cn/news/911953.html

相关文章:

  • 【Qt】:设置新建类模板
  • [Python学习日记-90] 并发编程之多线程 —— 线程理论
  • 大模型编程助手-Cline
  • 沉金电路板工艺解析——化学沉金的优势与挑战
  • 使用python写一个虚拟的舵机模拟器
  • 经典文献阅读之--LidaRefer(基于变换器的自动驾驶户外3D视觉定位)
  • Onenet云网关方案应用--基于米尔瑞芯微RK3576开发板
  • (附示例代码及图示)问题分解策略提升复杂问题检索正确率
  • 【公益护航青春路】 “成长的秘密花园”青春期身心成长讲座走进校园
  • 肖特基二极管的特性
  • 森马下沙奥莱旗舰店盛大启幕:以“新常服“理念重塑消费体验新范式
  • 2025.06.06【Ribo-seq】|riboWaltz:P-site定位与三碱基周期性分析流程
  • OpenLayers 地图定位
  • 好子集的数目概念及表达形式
  • 数据库精选题(四)(E-R模型)
  • 基于nacos2.5.1的MCP服务端微服务项目开发环境配置简介
  • 提升CPU、内存及磁盘利用率脚本
  • 群晖文件操作API
  • 自然语言处理的发展
  • (33)课54--??:3 张表的 join-on 连接举例,多表查询总结。
  • MyBatis————入门
  • 【SSM】MyBatisPlus笔记:快速上手MyBatisPlus
  • C++算法动态规划3
  • VUE前端实现自动打包成压缩文件
  • Linux缓冲区与glibc封装:入门指南
  • 智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
  • 网络编程及原理(三)
  • 2025最新VMware17如何通过官网进行下载
  • [蓝桥杯]迷宫与陷阱
  • 端游如何反调试