1台服务器部署redis哨兵模式

1台服务器部署redis哨兵模式
 
 

在一台服务器上部署 Redis 哨兵模式(Sentinel) 可以实现 Redis 的高可用(HA),即使主节点(Master)宕机,哨兵也能自动选举新的主节点并通知客户端。但由于单台服务器的限制(物理故障无法避免),生产环境建议至少 3 台服务器部署。以下是单机模拟部署的步骤:


1. 准备工作

  • Redis 版本:≥ 2.8(建议使用最新稳定版)。

  • 服务器环境:单台服务器(如 IP: 192.168.1.100)。

  • 端口规划:

    • Redis 主节点(Master):6379

    • Redis 从节点(Slave):63806381

    • 哨兵(Sentinel):263792638026381


2. 部署 Redis 主从复制

(1) 安装 Redis

bash
 
复制
 
下载
# 下载并编译 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)

bash
 
复制
 
下载
mkdir -p /etc/redis
cp redis.conf /etc/redis/redis-master.conf

编辑 /etc/redis/redis-master.conf

ini
 
复制
 
下载
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

启动主节点:

bash
 
复制
 
下载
redis-server /etc/redis/redis-master.conf

(3) 配置从节点(Slave: 6380 和 6381)

复制配置文件:

bash
 
复制
 
下载
cp redis.conf /etc/redis/redis-slave-6380.conf
cp redis.conf /etc/redis/redis-slave-6381.conf

编辑 /etc/redis/redis-slave-6380.conf

ini
 
复制
 
下载
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)。

启动从节点:

bash
 
复制
 
下载
redis-server /etc/redis/redis-slave-6380.conf
redis-server /etc/redis/redis-slave-6381.conf

(4) 验证主从复制

bash
 
复制
 
下载
redis-cli -p 6379 info replication  # 查看主节点状态
redis-cli -p 6380 info replication  # 查看从节点状态

输出应显示:

  • 主节点:role:masterconnected_slaves:2

  • 从节点:role:slavemaster_host:127.0.0.1


3. 部署 Redis 哨兵(Sentinel)

(1) 配置哨兵

创建 3 个哨兵配置文件(模拟 3 个哨兵实例):

bash
 
复制
 
下载
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

ini
 
复制
 
下载
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) 启动哨兵

bash
 
复制
 
下载
redis-sentinel /etc/redis/sentinel-26379.conf
redis-sentinel /etc/redis/sentinel-26380.conf
redis-sentinel /etc/redis/sentinel-26381.conf

(3) 验证哨兵状态

bash
 
复制
 
下载
redis-cli -p 26379 info sentinel

输出应包含:

ini
 
复制
 
下载
# 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) 模拟主节点宕机

bash
 
复制
 
下载
redis-cli -p 6379 shutdown

(2) 观察哨兵日志

bash
 
复制
 
下载
tail -f /var/log/redis-sentinel_26379.log

日志会显示哨兵选举新主节点的过程(如 +switch-master)。

(3) 检查新主节点

bash
 
复制
 
下载
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

输出应为新的主节点地址(如 127.0.0.1 6380)。


5. 客户端连接哨兵

应用程序应通过哨兵访问 Redis,示例代码(Python):

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'

关键注意事项

  1. 单机部署风险:如果服务器宕机,整个 Redis 服务不可用,生产环境务必跨多台服务器部署。

  2. 哨兵数量:至少 3 个哨兵实例(避免脑裂问题)。

  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 哨兵模式,实现高可用。

posted @ 2025-07-11 09:41  beibidewomen  阅读(162)  评论(0)    收藏  举报