目录

深入理解-LVS-DR-模式与-Keepalived-高可用集群

深入理解 LVS-DR 模式与 Keepalived 高可用集群

前言

在当今高并发互联网应用中,单台服务器往往难以应对巨大的流量压力,且存在单点故障风险。负载均衡技术通过将流量分发到多台服务器,能够有效提升系统处理能力和服务可靠性。

LVS(Linux Virtual Server)作为内核级四层负载均衡器,以其卓越性能成为构建大型集群的首选。其中的DR(Direct Routing)模式通过让真实服务器直接响应客户端请求,避免了负载均衡器成为瓶颈,是实现高性能负载均衡的理想方案。

本文将深入讲解LVS-DR模式的工作原理和部署实践,并详细介绍如何通过Keepalived实现高可用集群,为构建稳定可靠的网络服务提供实用指导。

一、LVS DR 模式负载均衡集群

1. LVS DR 模式工作原理(Direct Routing)

1.1 数据包流向分析
  1. 客户端 → Director(负载均衡器)

    • 客户端发送请求到 VIP(虚拟IP),数据包到达 Director Server 内核空间。
  2. Director → Real Server(真实服务器)

    • Director 判断数据包目标IP为VIP,是集群服务请求,修改:

      • 目标MAC:Real Server MAC
      • 源MAC:Director Server MAC
    • IP地址保持不变,发送到 Real Server。

  3. Real Server 处理请求

    • 接收报文(目标MAC为自身),通过 lo 接口配置 VIP 处理请求。
    • 响应报文源IP为 VIP,目标IP为客户端(CIP),直接发送给客户端
  4. 客户端接收响应

    • 响应报文不经过 Director Server。
1.2 DR 模式特点
  • Director Server 与 Real Server 必须在同一物理网络。
  • Real Server 可以使用私有或公网地址。
  • Director 仅作为请求入口,不作为网关。
  • 所有请求经过 Director,响应直接由 Real Server 发送。
  • Real Server 的网关不能指向 Director Server。
  • Real Server 的 lo 接口配置 VIP。

2. DR 模式部署步骤

2.0 环境规划
2.0.1 服务器规划
  • DR 服务器:192.168.114.129
  • Web 服务器1:192.168.114.252
  • Web 服务器2:192.168.114.253
  • VIP:192.168.114.180
2.1 配置负载调度器(Director Server)

环境部署

  • IP:192.168.114.129
  • VIP:192.168.114.180
(1) 系统配置

bash

systemctl stop firewalld.service 
systemctl stop iptables.service
setenforce 0 
modprobe ip_vs 
yum -y install ipvsadm 
(2) 配置虚拟IP

bash

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
# 内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
​
ifup ens33:0    # 开启网卡
ifconfig ens33:0     # 查看网卡
(3) 调整内核参数

bash

vim /etc/sysctl.conf
# 添加
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
(4) 配置 LVS 服务及调度

bash

# 如果有报错文件不存在,需要先添加规则再保存
ipvsadm-save > /etc/sysconfig/ipvsadm      # 保存导出
ipvsadm-restore < /etc/sysconfig/ipvsadm   # 恢复
​
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.114.180:80 -s rr
ipvsadm -a -t 192.168.114.180:80 -r 192.168.114.252:80 -g
ipvsadm -a -t 192.168.114.180:80 -r 192.168.114.253:80 -g
ipvsadm -ln  # 查看节点状态,Route代表DR模式

2.2 配置节点服务器(Real Server)
  • IP:192.168.114.252192.168.114.253
(1) 配置 VIP 到 lo 接口

bash

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
# 内容
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
​
ifup lo:0
ifconfig lo:0
route add -host 192.168.114.180 dev lo:0
(2) ARP 参数调整,避免MAC冲突

bash

vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
(3) 安装 Web 服务

bash

# 选择一种方式安装Web服务
# 1、编译安装nginx
# 2、yum install nginx (需要epel-release源)
# 3、yum install httpd
​
# 192.168.114.16
echo 'this is 192.168.114.252 web01!' > /var/www/html/index.html
​
# 192.168.114.17
echo 'this is 192.168.114.253 web02!' > /var/www/html/index.html

2.3 测试 LVS 集群
  • 在客户端浏览器访问:http://192.168.114.180/
  • 应轮询显示不同节点页面内容。

注意:LVS-DR 用户访问 http://192.168.114.180/ 下次刷新时可能有约50秒延迟


3. LVS 面试知识点整理

3.1 LVS 三种工作模式
模式原理优缺点
NAT(VS/NAT)Director 改变数据包目标IP并转发,RS响应包回到Director再发客户端优点:节点可任意OS;缺点:Director是瓶颈
DR(VS/DR)Director 改变目标MAC地址,RS直接响应客户端优点:Director不处理响应;缺点:节点需与Director同网段
TUN(VS/TUN)Director 封装IP包到隧道,RS解封直接响应客户端优点:Director不处理响应;缺点:节点需支持IP隧道
3.2 LVS 调度算法
  • 固定调度:rr、wrr、dh、sh
  • 动态调度:lc、wlc、lblc
算法描述
rr轮询,每个RS均摊
wrr加权轮询,权重高的分配多
dh目的地址哈希分配
sh源地址哈希分配
lc最少连接数
wlc加权最少连接
lblc基于地址的最少连接

3.3 Nginx vs LVS vs HAProxy 区别
特性NginxLVS (Linux Virtual Server)HAProxy
定位Web 服务器 + 反向代理 + 负载均衡内核级四层负载均衡专业负载均衡器(四层+七层)
工作层级四层(TCP)+ 七层(HTTP/HTTPS)四层(TCP/UDP,传输层)四层 + 七层
性能高(软件级,单机可达十万级并发)极高(内核态,百万级并发)高(接近 Nginx,但更专注负载均衡)
功能特点- 静态资源服务 - 反向代理 - 缓存 - 支持 HTTP/HTTPS 负载均衡- 高性能转发 - 调度算法丰富(RR、LC、SH…) - 内核态转发,几乎无性能损耗- 专注于负载均衡 - 健康检查更强大 - 支持会话保持、SSL 卸载等
健康检查简单(TCP/HTTP)依赖 Keepalived 或其他工具强大(多协议、多方式)
配置复杂度简单较复杂(需 ipvsadm/keepalived 配合)中等(配置文件灵活)
适用场景Web 代理、动静分离、中小型集群超大规模集群、核心四层调度高可用集群、对健康检查要求高的业务

一句话总结:

  • Nginx:轻量、全能,适合 Web 服务和中小型负载均衡。
  • LVS:极致性能,适合四层超大规模集群,但功能单一。
  • HAProxy:专业负载均衡器,四层+七层都行,健康检查能力最强。

二、LVS + Keepalived 高可用集群

1. 概念与原理

1.1 Keepalived
  • 基于 VRRP 协议实现高可用(HA)。

  • 初衷是为 LVS 负载均衡提供高可用方案,后来支持其他服务(如 Nginx、MySQL 等)。

  • 功能:

    1. LVS 集群管理
    2. 节点健康检查(Health Check)
    3. 故障自动切换(Failover)
    4. 高可用 VIP(虚拟 IP)接管
1.2 VRRP 工作原理
  • MASTER 节点发送心跳(通告)给 BACKUP 节点。
  • BACKUP 节点收不到心跳时,接管 VIP。
  • MASTER 恢复时,可抢回 VIP(抢占模式)或不抢回(非抢占模式)。
  • 默认多播地址:224.0.0.18
  • 优先级决定 MASTER 节点(数值越大优先)。
1.3 Keepalived 主要模块
模块功能
core核心进程、配置文件加载解析
vrrpVRRP 协议实现,高可用
check健康检查,支持 TCP/HTTP/脚本检查

2. 脑裂问题与防护

2.1 脑裂(Split Brain)
  • 两个节点失去心跳连接,均认为对方挂掉。

  • 后果:

    • 共享资源冲突
    • 数据损坏(如数据库)
2.2 原因
  1. 心跳线故障(断线、老化)
  2. 网卡/驱动故障
  3. 心跳网络设备故障
  4. 仲裁机器异常
  5. 防火墙阻挡 VRRP
  6. 配置不一致(virtual_router_id、优先级、实例名)
  7. vrrp实例名字不一致、优先级一致
2.3 防护策略
  • 双心跳线冗余
  • 磁盘锁(锁定共享资源)
  • 仲裁机制(Ping 参考 IP)
  • 脚本监控报警

3. 部署步骤

3.1 环境准备
  • 主 DR:192.168.114.129(MASTER)

  • 备 DR:192.168.114.251(BACKUP)

  • VIP:192.168.114.180

  • Web 节点:

    • 192.168.114.252
    • 192.168.114.253
  • 客户端:192.168.114.1


3.2 安装与配置 LVS + Keepalived
3.2.1 DR 服务器操作

bash

systemctl stop firewalld
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs  # 检查模块
3.2.2 配置 Keepalived
  • 文件:/etc/keepalived/keepalived.conf
  • 关键配置:

text

global_defs {
    router_id LVS_01        # MASTER 为 LVS_01,BACKUP 为 LVS_02
    smtp_server 127.0.0.1
}
​
vrrp_instance VI_1 {
    state MASTER            # BACKUP 节点写 BACKUP
    interface ens33
    virtual_router_id 100
    priority 100            # MASTER 高于 BACKUP
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        192.168.114.180
    }
}
​
virtual_server 192.168.114.180 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.114.252 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.114.253 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
  • VIP 配置:

bash

vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
  • 重启网络:

bash

systemctl restart network
ifup ens33:0
3.2.3 启动服务

bash

systemctl start keepalived
ip addr  # 查看 VIP 是否生效
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln  # 查看 LVS 配置
3.2.4 内核参数优化

bash

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

3.3 配置 Web 节点

bash

systemctl stop firewalld
setenforce 0
yum -y install httpd
systemctl start httpd
​
echo 'this is kgc web!' > /var/www/html/index.html  # 192.168.114.252
echo 'this is benet web!' > /var/www/html/index.html  # 192.168.114.253
​
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
​
service network restart
ifup lo:0
route add -host 192.168.114.180 dev lo:0
​
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p

3.4 测试
  1. 客户端访问 VIP:

    text

    http://192.168.114.180/
  2. 停掉 MASTER Keepalived:

    bash

    systemctl stop keepalived
    • 观察 BACKUP 节点接管 VIP 是否成功。
    • 再启动 MASTER,观察 VIP 是否回归(抢占或非抢占模式)。

3.5 小结与注意事项
项目注意点
VIPDR 节点配置 VIP 网卡 ens33:0,Web 节点配置 lo:0
抢占模式MASTER 恢复会抢回 VIP,非抢占模式需配置 nopreempt
健康检查Keepalived 支持 TCP/HTTP 检查,可防止故障节点被调度
防火墙Firewalld 需关闭,确保 VRRP 心跳消息畅通
脑裂防护双心跳线、磁盘锁、仲裁 IP、脚本监控

通过本文的详细讲解,您应该对 LVS-DR 模式的工作原理、部署步骤以及如何结合 Keepalived 实现高可用集群有了全面的了解。这些知识对于构建高性能、高可用的负载均衡系统至关重要。