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

✅ 一、LVS-DR 模式概述

1.1 工作原理(Direct Routing)

  1. 客户端请求发送到 VIP(虚拟 IP),到达 Director。

  2. Director 修改目标 MAC 地址为 Real Server MAC,IP 地址不变

  3. Real Server 收到请求,通过 lo 接口配置 VIP 处理请求。

  4. Real Server 直接响应客户端,不经过 Director

1.2 DR 模式特点

  • Director 与 Real Server 必须在同一局域网。

  • Real Server 网关不能指向 Director。

  • 响应报文由 Real Server 直接发送给客户端。

  • Real Server 需配置 VIP 到 lo 接口,并抑制 ARP 响应。


🧱 二、LVS-DR 模式部署步骤

2.1 环境规划

角色 IP 地址
Director 192.168.10.150
Real Server1 192.168.10.100
Real Server2 192.168.10.80
VIP 192.168.10.180

2.2 Director 配置步骤

① 系统初始化
复制代码
systemctl stop firewalld
setenforce 0
modprobe ip_vs
yum install -y ipvsadm
② 配置虚拟 IP(VIP)
复制代码
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
---
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
---
ifup ens33:0
③ 内核参数优化
复制代码
vim /etc/sysctl.conf
---
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
---
sysctl -p
④ 配置 LVS 转发规则
复制代码
ipvsadm -C
ipvsadm -A -t 192.168.10.180:80 -s rr
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.100:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.80:80 -g
ipvsadm -ln

2.3 Real Server 配置步骤

① 配置 VIP 到 lo:0
复制代码
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
---
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
---
ifup lo:0
route add -host 192.168.10.180 dev lo:0
② 抑制 ARP 响应
复制代码
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
参数 作用
arp_ignore = 1 只响应本接口 IP 的 ARP 请求 防止 Real Server 响应 VIP 的 ARP 请求
arp_announce = 2 不使用非本地接口地址作为 ARP 源 防止 Real Server 主动用 VIP 发起 ARP
③ 安装 Web 服务
复制代码
yum install -y httpd
systemctl start httpd

# RS1
echo "this is 192.168.10.100 web01!" > /var/www/html/index.html

# RS2
echo "this is 192.168.10.80 web02!" > /var/www/html/index.html

2.4 测试验证

等50s后,它可能会转到第二个网页(也有可能转不到)

  • 注意:若启用 persistence_timeout 50,则 50 秒内同一客户端会固定访问同一节点。

📚 三、LVS 面试知识点速览

3.1 三种工作模式对比

模式 原理简述 优缺点
NAT Director 修改目标 IP 并转发 简单但性能瓶颈在 Director
DR 修改目标 MAC,RS 直接响应客户端 性能高,但要求同网段
TUN 封装 IP 隧道,RS 解封后响应 可跨网段,但需支持隧道协议

3.2 常用调度算法

算法 描述
rr 轮询
wrr 加权轮询
lc 最少连接
wlc 加权最少连接
sh 源地址哈希
dh 目标地址哈希

3.3 LVS vs Nginx vs HAProxy

特性 LVS Nginx HAProxy
工作层级 四层 四/七层 四/七层
性能 极高(内核态)
健康检查 依赖 Keepalived 支持 强大
配置复杂度 中等
场景 大规模四层调度 Web 服务、反向代理 专业负载均衡

🔄 四、LVS + Keepalived 高可用方案

4.1 Keepalived 核心功能

  • 基于 VRRP 实现 VIP 漂移

  • 支持 LVS 集群管理

  • 提供健康检查(TCP/HTTP)

  • 实现故障自动切换(Failover)


4.2 脑裂问题与防护

什么是脑裂?

两台节点因心跳中断,同时认为自己是 MASTER,导致 VIP 冲突、服务异常。

常见原因
  • 心跳线故障

  • 防火墙拦截 VRRP

  • 配置不一致(如 virtual_router_id

防护策略
  • 双心跳线冗余

  • 配置仲裁 IP(如网关)

  • 使用磁盘锁或脚本监控

  • 保证防火墙放行 VRRP(多播地址:224.0.0.18)


🧪 五、LVS + Keepalived 部署结构

角色 IP 地址
MASTER 192.168.10.150
BACKUP 192.168.10.160
VIP 192.168.10.180
Web1/Web2 192.168.10.100 /192.168.10.80

DR服务器的配置

复制代码
systemctl stop firewalld
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs  # 检查模块

Keepalived 配置示例(MASTER)

复制代码
vim /etc/keepalived/keepalived.conf

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 10
    priority 100            # MASTER 高于 BACKUP
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        192.168.10.180  # 这里的VIP虚拟地址要改一下
    }
}

virtual_server 192.168.10.180 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.10.100 80 {   # 这里的地址要改一下
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.80 80 {    # 这里的地址要改一下
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

Keepalived 配置示例(BACKUP)

复制代码
global_defs {
    router_id LVS_02  # 这里改成LVS_02
    smtp_server 127.0.0.1
}

vrrp_instance VI_1 {
    state BACKUP     # 这里改成BACKUP
    interface ens33
    virtual_router_id 10
    priority 80   # 优先级改的要比MASTER要小就可以了  
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        192.168.10.180   # IP地址记得改一下
    }
}

virtual_server 192.168.10.180 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.10.100 80 {   # 这里的IP地址要改一下
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.80 80 {   # 这里的IP地址改一下
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

VIP 配置

复制代码
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255

重启网络

复制代码
systemctl restart network
ifup ens33:0

启动服务

复制代码
systemctl start keepalived
ip addr  # 查看 VIP 是否生效
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln  # 查看 LVS 配置

内核参数优化

复制代码
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

配置 Web 节点

当然我这里是按照前面的做的,并没有按照下面的代码做的

复制代码
systemctl stop firewalld
setenforce 0
yum -y install httpd
systemctl start httpd

echo 'this is kgc web!' > /var/www/html/index.html  # 192.168.10.100
echo 'this is benet web!' > /var/www/html/index.html  # 192.168.10.80

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255

service network restart
ifup lo:0
route add -host 192.168.10.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

测试

客户端访问 VIP:http://192.168.10.180/

  • 应轮询显示不同节点页面内容。

等50s后,它可能会转到第二个网页(也有可能转不到)

  • 注意:若启用 persistence_timeout 50,则 50 秒内同一客户端会固定访问同一节点。

停掉 MASTER Keepalived:

systemctl stop keepalived

查询ip

复制代码
ip addr

192.168.10.150

没有发现192.168.10.180这个虚拟IP

192.168.10.160

现在192.168.10.160获得虚拟IP

重启之后

systemctl start keepalived

192.168.10.150重新获得IP地址

✅ 六、总结与建议

  • LVS-DR 是性能最优的四层负载均衡方式。

  • Keepalived 提供高可用保障,避免单点故障。

  • 注意 ARP 抑制、VIP 配置、脑裂防护、防火墙设置

  • 健康检查和日志监控是生产环境必不可少的部分。

相关推荐
XIAOHEZIcode17 分钟前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207016 小时前
如何搭建本地yum源(上)
运维
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦4 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw