Redis作为常用的内存数据库,单点部署存在故障风险,双机热备是保障其高可用的常用方案。下面介绍基于主从复制+哨兵模式的双机热备搭建方法。

一、环境准备
准备两台服务器,分别作为主节点和从节点,假设主节点IP为192.168.0.10,从节点IP为192.168.0.11,两台服务器均安装Redis 6.0及以上版本,关闭防火墙或开放Redis默认端口6379、哨兵默认端口26379。
二、配置主从复制
1. 主节点配置
主节点使用默认配置即可,也可根据需要调整以下参数,修改Redis配置文件redis.conf:
# 绑定主节点IP,允许从节点连接 bind 192.168.0.10 # 保护模式关闭,方便测试 protected-mode no # 后台运行 daemonize yes # 日志文件路径 logfile "/var/log/redis/redis.log" # 持久化配置,按需开启RDB或AOF save 900 1 save 300 10 appendonly yes
2. 从节点配置
从节点需要在redis.conf中添加主节点关联配置:
# 绑定从节点IP bind 192.168.0.11 # 关闭保护模式 protected-mode no # 后台运行 daemonize yes # 日志文件路径 logfile "/var/log/redis/redis-slave.log" # 指定主节点IP和端口 replicaof 192.168.0.10 6379 # 从节点只读,默认开启无需修改 replica-read-only yes
3. 验证主从同步
分别启动主从节点的Redis服务,连接主节点写入测试数据,再连接从节点查询,验证数据是否同步:
# 连接主节点 redis-cli -h 192.168.0.10 -p 6379 192.168.0.10:6379> set test_key "hello_redis" OK 192.168.0.10:6379> get test_key "hello_redis" # 连接从节点查询 redis-cli -h 192.168.0.11 -p 6379 192.168.0.11:6379> get test_key "hello_redis"
三、部署哨兵节点
哨兵节点负责监控主从节点,主节点故障时自动将从节点晋升为主节点,实现故障转移。两台服务器各部署一个哨兵节点,修改哨兵配置文件sentinel.conf:
# 后台运行 daemonize yes # 日志文件路径 logfile "/var/log/redis/sentinel.log" # 监控主节点,mymaster是主节点别名,192.168.0.10 6379是主节点地址,2表示至少2个哨兵认为主节点故障才触发转移 sentinel monitor mymaster 192.168.0.10 6379 2 # 主节点无响应超过30000毫秒视为故障 sentinel down-after-milliseconds mymaster 30000 # 故障转移时最多同时同步的从节点数 sentinel parallel-syncs mymaster 1 # 故障转移超时时间 sentinel failover-timeout mymaster 180000 # 关闭保护模式 protected-mode no
分别启动两台服务器的哨兵服务,连接哨兵节点查看监控状态:
redis-cli -h 192.168.0.10 -p 26379 192.168.0.10:26379> sentinel master mymaster # 可以看到主节点状态、从节点数量、哨兵数量等信息
四、故障转移验证
手动停止主节点的Redis服务,模拟主节点故障,观察哨兵日志或查询哨兵状态,可以看到哨兵自动检测到主节点下线,将从节点晋升为新主节点,此时连接从节点可以发现其已经变为可写状态,业务无需手动干预即可恢复服务。
五、注意事项
- 生产环境建议至少部署3个哨兵节点,避免哨兵单点故障导致故障转移失败
- 主从节点建议开启持久化,避免主节点故障重启后数据丢失
- 应用端连接时不要直接连接固定Redis节点,建议通过哨兵获取当前主节点地址,或使用支持哨兵的Redis客户端
以上就是Redis双机热备方案的完整搭建流程,该方案可以有效避免Redis单点故障,保障业务服务的可用性。