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

前言

[一、LVS DR 模式负载均衡集群](#一、LVS DR 模式负载均衡集群)

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

[1.1 数据包流向分析](#1.1 数据包流向分析)

[1.2 DR 模式特点](#1.2 DR 模式特点)

[2. DR 模式部署步骤](#2. DR 模式部署步骤)

[2.0 环境规划](#2.0 环境规划)

[2.0.1 服务器规划](#2.0.1 服务器规划)

[2.1 配置负载调度器(Director Server)](#2.1 配置负载调度器(Director Server))

[(1) 系统配置](#(1) 系统配置)

[(2) 配置虚拟IP](#(2) 配置虚拟IP)

[(3) 调整内核参数](#(3) 调整内核参数)

[(4) 配置 LVS 服务及调度](#(4) 配置 LVS 服务及调度)

[2.2 配置节点服务器(Real Server)](#2.2 配置节点服务器(Real Server))

[(1) 配置 VIP 到 lo 接口](#(1) 配置 VIP 到 lo 接口)

[(2) ARP 参数调整,避免MAC冲突](#(2) ARP 参数调整,避免MAC冲突)

[(3) 安装 Web 服务](#(3) 安装 Web 服务)

[2.3 测试 LVS 集群](#2.3 测试 LVS 集群)

[3. LVS 面试知识点整理](#3. LVS 面试知识点整理)

[3.1 LVS 三种工作模式](#3.1 LVS 三种工作模式)

[3.2 LVS 调度算法](#3.2 LVS 调度算法)

[3.3 Nginx vs LVS vs HAProxy 区别](#3.3 Nginx vs LVS vs HAProxy 区别)

[二、LVS + Keepalived 高可用集群](#二、LVS + Keepalived 高可用集群)

[1. 概念与原理](#1. 概念与原理)

[1.1 Keepalived](#1.1 Keepalived)

[1.2 VRRP 工作原理](#1.2 VRRP 工作原理)

[1.3 Keepalived 主要模块](#1.3 Keepalived 主要模块)

[2. 脑裂问题与防护](#2. 脑裂问题与防护)

[2.1 脑裂(Split Brain)](#2.1 脑裂(Split Brain))

[2.2 原因](#2.2 原因)

[2.3 防护策略](#2.3 防护策略)

[3. 部署步骤](#3. 部署步骤)

[3.1 环境准备](#3.1 环境准备)

[3.2 安装与配置 LVS + Keepalived](#3.2 安装与配置 LVS + Keepalived)

[3.2.1 DR 服务器操作](#3.2.1 DR 服务器操作)

[3.2.2 配置 Keepalived](#3.2.2 配置 Keepalived)

[3.2.3 启动服务](#3.2.3 启动服务)

[3.2.4 内核参数优化](#3.2.4 内核参数优化)

[3.3 配置 Web 节点](#3.3 配置 Web 节点)

[3.4 测试](#3.4 测试)

[3.5 小结与注意事项](#3.5 小结与注意事项)

前言

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

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 区别
特性 Nginx LVS (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 核心进程、配置文件加载解析
vrrp VRRP 协议实现,高可用
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 小结与注意事项
项目 注意点
VIP DR 节点配置 VIP 网卡 ens33:0,Web 节点配置 lo:0
抢占模式 MASTER 恢复会抢回 VIP,非抢占模式需配置 nopreempt
健康检查 Keepalived 支持 TCP/HTTP 检查,可防止故障节点被调度
防火墙 Firewalld 需关闭,确保 VRRP 心跳消息畅通
脑裂防护 双心跳线、磁盘锁、仲裁 IP、脚本监控

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

相关推荐
qq_264220892 小时前
LVS负载均衡群集和LVS+Keepalived群集
运维·负载均衡·lvs
乌萨奇也要立志学C++2 小时前
【Linux】进程概念(二):进程查看与 fork 初探
linux·运维·服务器
雨落Liy2 小时前
Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
运维·nginx·负载均衡
Yyyy4823 小时前
Nginx负载均衡集群实验步骤
运维·nginx·负载均衡
绿箭柠檬茶4 小时前
Ubuntu 服务器配置转发网络访问
服务器·网络·ubuntu
獭.獭.4 小时前
Linux -- 信号【上】
linux·运维·服务器
hashiqimiya4 小时前
centos配置环境变量jdk
linux·运维·centos
hashiqimiya4 小时前
权限更改centos中系统文件无法创建文件夹,使用命令让普通用户具备操作文件夹
linux
路由侠内网穿透5 小时前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip