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

相关推荐
Web Security Loop3 小时前
MAC卸载JDK环境
java·macos·jdk
NiceCloud喜云4 小时前
腾讯云国际版云数据库选型:MySQL、Redis 怎么按业务架构来判断
数据库·mysql·腾讯云
ew452184 小时前
MySQL JOIN 关联语法、差异、标准用法、经典坑点汇总
数据库·mysql
Rain的Java大神之路5 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
Nturmoils5 小时前
给运营导个 CSV,在 ksql 里用 \copy 就够了
数据库
ciqingloveless5 小时前
Oracle打开数据库加密
数据库·oracle
counting money5 小时前
Tomcat 专题:从基础架构到性能调优与 WebSocket 实战
java·websocket·tomcat
m0_462605225 小时前
大模型week02
数据库
DBA_G6 小时前
GBase 8a数据库集群多维度资源管控策略矩阵解析
数据库·oracle
xiaohaiAIgeo6 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识