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监听),集群具备高可用基础。

相关推荐
上学的小垃圾25 分钟前
01-数据库系统概述
数据库
二进制漫游记1 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
2501_928996221 小时前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
莫得感情 o1 小时前
Redis 05 · 持久化:RDB 与 AOF 怎么保证数据不丢
redis·缓存
zww89491112 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
curd_boy3 小时前
【Redis】Redis从缓存到AI向量平台
人工智能·redis·缓存
泡干脆面就番茄3 小时前
MySQL_子查询_分页查询与联合查询详解
数据库·mysql
莫得感情 o3 小时前
Redis 02 · 数据结构:String 到 Stream 怎么选
redis
黑马程序员毕设4 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳4 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法