Keepalived 高可用与负载均衡
一、基础概念
1. 什么是 Keepalived
- 基于 VRRP 协议 实现的高可用(HA)工具
- 核心作用:单点故障自动切换,保证服务不间断
- 同时集成 LVS 负载均衡 管理功能,可直接做四层负载均衡
2. 核心应用场景
- 高可用(HA)
- 双机热备 / 双主:网关、Nginx、MySQL、Redis 等
- 虚拟 IP(VIP)漂移,对上层透明
- 负载均衡(LB)
- 配合 LVS 做四层(TCP/UDP)负载均衡
- 支持健康检查,自动剔除异常后端
3. 关键术语
- VRRP:虚拟路由冗余协议,多台设备虚拟出一个网关
- Master:主节点,持有 VIP,对外提供服务
- Backup:备节点,监听主节点,故障时接管
- VIP:虚拟 IP,对外统一访问入口
- LVS:Linux Virtual Server,内核四层负载均衡
- 健康检查:检测后端服务存活,自动上下线
二、工作原理
1. VRRP 高可用原理
- 多台服务器组成一个 VRRP 集群
- 选举 Master 节点,绑定 VIP
- Master 定时发送 VRRP 广播(默认 1s)
- Backup 收不到广播则认为主故障,抢占 VIP
- 切换后自动发送免费 ARP,刷新交换机 / 客户端 ARP 表
2. 负载均衡原理(LVS+Keepalived)
- Keepalived 配置虚拟服务(VIP:PORT)
- 定义后端真实服务器(RS)池
- 配置调度算法(rr、wrr、lc 等)
- 自动对 RS 做健康检查(HTTP/TCP/PING)
- 异常 RS 自动剔除,恢复后自动加入
三、安装与基础配置
1. 安装(CentOS/RHEL)
bash
运行
yum install -y keepalived
2. 配置文件路径
plaintext
/etc/keepalived/keepalived.conf
3. 核心配置结构
global_defs:全局配置vrrp_instance:VRRP 实例(高可用核心)virtual_server:虚拟服务(负载均衡)real_server:后端真实服务器
四、高可用(HA)典型配置
1. 主节点(Master)配置
plaintext
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
}
2. 备节点(Backup)配置
plaintext
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
}
3. 关键参数说明
router_id:集群内唯一标识state:初始角色(MASTER/BACKUP)interface:绑定 VIP 的网卡virtual_router_id:集群 ID,同集群必须一致priority:优先级,值越大越易成为主advert_int:VRRP 报文发送间隔virtual_ipaddress:VIP 地址
五、负载均衡(LVS)配置
在 keepalived.conf 中添加 virtual_server 配置:
plaintext
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.1.11 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
}
1. 调度算法(lb_algo)
rr:轮询(默认)wrr:加权轮询lc:最少连接wlc:加权最少连接sh:源地址哈希(会话保持)
2. LVS 工作模式(lb_kind)
DR:直接路由(生产最常用,性能最高)NAT:网络地址转换TUN:IP 隧道
3. 健康检查方式
TCP_CHECK:TCP 端口检查HTTP_GET:HTTP 路径检查SSL_GET:HTTPS 检查PING_CHECK:Ping 检查
六、服务管理与状态查看
bash
运行
# 启动
systemctl start keepalived
# 开机自启
systemctl enable keepalived
# 查看状态
systemctl status keepalived
# 查看 VIP
ip addr show eth0
# 查看 VRRP 日志
tail -f /var/log/messages
七、常见高可用扩展
1. 抢占与非抢占模式
- 默认:抢占模式,主恢复后自动抢回 VIP
- 非抢占:添加
nopreempt,主恢复不抢回
plaintext
vrrp_instance VI_1 {
...
nopreempt
}
2. 脚本监控(Nginx/MySQL 高可用)
通过 track_script 监控服务状态,异常则降权触发切换
plaintext
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
...
track_script {
check_nginx
}
}
八、常见问题与排错
- VIP 不漂移
- 防火墙未放通 VRRP(协议号 112)
virtual_router_id不一致- 优先级配置错误
- 负载均衡不生效
- LVS 内核模块未加载
- RS 未配置 lo:0 绑定 VIP(DR 模式)
- 切换后访问不通
- 未发送免费 ARP,网关 ARP 表未刷新
- 网卡配置、子网掩码错误
九、生产使用总结
- Keepalived 主打高可用,负载均衡依赖 LVS
- 四层负载均衡用:Keepalived+LVS
- 七层负载均衡用:Keepalived+Nginx
- 关键业务建议:双主模式 + 服务监控脚本
- 注意时间同步、防火墙规则、网卡名称一致性