深入理解LVS DR模式与Keepalived:构建高性能高可用负载均衡架构

在现代互联网架构中,负载均衡和高可用性是确保服务稳定可靠的关键要素。今天我们来深入探讨LVS的DR(Direct Routing)模式与Keepalived的完美结合,看看它们如何共同构建高性能、高可用的服务架构。

什么是LVS?

LVS(Linux Virtual Server)是由章文嵩博士发起的开源项目,现在已经是Linux内核的一部分。它通过在操作系统内核层面实现负载均衡,将多台服务器组成一个高性能、高可用的虚拟服务器。

LVS支持三种主要工作模式:

NAT模式:通过地址转换实现负载均衡

TUN模式:通过IP隧道实现跨网络的负载均衡

DR模式:直接路由模式,性能最佳

模式 原理 优缺点
NAT

Director 改变数据包目标IP并转发,

RS响应包回到Director再发客户端

优点:节点可任意OS;缺点:

Director是瓶颈

DR

Director 改变目标MAC地址,RS直接

响应客户端

优点:Director不处理响应;缺

点:节点需与Director同网段

TUN

Director 封装IP包到隧道,RS解封直

接响应客户端

优点:Director不处理响应;缺

点:节点需支持IP隧道

一、LVS DR模式深度解析

1、DR模式的工作原理和优缺点

DR模式是LVS中最常用且性能最高的模式。它的核心思想是:数据包进来时经过负载均衡器,但回去时直接由真实服务器响应客户端,不经过负载均衡器

1、工作流程:

客户端发送请求到VIP(Virtual IP)

负载均衡器接收请求,根据调度算法选择一台真实服务器

负载均衡器将数据帧的MAC地址改为真实服务器的MAC地址

真实服务器接收到数据包,处理请求

真实服务器直接通过网关将响应返回给客户端

2、DR模式的优缺点

优点:

高性能:响应数据直接返回客户端,不经过负载均衡器

支持高并发:负载均衡器不会成为网络瓶颈

扩展性强:可以轻松添加更多真实服务器

缺点:

真实服务器和负载均衡器必须在同一局域网

需要配置ARP抑制,配置相对复杂

2、DR模式部署步骤

1、服务器规划

DR 服务器:192.168.10.23

Web 服务器1:192.168.10.16

Web 服务器2:192.168.10.17

vip:192.168.10.180

2、环境架构

深入理解LVS DR模式与Keepalived:构建高性能高可用负载均衡架构

深入理解LVS DR模式与Keepalived:构建高性能高可用负载均衡架构

3、配置负载调度器(Director Server)

1、系统配置


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


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
ifconfig ens33:0
3、调整内核参数


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 服务及调度


ipvsadm -C
ipvsadm -A -t 192.168.10.180:80 -s rr
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
ipvsadm -ln  # 查看节点状态,Route代表DR模式

4、配置节点服务器(Real Server)

1、配置 VIP 到 lo 接口


cd /etc/sysconfig/network-scripts/
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
ifconfig lo:0
route add -host 192.168.10.180 dev lo:0
2、ARP 参数调整,避免MAC冲突


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 服务


# 192.168.10.16
echo 'this is 192.168.10.16 web01!' > /var/www/html/index.html
 
# 192.168.10.17
echo 'this is 192.168.10.17 web02!' > /var/www/html/index.html

5、测试 LVS 群集

在客户端浏览器访问:http://192.168.10.180/

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

注意:LVS-DR 用户访问http://192.168.10.180/ 下次刷新时 延迟50秒

深入理解LVS DR模式与Keepalived:构建高性能高可用负载均衡架构

3、LVS调度算法

固定调度:rr、wrr、dh、sh

动态调度:lc、wlc、lblc

算法 描述
rr

轮询,每个RS均摊

wrr

加权轮询,权重高的分配多

dh

目的地址哈希分配

sh

源地址哈希分配

lc

最少连接数

wlc

加权最少连接

lblc

基于地址的最少连接

4、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 代理、动静分离、

中小型集群

超大规模集群、核心四层调度

高可用集群、对健康检查

要求高的业务

优缺点

优点:功能多,易上手

缺点:七层性能不如

LVS/HAProxy

优点:性能最强,稳定缺点:只

能四层,配置偏复杂

优点:专业负载均衡,健

康检查强缺点:不自带

Web 服务

总结:

Nginx:轻量、全能,适合 Web 服务和中小型负载均衡。

LVS:极致性能,适合四层超大规模集群,但功能单一。

HAProxy:专业负载均衡器,四层+七层都行,健康检查能力最强

二、LVS+Keepalived群集

1、Keepalived:高可用的守护者

Keepalived是一个基于VRRP协议的高可用解决方案,它可以检测服务器状态,并在主服务器故障时自动切换到备份服务器。

1、Keepalived的核心功能

健康检查:定期检查真实服务器的健康状态

故障转移:主节点故障时自动切换到备份节点

虚拟IP管理:管理VIP在节点间的漂移

LVS 集群管理

2 、VRRP 工作原理

MASTER 节点发送心跳(通告)给 BACKUP 节点。

BACKUP 节点收不到心跳时,接管 VIP。

MASTER 恢复时,可抢回 VIP(抢占模式)或不抢回(非抢占模式)。

默认多播地址:224.0.0.18

优先级决定 MASTER 节点(数值越大优先)。

3 、Keepalived 主要模块

模块 功能
core

核心进程、配置文件加载解析

vrrp

VRRP 协议实现,高可用

check

健康检查,支持 TCP/HTTP/脚本检查

2、脑裂问题与防护

1、脑裂(Split Brain)

两个节点失去心跳连接,均认为对方挂掉。

后果:

共享资源冲突

数据损坏(如数据库)



在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为
2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢
“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边
“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

2、原因



1. 心跳线故障(断线、老化)
 
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老
 
化)。
 
2. 网卡/驱动故障
 
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
 
3. 心跳网络设备故障
 
因心跳线间连接的设备故障(网卡及交换机)。
 
4. 仲裁机器异常
 
因仲裁的机器出问题
 
5. 防火墙阻挡 VRRP
 
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
 
6. 配置不一致(virtual_router_id、优先级、实例名)
 
Keepalive配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发
 
生。
 
7. vrrp实例名字不一致、优先级一致。

3.、防护策略

* 双心跳线冗余

  添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率。

* 磁盘锁(锁定共享资源)

  正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现 实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。

* 仲裁机制(Ping 参考 IP)

例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

* 脚本监控报警

4、部署步骤

1、环境准备



 
主 DR:192.168.10.80(MASTER)
备 DR:192.168.10.23(BACKUP)
VIP:192.168.10.180
Web 节点:
192.168.10.16
192.168.10.17
客户端:192.168.10.100

2、安装与配置 LVS + Keepalived

LVS DR + Keepalived:完美组合

将LVS DR模式与Keepalived结合,我们可以获得:

架构优势

高性能负载均衡:LVS DR模式提供高效的流量分发

自动故障转移:Keepalived确保服务的高可用性

健康状态监控:自动检测并剔除故障节点

无缝切换:故障转移对客户端透明

1)DR 服务器操作


systemctl stop firewalld
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs  # 检查模块
2)配置 Keepalived

文件:/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
    }
}
 
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.16 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.17 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
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
4)重启网络:


systemctl restart network
 
ifup ens33:0

5、启动服务



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

6、内核参数优化



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

7、配置 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.16
echo 'this is benet web!' > /var/www/html/index.html  # 192.168.10.17
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

8、测试

1、客户端访问 VIP:


http://192.168.10.180/

2、停掉 MASTER Keepalived:


systemctl stop keepalived

总结

LVS DR模式与Keepalived的组合为构建高性能、高可用的Web服务提供了强大的基础架构。通过直接路由模式,我们获得了接近线速的转发性能;通过Keepalived,我们实现了自动故障转移和服务高可用。

这种架构特别适合:

高并发Web服务

需要低延迟响应的应用

对服务可用性要求严格的场景

虽然初始配置相对复杂,但一旦部署完成,这套系统将为企业提供稳定可靠的负载均衡服务,是构建大型互联网服务的不二选择。

希望这篇博客能帮助大家更好地理解LVS DR模式和Keepalived的工作原理和配置方法。如果有任何问题或建议,欢迎在评论区留言讨论!

© 版权声明

相关文章

暂无评论

none
暂无评论...