一、核心概念
- Keepalived :基于 VRRP 协议 实现高可用(HA) ,同时支持 4 层负载均衡(LVS)。
- 高可用:解决单点故障,主节点挂掉自动切换到备节点。
- 负载均衡:将请求分发到多台后端服务器,提升并发与性能。
- VRRP :虚拟路由冗余协议,一组设备对外提供 VIP(虚拟 IP)。
二、核心角色
- Master 主节点
- 持有 VIP,对外提供服务
- 发送 VRRP 广播报文
- Backup 备节点
- 监听 Master 状态
- Master 宕机后自动抢占为 Master
- VIP 虚拟 IP
- 对外统一入口,与业务 IP 无关
- LVS
- Linux 内核实现的 4 层负载均衡,Keepalived 直接管理
三、工作原理(高可用)
- 主备配置相同 VRRP 组
- Master 周期发送通告
- Backup 收不到报文(默认
3*advert_int)认为 Master 故障 - Backup 根据 优先级(priority) 选举新 Master
- 新 Master 绑定 VIP,发送免费 ARP,刷新网关 / 交换机 MAC 表
- 原 Master 恢复后可配置抢占 / 非抢占模式
四、Keepalived 三大模块
- VRRP 模块:实现高可用
- Health-check 健康检查:检测后端服务存活
- LVS 模块:实现 4 层负载均衡
五、典型架构
1)纯高可用(常用)
- Nginx + Keepalived
- Keepalived 只做 VIP 漂移,Nginx 做 7 层负载均衡
2)高可用 + 4 层负载均衡
- Keepalived(LVS)+ 后端 RS(Real Server)
- 直接用 LVS 做转发,性能更高
六、关键配置要点
1. 全局配置
plaintext
global_defs {
router_id LVS_01 # 本节点标识,唯一
}
2. VRRP 实例
plaintext
vrrp_instance VI_1 {
state MASTER|BACKUP
interface eth0 # 网卡
virtual_router_id 51 # 组ID,同组一致
priority 150 # 优先级,主>备
advert_int 1 # 通告间隔(s)
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 # VIP
}
}
3. 负载均衡 LVS 配置
plaintext
virtual_server 192.168.1.100 80 {
delay_loop 6 # 健康检查周期
lb_algo rr|wrr|lc|wlc # 调度算法
lb_kind DR|NAT|TUN # 转发模式
protocol TCP
real_server 192.168.1.11 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
七、LVS 三种转发模式
- NAT
- 进出都经过 LVS
- 配置简单,LVS 成为瓶颈
- DR(Direct Route,生产最常用)
- 请求进 LVS,响应直接回客户端
- 性能最高,同一 VLAN
- TUN
- IP 隧道,跨网段,复杂
八、负载均衡调度算法
- rr:轮询
- wrr:加权轮询
- lc:最少连接
- wlc:加权最少连接(默认)
九、健康检查方式
TCP_CHECK:端口探测HTTP_GET|SSL_GET:URL 探测MISC_CHECK:自定义脚本检查
十、生产常用场景
- Nginx 高可用
- 两台 Nginx + Keepalived
- 挂 Nginx 或挂机器都能自动切换
- LVS + Keepalived
- 高并发网关入口
- MySQL 高可用
- 配合 MGR / 主从 + 脚本判断主从
十一、常用命令
bash
运行
systemctl start|stop|restart keepalived
systemctl enable keepalived
# 查看VIP
ip addr
# 查看VRRP状态
cat /var/log/messages | grep VRRP
# 查看LVS
ipvsadm -Ln
十二、常见问题
- VIP 不漂移
- 防火墙 /iptables 未放 VRRP(协议号 112)
- virtual_router_id 不一致
- 优先级相同、网卡名错误
- 脑裂
- 主备之间网络互通异常,各自成为 Master
- 解决方案:绑定链路、增加仲裁、脚本互杀
- 切换后访问不通
- 未发送免费 ARP,交换机 MAC 表未更新
- 开启
garp_master_delay等参数