环境准备
一台机器部署:
- Redis 主节点:
127.0.0.1:6379
- Redis 从节点:
127.0.0.1:6380
,127.0.0.1:6381
- Sentinel 节点:
127.0.0.1:26379
,127.0.0.1:26380
,127.0.0.1:26381
步骤 1:安装 Redis 6.2.17
# 下载并编译 Redis
wget https://download.redis.io/releases/redis-6.2.17.tar.gz
tar xzf redis-6.2.17.tar.gz
cd redis-6.2.17
make && make install
# 创建配置和数据目录
mkdir -p /opt/redis/{master,slave1,slave2,sentinel1,sentinel2,sentinel3}
步骤 2:配置 Redis 主从节点
(1) 主节点配置 (/opt/redis/master/redis.conf
)
bind 0.0.0.0
port 6379
daemonize yes
pidfile /var/run/redis-master.pid
logfile "/opt/redis/master/redis.log"
dir /opt/redis/master
requirepass your_redis_password # 主节点密码
masterauth your_redis_password # 从节点访问主节点的密码(需与 requirepass 一致)
(2) 从节点1配置 (/opt/redis/slave1/redis.conf
)
bind 0.0.0.0
port 6380
daemonize yes
pidfile /var/run/redis-slave1.pid
logfile "/opt/redis/slave1/redis.log"
dir /opt/redis/slave1
requirepass your_redis_password
masterauth your_redis_password
replicaof 127.0.0.1 6379 # 指向主节点
(3) 从节点2配置 (/opt/redis/slave2/redis.conf
)
bind 0.0.0.0
port 6381
daemonize yes
pidfile /var/run/redis-slave2.pid
logfile "/opt/redis/slave2/redis.log"
dir /opt/redis/slave2
requirepass your_redis_password
masterauth your_redis_password
replicaof 127.0.0.1 6379 # 指向主节点
步骤 3:配置 Sentinel 节点
(1) Sentinel1 配置 (/opt/redis/sentinel1/sentinel.conf
)
port 26379
daemonize yes
pidfile /var/run/redis-sentinel1.pid
logfile "/opt/redis/sentinel1/sentinel.log"
dir /opt/redis/sentinel1
sentinel monitor mymaster 127.0.0.1 6379 2 # 监控名为 "mymaster" 的主节点,quorum=2
sentinel auth-pass mymaster your_redis_password # 主节点密码
sentinel down-after-milliseconds mymaster 5000 # 5秒不可达视为故障
sentinel failover-timeout mymaster 60000 # 故障转移超时时间(毫秒)
sentinel parallel-syncs mymaster 1 # 故障转移时允许同步的从节点数
(2) Sentinel2 配置 (/opt/redis/sentinel2/sentinel.conf
)
port 26380
daemonize yes
pidfile /var/run/redis-sentinel2.pid
logfile "/opt/redis/sentinel2/sentinel.log"
dir /opt/redis/sentinel2
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster your_redis_password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
(3) Sentinel3 配置 (/opt/redis/sentinel3/sentinel.conf
)
port 26381
daemonize yes
pidfile /var/run/redis-sentinel3.pid
logfile "/opt/redis/sentinel3/sentinel.log"
dir /opt/redis/sentinel3
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster your_redis_password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
步骤 4:启动服务
(1) 启动 Redis 主从节点
# 启动主节点
redis-server /opt/redis/master/redis.conf
# 启动从节点
redis-server /opt/redis/slave1/redis.conf
redis-server /opt/redis/slave2/redis.conf
(2) 启动 Sentinel 节点
redis-sentinel /opt/redis/sentinel1/sentinel.conf
redis-sentinel /opt/redis/sentinel2/sentinel.conf
redis-sentinel /opt/redis/sentinel3/sentinel.conf
步骤 5:验证集群状态
(1) 检查主从复制状态
# 连接主节点
redis-cli -h 127.0.0.1 -p 6379 -a your_redis_password info replication
# 输出应包含:
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=...
slave1:ip=127.0.0.1,port=6381,state=online,offset=...
(2) 检查 Sentinel 监控状态
# 连接任意 Sentinel 节点
redis-cli -h 127.0.0.1 -p 26379 info sentinel
# 输出应包含:
sentinel_masters:1
sentinel_tilt:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
步骤 6:模拟故障转移测试
(1) 手动停止主节点
redis-cli -h 127.0.0.1 -p 6379 -a your_redis_password shutdown
(2) 观察 Sentinel 日志
查看 Sentinel 日志文件(如 /opt/redis/sentinel1/sentinel.log
),确认触发故障转移:
# 日志中应出现以下事件:
+sdown master mymaster 127.0.0.1 6379
+odown master mymaster 127.0.0.1 6379
+vote-for-leader ...
+switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380 # 切换至新主节点
(3) 验证新主节点
redis-cli -h 127.0.0.1 -p 6380 -a your_redis_password info replication
# 输出应显示 role:master
关键注意事项
-
密码一致性
- 所有 Redis 主从节点和 Sentinel 的
requirepass
、masterauth
、sentinel auth-pass
必须一致。
- 所有 Redis 主从节点和 Sentinel 的
-
防火墙设置
- 确保 Redis 和 Sentinel 的端口开放(6379, 6380, 6381, 26379, 26380, 26381)。
-
生产环境优化
- 将主从节点和 Sentinel 分散在不同物理机或可用区。
- 调整
down-after-milliseconds
和parallel-syncs
参数优化故障转移速度。
-
日志与监控
- 监控
INFO replication
和INFO sentinel
状态。 - 配置日志轮转(如
logrotate
)避免日志文件过大。
- 监控
总结
通过以上步骤,您已成功部署一个基于 Redis Sentinel 的高可用集群。Sentinel 会持续监控主节点,并在故障时自动切换至从节点,保障服务可用性。