一、文档说明
1.1 适用场景
- 中小型生产业务:需要Redis秒级高可用、业务零中断、数据零丢失的场景,如后台缓存、用户会话、热点数据存储、接口限流等
- 单机房双机热备场景:仅两台服务器部署Redis,无需集群多节点,追求架构简单、运维成本低、稳定性高
- 业务零感知切换需求:不允许Redis宕机导致业务报错、重连、数据丢失,需要故障自动切换
- 数据强一致场景:双节点实时双向同步,节点恢复后自动增量补全数据
1.2 不适用场景
- 超大规模海量数据、超高并发场景(建议使用Redis Cluster集群)
- 异地多活、跨机房部署场景(VIP无法跨机房漂移)
- 需要读写分离、海量读请求分流场景(该方案为单VIP统一读写)
1.3 环境参数
| 服务/参数 | 详细配置 |
|---|---|
| Redis版本 | 6.2.12(生产稳定版) |
| 节点1(主) | 192.168.1.20 |
| 节点2(备) | 192.168.1.21 |
| 虚拟IP(VIP) | 192.168.1.23(业务统一接入地址) |
| Redis端口 | 6379 |
| Redis密码 | 123456(可自定义修改) |
| 系统环境 | CentOS7/8、RockyLinux(兼容主流Linux发行版) |
| 高可用组件 | Keepalived(VIP自动漂移、故障检测) |
1.4 架构原理
采用双主互为主从+VIP单点入口架构,两台Redis节点双向实时复制数据,保证双节点数据一致;业务仅连接虚拟VIP,不直接连接物理节点。Keepalived实时监控Redis服务状态,当当前VIP所在节点Redis故障、服务宕机或机器离线时,VIP秒级漂移至正常备节点,实现业务无感知、无中断、不丢数据。
架构流程图:业务 → VIP(192.168.1.23) → Redis双主互备节点(20/21)
二、前置环境准备(两台节点统一执行)
2.1 关闭防火墙与SELinux
生产测试环境建议关闭,避免端口拦截导致同步、VIP漂移异常
# 关闭并禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
2.2 安装基础依赖
# CentOS/RockyLinux
yum install -y gcc gcc-c++ make wget net-tools
# Ubuntu 系统替换为:
# apt install -y gcc make wget net-tools
2.3 配置主机映射(可选)
echo "192.168.1.20 redis-master
192.168.1.21 redis-backup" >> /etc/hosts
三、Redis6.2.12 编译安装(两台节点统一执行)
3.1 下载解压源码包
cd /usr/local
# 下载官方稳定版
wget https://download.redis.io/releases/redis-6.2.12.tar.gz
# 解压
tar -zxvf redis-6.2.12.tar.gz
# 重命名简化目录
mv redis-6.2.12 redis
cd redis
3.2 编译安装
make && make install
3.3 创建工作目录
# 数据持久化目录、配置目录
mkdir -p /var/lib/redis /etc/redis
chmod 777 /var/lib/redis
四、Redis双主互备核心配置
核心原理:两台节点互相配置replicaof,实现双向实时数据同步,配合统一密码认证,保证数据双向复制正常。
4.1 节点1 192.168.1.20 配置
# 复制默认配置文件
cp /usr/local/redis/redis.conf /etc/redis/redis-6379.conf
# 编辑配置文件
vim /etc/redis/redis-6379.conf
写入以下完整生产配置(直接覆盖原有内容):
# 网络配置
bind 0.0.0.0
port 6379
protected-mode no
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/lib/redis
# 认证配置(双主同步必备)
requirepass 123456
masterauth 123456
# 双主核心:同步对端节点数据
replicaof 192.168.1.21 6379
repl-backlog-size 128mb
repl-disable-tcp-nodelay yes
# RDB持久化策略
save 3600 1
save 300 100
save 60 10000
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
stop-writes-on-bgsave-error yes
# AOF持久化(保障数据不丢失)
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
4.2 节点2 192.168.1.21 配置
cp /usr/local/redis/redis.conf /etc/redis/redis-6379.conf
vim /etc/redis/redis-6379.conf
写入以下完整配置:
# 网络配置
bind 0.0.0.0
port 6379
protected-mode no
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/lib/redis
# 认证配置
requirepass 123456
masterauth 123456
# 双主核心:同步对端节点数据
replicaof 192.168.1.20 6379
repl-backlog-size 128mb
repl-disable-tcp-nodelay yes
# RDB持久化策略
save 3600 1
save 300 100
save 60 10000
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
stop-writes-on-bgsave-error yes
# AOF持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
五、配置Redis系统服务(两台统一配置)
vim /etc/systemd/system/redis.service
写入服务配置:
[Unit]
Description=Redis 6.2.12 High Available Server
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis-6379.conf
ExecReload=/usr/local/bin/redis-cli -a 123456 shutdown
ExecStop=/usr/local/bin/redis-cli -a 123456 shutdown
PrivateTmp=true
Restart=no
[Install]
WantedBy=multi-user.target
5.1 启动服务并开机自启
systemctl daemon-reload
systemctl start redis
systemctl enable redis
5.2 验证双主同步状态
两台节点分别执行以下命令,查看同步状态
redis-cli -a 123456 info replication
正常结果:两台节点role均为slave,master_host指向对端IP,说明双向同步搭建成功。
六、Keepalived高可用配置
6.1 安装Keepalived(两台统一执行)
# CentOS
yum install -y keepalived
# Ubuntu
# apt install -y keepalived
6.2 编写Redis健康检测脚本(两台统一)
脚本作用:实时检测Redis存活状态,Redis异常则停止Keepalived,触发VIP漂移
vim /etc/keepalived/check_redis.sh
#!/bin/bash
# 检测Redis连通性
redis-cli -a 123456 ping | grep PONG > /dev/null 2>&1
# 异常则退出,触发VIP漂移
if [ $? -ne 0 ]; then
systemctl stop keepalived
exit 1
fi
添加执行权限
chmod +x /etc/keepalived/check_redis.sh
6.3 节点1(192.168.1.20)主节点配置
# 备份默认配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
global_defs {
router_id redis_ha_master
}
# 检测规则:2秒检测一次,异常权重-20
vrrp_script chk_redis {
script "/etc/keepalived/check_redis.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 务必替换为服务器真实网卡名称
virtual_router_id 51
priority 100 # 主节点优先级更高
advert_int 1
# VRRP认证
authentication {
auth_type PASS
auth_pass 1111
}
# 绑定检测脚本
track_script {
chk_redis
}
# 虚拟VIP配置
virtual_ipaddress {
192.168.1.23/24 dev eth0 label eth0:1
}
}
6.4 节点2(192.168.1.21)备节点配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
global_defs {
router_id redis_ha_backup
}
vrrp_script chk_redis {
script "/etc/keepalived/check_redis.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 务必替换为服务器真实网卡名称
virtual_router_id 51
priority 90 # 备节点优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_redis
}
virtual_ipaddress {
192.168.1.23/24 dev eth0:1
}
}
七、启动高可用服务
两台节点统一执行
systemctl start keepalived
systemctl enable keepalived
7.1 验证VIP生效
ip addr
正常状态:主节点192.168.1.20 绑定VIP 192.168.1.23,备节点无VIP
八、生产级高可用验证测试
8.1 数据同步验证
# 连接VIP写入数据
redis-cli -h 192.168.1.23 -a 123456
set ha_test 123456
get ha_test
分别登录两台物理节点查询数据,均能查询到写入数据,说明双向同步正常。
8.2 主节点Redis故障漂移测试
- 停止主节点Redis:
systemctl stop redis - 秒级检测:Keepalived检测到Redis异常,自动停止本机服务
- VIP自动漂移至备节点192.168.1.21
- 业务持续连接VIP读写,无中断、无报错
8.3 主节点恢复自动同步测试
- 启动主节点Redis:
systemctl start redis - 主节点自动增量同步备节点所有新数据
- VIP自动回迁主节点,恢复初始架构
8.4 机器宕机极端测试
主节点直接关机/断电,VIP秒级漂移至备节点,业务零感知,数据完全一致。
九、常用运维命令
# 查看Redis状态
systemctl status redis
# 重启Redis
systemctl restart redis
# 查看Keepalived状态
systemctl status keepalived
# 重启Keepalived
systemctl restart keepalived
# 查看VIP绑定情况
ip addr
# 查看Redis主从同步状态
redis-cli -a 123456 info replication
# 连接VIP测试
redis-cli -h 192.168.1.23 -a 123456
十、生产核心注意事项
- 网卡适配:配置中
eth0必须替换为服务器真实网卡(可通过ip addr查询),网卡错误会导致VIP漂移失效 - 密码统一:两台Redis密码、masterauth必须完全一致,否则双向同步失败
- 禁止直连物理节点:所有业务必须连接VIP地址,避免双写冲突、数据不一致
- 持久化必开:AOF+RDB混合持久化生产必须开启,防止宕机数据丢失
- 脚本权限:检测脚本必须添加执行权限,否则Keepalived无法检测服务状态
- 虚拟路由ID一致:两台Keepalived的virtual_router_id必须相同,否则无法组建VRRP集群
- 优先级区分:主备节点优先级必须一高一低,避免VIP抢占混乱
十一、方案优势总结
- 架构极简稳定:双机热备无复杂集群逻辑,故障率极低,是中小型生产最优方案
- 数据强一致:双向实时复制,故障切换、节点恢复均无数据丢失
- 业务零感知:秒级VIP漂移,无需业务改配置、无需重启服务
- 运维成本低:部署简单、排查方便、无需复杂监控
- 自动自愈:故障自动切换、恢复自动追数、自动回迁