LVS+Keepalived 高可用负载均衡集群实战指南

前言

随着互联网业务规模扩大,单点服务器已无法满足高并发访问需求。本文详解基于Linux Virtual Server(LVS)和Keepalived搭建的高可用负载均衡架构,通过VIP漂移、健康检查和流量调度实现服务7×24小时不间断运行。


一、什么是LVS(Linux Virtual Server)

LVS是章文嵩博士开发的开源四层负载均衡解决方案,作为Linux内核模块实现高性能流量转发,核心组成:

  • IP虚拟服务器模块(IPVS):基于Netfilter框架实现流量调度
  • 管理工具ipvsadm:用于配置虚拟服务器规则
  • 集群节点调度器/RealServer:处理实际业务请求的服务器

官方定位:“A highly scalable and available server built on a cluster of real servers”


二、LVS的工作原理与调度算法

2.1 核心工作机制

采用OSI四层模型进行流量转发:
客户端 -> 调度器(VIP) -> RealServer -> 返回路径直接回源(非对称路由)
关键特性:

  • 支持百万级并发连接
  • CPU/内存消耗极低(<5%)
  • 支持TCP/UDP协议

2.2 工作模式对比

模式数据包修改回程路径性能损耗场景
DRMAC地址直接返回≈0%高性能需求场景
NATIP地址经调度器10-30%内部网络测试
TUN封装隧道直接返回5-15%跨地域部署

2.3 调度算法选择

算法特点适用场景
rr (Round Robin)轮询分发均匀分布
wrr (Weighted RR)加权轮询异构服务器集群
lc (Least Connection)最少连接优先动态负载变化场景
sh (Source Hashing)源IP哈希会话保持需求

三、什么是Keepalived

Keepalived是专为LVS设计的高可用性解决方案,通过VRRP协议实现:

  • VIP自动漂移
  • 节点健康检测
  • 配置同步管理

核心功能矩阵:
 VRRP 协议和 LVS 实现及故障转移流程


四、Keepalived工作原理深度解析

4.1 VRRP状态机

Keepalived 主备节点故障切换

状态转换条件:

  • MASTER定期发送VRRP通告包
  • BACKUP连续3个周期未收到通告触发接管
  • 优先级数值决定选举结果(默认抢占模式)

4.2 健康检查机制

多维度检测体系:
TCP连接检查 → 应用层HTTP检测 → 自定义脚本检查

典型检测参数:

connect_timeout 3    # 连接超时时间
nb_get_retry 3       # 重试次数
delay_before_retry 1 # 重试间隔

##五、生产环境详细配置过程
###5.1 网络规划

               +-------------------+
               | Client Browser    |
               +-------------------+
                        ||
                 VIP:192.168.3.1
         +----------------------------+
         | Keepalived Master (调度器)|
         | IP:192.168.3.2             |
         +----------------------------+
         +----------------------------+
         | Keepalived Backup (调度器)|
         | IP:192.168.3.3             |
         +----------------------------+
                   /            \
                  /              \
+--------------------+    +--------------------+
| Web Server 1       |    | Web Server 2       |
| IP:192.168.3.4     |    | IP:192.168.3.5     |
+--------------------+    +--------------------+

5.2 调度器基础配置

内核参数优化

cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.$(ls /sys/class/net | grep ens).send_redirects = 0
EOF
sysctl -p

5.3 Keepalived主配置文件

Master节点 /etc/keepalived/keepalived.conf:

global_defs {
    router_id LVS_MASTER
}
vrrp_instance VI_1 {
    state MASTER
    interface ens192
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass lvs123
    }
    virtual_ipaddress {
        192.168.3.1/24 dev ens192 label ens192:0
    }
}
virtual_server 192.168.3.1 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 192.168.3.4 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 1
        }
    }
    real_server 192.168.3.5 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 1
        }
    }
}

Backup节点配置差异:

- state MASTER
- priority 100
+ state BACKUP
+ priority 90

5.4 RealServer配置

# 环回口配置
cat > /etc/sysconfig/network-scripts/ifcfg-lo:0 << EOF
DEVICE=lo:0
IPADDR=192.168.3.1
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback-vip
EOF

ifup lo:0
route add -host 192.168.3.1 dev lo:0

# ARP参数优化
cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl -p

5.5 IPVS规则持久化

modprobe ip_vs
ipvsadm -C
ipvsadm -A -t 192.168.3.1:80 -s rr
ipvsadm -a -t 192.168.3.1:80 -r 192.168.3.4 -g -w 1
ipvsadm -a -t 192.168.3.1:80 -r 192.168.3.5 -g -w 1
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl enable ipvsadm

5.6 服务启动与验证

systemctl start keepalived
systemctl enable keepalived

#查看VIP绑定
ip addr show ens192

#查看转发规则
ipvsadm -ln

#测试访问
curl -I http://192.168.3.1

六、总结与运维建议

6.1 架构优势
✅ 单VIP可承载10万+并发
✅ 故障切换<1秒(VRRP心跳间隔1s)
✅ 无单点故障(双活架构)
6.2 生产运维要点
1.健康检查优化

  • HTTP检测建议添加URL路径(如 /health.html)
  • 复杂业务建议编写自定义检测脚本
  1. 日志监控
tail -f /var/log/messages  # 观察VRRP状态变化
  1. 防脑裂措施
  • 使用双网卡交叉线直连
  • 配置仲裁机制(如共享存储锁文件)
  1. 性能调优
# 开启IPVS连接跟踪
echo 1 > /proc/sys/net/ipv4/vs/conntrack
  1. 灾备方案
# 配置异地容灾keepalived实例
vrrp_instance DR_2 {
    unicast_peer 10.0.0.100  # 跨数据中心通信
    ...
}

“📌 最佳实践 :结合Prometheus+Grafana实现可视化监控,配合Alertmanager设置VIP漂移告警,构建完整的LVS集群管理体系。 "

更多推荐