Keepalived 与 LVS 集成及多实例配置详解
一、Keepalived 扩展功能:LVS 集成与多实例管理
1. Keepalived + LVS:四层负载均衡高可用方案
1.1 集成原理与架构
-
核心逻辑:Keepalived 通过 VRRP 实现 LVS 负载均衡节点的高可用,同时利用 LVS 的 IP 负载均衡技术(NAT/DR/TUN 模式)分发流量到后端服务器。
-
组件分工:
-
Keepalived:管理 VRRP 状态、VIP 漂移和节点健康检查。
-
LVS:基于 IP 层(OSI 第四层)实现流量转发,支持 TCP/UDP 协议(如 HTTP、MySQL、Redis)。
-
1.2 LVS 负载均衡模式
模式 | 原理 | 特点 |
---|---|---|
NAT | 负载均衡器作为网关,修改数据包源 / 目的 IP,后端服务器默认网关指向负载均衡器。 | 配置简单,需负载均衡器处理所有进出流量,适合小规模集群。 |
DR(直接路由) | 负载均衡器仅修改数据包目的 MAC,后端服务器共享 VIP 的 IP 配置。 | 性能高,后端服务器需配置相同子网 IP,适合高吞吐量场景。 |
TUN(隧道模式) | 负载均衡器与后端服务器通过 IP 隧道通信,支持跨子网部署。 | 支持地理分散的后端服务器,配置复杂。 |
1.3 配置示例(LVS DR 模式)
# Keepalived 配置文件(主节点)
global_defs {router_id LVS_MASTER
}vrrp_instance LVS_VIP {state MASTERinterface eth0virtual_router_id 60priority 100virtual_ipaddress {192.168.1.254/24 dev eth0 # VIP}
}# LVS 规则配置(通过 keepalived 动态注入)
virtual_server 192.168.1.254 80 {delay_loop 6lb_algo wlc # 加权最小连接算法lb_kind DR # DR 模式protocol TCPreal_server 192.168.1.101 80 {weight 10TCP_CHECK {connect_port 80connect_timeout 3retry 3}}real_server 192.168.1.102 80 {weight 8TCP_CHECK {connect_port 80connect_timeout 3retry 3}}
}
关键配置说明:
-
virtual_server
:定义 VIP 和服务端口(如 80)。 -
lb_algo
:负载均衡算法(支持 rr/wlc/lc 等)。 -
real_server
:后端服务器 IP 及权重,TCP_CHECK
实现健康检查。
1.4 后端服务器配置(DR 模式)
# 配置 VIP 别名(不启用 ARP 响应)
sudo ip addr add 192.168.1.254/32 dev lo:0
sudo arp -Ds 192.168.1.254 $(ifconfig eth0 | grep ether | awk '{print $2}') pub
原理:后端服务器通过回环接口(lo)绑定 VIP 的 /32
地址,避免响应 ARP 请求干扰负载均衡器。
2. 多实例支持:单机管理多个独立高可用组
2.1 应用场景
-
多业务隔离:同一物理机上运行多个 Keepalived 实例,分别管理不同业务的 VIP(如 Web 服务 VIP1、数据库 VIP2)。
-
混合负载均衡:同时部署 LVS 负载均衡实例和纯 VRRP 高可用实例。
2.2 实例隔离机制
-
配置文件隔离:每个实例使用独立的配置文件(如
/etc/keepalived/instance1.conf
、/etc/keepalived/instance2.conf
)。 -
端口隔离:
-
主实例使用默认端口(VRRP 通告 UDP 112、管理接口 TCP 1936)。
-
其他实例通过
vrrp_port
参数指定不同端口(如 113、1937)。
-
-
进程隔离:每个实例以独立进程运行,通过不同 PID 文件区分。
2.3 配置示例(双实例)
实例 1:Web 服务高可用(纯 VRRP)
# /etc/keepalived/web.conf
vrrp_instance WEB {state MASTERinterface eth0virtual_router_id 70priority 100virtual_ipaddress {192.168.1.254/24}track_script {check_web}
}
实例 2:数据库负载均衡(LVS + VRRP)
# /etc/keepalived/db.conf
global_defs {router_id LVS_DBvrrp_port 113 # 自定义 VRRP 端口
}vrrp_instance DB {state MASTERinterface eth0virtual_router_id 71priority 100virtual_ipaddress {192.168.1.255/24 # 独立 VIP}
}virtual_server 192.168.1.255 3306 {lb_kind NATreal_server 192.168.1.103 3306 {weight 5TCP_CHECK { ... }}
}
启动命令:
# 实例 1
sudo keepalived -f /etc/keepalived/web.conf -D# 实例 2
sudo keepalived -f /etc/keepalived/db.conf -D -p /var/run/keepalived_db.pid
2.4 管理与监控
- 状态查看:
# 实例 1 状态
sudo keepalived -S info -f /etc/keepalived/web.conf# 实例 2 状态
sudo keepalived -S info -f /etc/keepalived/db.conf
- 日志分离:每个实例配置独立日志文件:
global_defs {log_file /var/log/keepalived_web.log # 实例 1 日志
}
3. 扩展功能最佳实践
3.1 LVS 性能优化
-
算法选择:
-
短连接业务(如 HTTP):使用
rr
(轮询)或wrr
(加权轮询)。 -
长连接业务(如数据库):使用
wlc
(加权最小连接)。
-
-
连接调度:通过
persistence_timeout
配置会话保持(如电商购物车场景):
virtual_server 192.168.1.254 80 {persistence_timeout 300 # 5 分钟内同一客户端 IP 路由到同一后端
}
3.2 多实例资源分配
-
CPU 隔离:为不同实例分配独立 CPU 核心(通过
systemd-cgroups
)。 -
内存限制:使用
MemoryMax
参数限制实例内存占用:
# /etc/systemd/system/keepalived@.service.d/limit.conf
[Service]
MemoryMax=256M
3.3 云原生场景适配
- 容器化部署:在 Kubernetes 中使用
keepalived
+ipvs
实现四层负载均衡,替代传统 NodePort 服务:
apiVersion: apps/v1
kind: DaemonSet
metadata:name: keepalived-lvs
spec:template:spec:containers:- name: keepalivedimage: keepalived:latestvolumeMounts:- mountPath: /etc/keepalivedname: config
二、总结:扩展功能的价值与适用场景
-
Keepalived + LVS:提供 “高可用 + 负载均衡” 一体化解决方案,适合传统数据中心的四层流量分发场景(如金融交易、实时通信)。
-
多实例管理:满足复杂业务架构下的资源隔离需求,避免单一实例故障影响全局,同时优化硬件利用率。
在实际应用中,建议根据业务特性选择扩展功能:
-
无状态服务优先使用 LVS DR 模式,结合 Keepalived 实现高性能高可用。
-
多业务场景通过多实例隔离,配合云原生技术(如容器、K8s)实现混合架构部署。
通过合理利用 Keepalived 的扩展功能,可在不引入复杂中间件的前提下,构建灵活、高效的基础设施层。