| 方式 | 核心机制 | 是否自动故障转移 | 数据一致性 | 典型用途 |
|---|---|---|---|---|
| **主从复制 + 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监听),集群具备高可用基础。