Redis(2) redis的高可用

方式 核心机制 是否自动故障转移 数据一致性 典型用途
**主从复制 + Sentinel(哨兵)**​ 主从复制 + 哨兵监控 ✅ 自动 最终一致 中小规模、高可用缓存 / 数据库
**Redis Cluster(集群)**​ 数据分片 + 主从 + 故障转移 ✅ 自动 最终一致 大规模、高并发、大数据量
**Keepalived + Redis 主从(VIP 漂移)**​ 主从复制 + VIP ⚠️ 半自动 最终一致 老系统、简单高可用

一、主从复制,哨兵的实现

Redis 高可用环境(哨兵模式)搭建与验证实践记录

一、环境准备与基础配置

1. 关闭防火墙与 SELinux

为避免网络策略或安全机制干扰服务通信,先关闭防火墙和 SELinux:

复制代码

bash

bash

复制代码
# 关闭 firewalld 并禁用开机自启
systemctl stop firewalld
systemctl disable firewalld  

# 临时关闭 SELinux
setenforce 0  

# 永久关闭 SELinux(修改配置文件)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2. 安装 Redis

通过 YUM 安装 Redis(需确保 EPEL 源可用):

复制代码

bash

bash

复制代码
yum install -y redis

注:若提示 epel-release重复配置,可忽略(不影响安装),或直接安装 redis包。

二、Redis 服务验证(从节点)

安装后,先验证 Redis 服务是否正常(以从节点为例):

复制代码

bash

bash

复制代码
redis-cli INFO replication
  • 初始连接失败时(如 Could not connect to Redis at 127.0.0.1:6379: Connection refused),需确认 Redis 进程是否启动。

  • 成功后会显示复制信息(示例):

    复制代码

    conf

    conf

    复制代码
    # Replication
    role:slave
    master_host:192.168.222.171  # 主节点IP
    master_port:6379
    master_link_status:up       # 主从连接正常
    ...

三、Sentinel(哨兵)配置与启动

1. 修改 Sentinel 配置文件

编辑 /etc/redis-sentinel.conf,关键配置:

复制代码

conf

conf

复制代码
port 26379                  # 哨兵默认端口
daemonize yes               # 后台运行
protected-mode no           # 关闭保护模式(允许外部访问)
bind 0.0.0.0                # 监听所有网卡(关键!解决"连接拒绝")
pidfile /var/run/redis/sentinel.pid
logfile /var/log/redis/sentinel.log
dir /var/lib/redis

# 监控主节点(mymaster 是集群名,2 表示至少 2 个哨兵认为主节点故障才切换)
sentinel monitor mymaster 192.168.222.171 6379 2  
sentinel down-after-milliseconds mymaster 5000  # 5秒无响应判定为故障
sentinel failover-timeout mymaster 10000        # 故障切换超时时间
sentinel parallel-syncs mymaster 1             # 故障切换时并行同步数

2. 启动 Sentinel 并验证状态

复制代码

bash

bash

复制代码
# 启动哨兵
redis-sentinel /etc/redis-sentinel.conf  

# 查看哨兵进程(确认 26379 端口监听)
ps -ef | grep sentinel  
netstat -tulnp | grep 26379  

# 查看哨兵信息(确认主节点监控状态)
redis-cli -p 26379 INFO Sentinel  

# 查看主节点地址(通过哨兵获取)
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
  • INFO Sentinel输出示例:

    复制代码

    conf

    conf

    复制代码
    # Sentinel
    sentinel_masters:1
    sentinel_tilt:0
    ...
    master0:name=mymaster,status=ok,address=192.168.222.171:6379,slaves=2,sentinels=3
  • get-master-addr-by-name mymaster会返回主节点的 IP端口(如 192.168.222.171 6379)。

四、关键问题与解决

1. 连接拒绝问题

  • 现象redis-cli -h 127.0.0.1 INFO replicationredis-cli INFO replication提示 Connection refused

  • 原因 :Redis 进程未启动,或 bind配置错误(早期配置为 bind 0.0.0.1导致无法访问)。

  • 解决

    • 确保 Redis 服务启动:systemctl start redis(或从节点同步主节点状态后自动启动)。

    • 哨兵配置中 bind 0.0.0.0(允许所有网卡访问)。

2. 非法参数问题

  • 现象redis-cli -h 0.0.0.1 INFO replication提示 Invalid argument

  • 原因-h参数不支持 0.0.0.1(语法错误)。

  • 解决 :使用有效 IP(如 127.0.0.1)或直接执行 redis-cli INFO replication(默认连接 127.0.0.1:6379)。

五、最终验证

  • 主从复制正常(master_link_status:up)。

  • 哨兵监控主节点(status=ok),并能正确返回主节点地址。

  • 哨兵进程运行(端口 26379监听),集群具备高可用基础。

相关推荐
知识分享小能手3 小时前
Flask入门学习教程,从入门到精通,数据库操作 — 知识点详解与案例代码(4)
数据库·学习·flask
我是一颗柠檬3 小时前
【MySQL全面教学】MySQL基础SQL语句Day3(2026年)
数据库·后端·sql·mysql·oracle
XS0301063 小时前
MyBatis动态SQL
数据库·sql·mybatis
MandalaO_O4 小时前
MyBatis 与 MySQL 执行流程
数据库·mysql·mybatis
SmartBrain4 小时前
AI全栈开发(SDD):慢病管理系统工程级设计
java·大数据·开发语言·人工智能·架构·aigc
梦想CAD控件4 小时前
网页端对DWG图纸进行预览与批注(CAD轻量化)
java·前端·javascript
老毛肚4 小时前
Spring boot 特性和自写Reids组件
java·spring boot·后端
极光代码工作室4 小时前
基于SpringBoot的课程管理系统
java·springboot·web开发·后端开发
JustNow_Man4 小时前
【opencode】安装使用daytona沙箱插件
android·java·javascript
武子康5 小时前
Java-05 深入浅出 MyBatis动态SQL与参数拼接完全指南
java·spring boot·后端