1台服务器部署redis哨兵模式
在一台服务器上部署 Redis 哨兵模式(Sentinel) 可以实现 Redis 的高可用(HA),即使主节点(Master)宕机,哨兵也能自动选举新的主节点并通知客户端。但由于单台服务器的限制(物理故障无法避免),生产环境建议至少 3 台服务器部署。以下是单机模拟部署的步骤:
1. 准备工作
-
Redis 版本:≥ 2.8(建议使用最新稳定版)。
-
服务器环境:单台服务器(如 IP:
192.168.1.100)。 -
端口规划:
-
Redis 主节点(Master):
6379 -
Redis 从节点(Slave):
6380、6381 -
哨兵(Sentinel):
26379、26380、26381
-
2. 部署 Redis 主从复制
(1) 安装 Redis
# 下载并编译 Redis(以 6.2.6 为例)
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
make && make install
(2) 配置主节点(Master: 6379)
mkdir -p /etc/redis
cp redis.conf /etc/redis/redis-master.conf
编辑 /etc/redis/redis-master.conf:
bind 0.0.0.0 port 6379 daemonize yes pidfile /var/run/redis_6379.pid logfile "/var/log/redis_6379.log" dir /var/lib/redis/6379 appendonly yes
启动主节点:
redis-server /etc/redis/redis-master.conf
(3) 配置从节点(Slave: 6380 和 6381)
复制配置文件:
cp redis.conf /etc/redis/redis-slave-6380.conf
cp redis.conf /etc/redis/redis-slave-6381.conf
编辑 /etc/redis/redis-slave-6380.conf:
bind 0.0.0.0 port 6380 daemonize yes pidfile /var/run/redis_6380.pid logfile "/var/log/redis_6380.log" dir /var/lib/redis/6380 appendonly yes replicaof 127.0.0.1 6379 # 指向主节点
编辑 /etc/redis/redis-slave-6381.conf(类似,端口改为 6381)。
启动从节点:
redis-server /etc/redis/redis-slave-6380.conf redis-server /etc/redis/redis-slave-6381.conf
(4) 验证主从复制
redis-cli -p 6379 info replication # 查看主节点状态
redis-cli -p 6380 info replication # 查看从节点状态
输出应显示:
-
主节点:
role:master,connected_slaves:2 -
从节点:
role:slave,master_host:127.0.0.1
3. 部署 Redis 哨兵(Sentinel)
(1) 配置哨兵
创建 3 个哨兵配置文件(模拟 3 个哨兵实例):
cp sentinel.conf /etc/redis/sentinel-26379.conf
cp sentinel.conf /etc/redis/sentinel-26380.conf
cp sentinel.conf /etc/redis/sentinel-26381.conf
编辑 /etc/redis/sentinel-26379.conf:
port 26379 daemonize yes pidfile /var/run/redis-sentinel_26379.pid logfile "/var/log/redis-sentinel_26379.log" dir /var/lib/redis/sentinel_26379 sentinel monitor mymaster 127.0.0.1 6379 2 # 监控主节点,2表示至少2个哨兵同意才触发故障转移 sentinel down-after-milliseconds mymaster 5000 # 5秒无响应判定为主观下线 sentinel failover-timeout mymaster 10000 # 故障转移超时时间 sentinel parallel-syncs mymaster 1 # 每次故障转移后,同时同步的从节点数量
类似修改 sentinel-26380.conf 和 sentinel-26381.conf(仅调整端口和日志路径)。
(2) 启动哨兵
redis-sentinel /etc/redis/sentinel-26379.conf redis-sentinel /etc/redis/sentinel-26380.conf redis-sentinel /etc/redis/sentinel-26381.conf
(3) 验证哨兵状态
redis-cli -p 26379 info sentinel
输出应包含:
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
4. 测试故障转移
(1) 模拟主节点宕机
redis-cli -p 6379 shutdown
(2) 观察哨兵日志
tail -f /var/log/redis-sentinel_26379.log
日志会显示哨兵选举新主节点的过程(如 +switch-master)。
(3) 检查新主节点
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
输出应为新的主节点地址(如 127.0.0.1 6380)。
5. 客户端连接哨兵
应用程序应通过哨兵访问 Redis,示例代码(Python):
from redis.sentinel import Sentinel
sentinel = Sentinel([('127.0.0.1', 26379)], socket_timeout=0.1)
master = sentinel.master_for('mymaster')
slave = sentinel.slave_for('mymaster')
master.set('key', 'value')
print(slave.get('key')) # 输出 'value'
关键注意事项
-
单机部署风险:如果服务器宕机,整个 Redis 服务不可用,生产环境务必跨多台服务器部署。
-
哨兵数量:至少 3 个哨兵实例(避免脑裂问题)。
-
监控:确保哨兵进程存活(可通过
systemd或supervisor管理)。
总结
| 组件 | 端口 | 配置文件 | 作用 |
|---|---|---|---|
| Redis Master | 6379 | /etc/redis/redis-master.conf |
主节点,处理写请求 |
| Redis Slave | 6380 | /etc/redis/redis-slave-6380.conf |
从节点,复制主节点数据 |
| Redis Slave | 6381 | /etc/redis/redis-slave-6381.conf |
从节点,复制主节点数据 |
| Sentinel | 26379 | /etc/redis/sentinel-26379.conf |
监控主节点,触发故障转移 |
| Sentinel | 26380 | /etc/redis/sentinel-26380.conf |
监控主节点,触发故障转移 |
| Sentinel | 26381 | /etc/redis/sentinel-26381.conf |
监控主节点,触发故障转移 |
通过以上步骤,你可以在单台服务器上模拟 Redis 哨兵模式,实现高可用。

浙公网安备 33010602011771号