小团队福音:用两台服务器搞定Redis高可用(Keepalived+互为主从配置)

张开发
2026/4/8 22:17:56 15 分钟阅读

分享文章

小团队福音:用两台服务器搞定Redis高可用(Keepalived+互为主从配置)
小团队福音用两台服务器构建轻量级Redis高可用架构在初创公司和小型技术团队中服务器资源往往捉襟见肘。当业务需要Redis作为缓存或数据库时传统的高可用方案如哨兵模式需要至少三台服务器这对资源有限的团队来说可能过于奢侈。本文将介绍一种基于Keepalived和Redis主从互备的轻量级高可用方案仅需两台服务器即可实现自动故障转移兼顾成本与可靠性。1. 为什么选择双机互备方案对于中小规模业务Redis单实例通常已能满足性能需求但单点故障风险不容忽视。传统哨兵模式虽然成熟稳定但其最低三节点的要求让许多小团队望而却步。双机互备方案的核心价值在于资源利用率最大化仅需两台服务器节省33%硬件成本故障转移自动化通过Keepalived实现VIP漂移主从切换时间可控制在秒级配置复杂度低相比哨兵模式更少的组件和配置项数据安全性保障主从双向同步确保数据冗余下表对比了三种Redis高可用方案的特性特性单节点哨兵模式双机互备最低服务器要求132自动故障转移❌✅✅配置复杂度低高中数据冗余❌✅✅适合场景测试生产中小生产2. 架构设计与核心原理2.1 整体架构该方案的核心是通过Keepalived管理虚拟IP(VIP)并结合自定义脚本监控Redis状态。当主节点故障时从节点会自动接管VIP并提升为主节点实现无缝切换。架构关键组件Redis主从互备两台Redis实例互相设置为对方的从节点Keepalived管理VIP并在节点间转移监控脚本检测Redis状态并触发角色切换2.2 故障转移流程当主节点(192.168.30.8)发生故障时系统会按以下流程恢复服务Keepalived检测脚本发现主节点Redis服务不可用从节点(192.168.30.7)的Keepalived提升优先级VIP(192.168.30.6)漂移到从节点从节点执行tomaster命令将自己提升为主节点客户端通过VIP自动连接到新的主节点# 示例故障转移日志记录 2023-05-15 14:23:17 -- to_be_【master】 2023-05-15 14:23:18 -- keepalived_is_Fault3. 详细配置指南3.1 Redis主从配置在两台服务器上安装Redis后需要创建专门的配置文件主节点配置(master.conf):daemonize yes port 6379 pidfile /var/run/redis_6379.pid logfile /usr/local/redis/logs/redis.log # 其他通用配置...从节点配置(slave.conf):replicaof 192.168.30.8 6379 masterauth xxx123 # 其他配置与master.conf一致关键点两台服务器需使用相同的认证密码日志文件路径需确保存在且可写互为主从需要在两台服务器上相互配置replicaof3.2 Keepalived配置主备节点的Keepalived配置基本相同主要区别在于优先级vrrp_instance VI_Redis { state BACKUP interface ens192 virtual_router_id 8 priority 100 # 主节点设为100从节点设为90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_redis } virtual_ipaddress { 192.168.30.6 } }注意virtual_router_id必须在集群内唯一通常建议使用业务相关的数字4. 监控脚本实现核心监控脚本vip_keepalived.sh实现了Redis状态检测与自动切换逻辑#!/bin/bash BASE_PATH/usr/local/redis check(){ $BASE_PATH/redis.sh role redisRole$? if [ $redisRole -eq 0 ]; then # 主节点正常运行 return 0 elif [ $redisRole -eq 1 ]; then # 从节点检查主节点连接状态 $BASE_PATH/redis.sh slaveup if [ $? -ne 0 ]; then # 主节点不可用提升自己为主 $BASE_PATH/redis.sh tomaster return 0 fi return 1 else return $redisRole fi } check脚本返回值的含义0节点应作为主节点1节点应作为从节点其他Redis服务异常5. 方案优化与实践建议5.1 性能调优对于资源受限的环境可考虑以下优化措施内存限制在redis.conf中设置maxmemory避免内存耗尽持久化策略根据数据重要性选择RDB或AOF连接池配置适当调整客户端连接池大小5.2 监控与告警建议部署以下监控项Redis指标内存使用率连接数每秒操作数(QPS)系统指标CPU负载网络流量磁盘IO# 示例监控命令 redis-cli info memory | grep used_memory_human5.3 局限性说明此方案虽经济实用但也有其适用边界脑裂风险网络分区时可能出现双主情况性能瓶颈写入压力大时主从切换可能导致短暂性能下降数据一致性异步复制可能导致少量数据丢失在实际项目中我们曾遇到网络抖动导致的误切换问题后来通过调整Keepalived的检测间隔和失败阈值解决了这个问题。对于关键业务建议在应用层增加重试机制作为补充保障。

更多文章