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

相关推荐
真上帝的左手17 分钟前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
为思念酝酿的痛23 分钟前
MySQL表的连接
数据库·mysql
程序猿乐锅24 分钟前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
Java后端的Ai之路35 分钟前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
数字新视界43 分钟前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
AntsData1 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat1 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰1 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
bksczm1 小时前
MySQL之存储引擎
数据库·mysql
Flynn Liang2 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai