lvs 集群技术

一.lvs概述

LVS 是 Linux Virtual Server 的缩写,中文通常称为 Linux 虚拟服务器。它是一个开源的、高性能的、基于 四层(传输层,TCP/UDP) 的 服务器负载均衡 解决方案。

简单来说,LVS 的核心功能就是:将客户端的请求流量智能地、高效地分发到后端的多个真实服务器上,对外表现为一个单一的、高性能、高可用的虚拟服务器。

LVS 的核心组件和工作原理

  1. 负载均衡器 / 调度器 / 前端服务器:

    通常被称为 Director。这是 LVS 的核心,运行着 LVS 软件(主要是 ipvs 内核模块和用户空间的管理工具 ipvsadm)。它配置有一个或多个 虚拟 IP 地址,这些 VIP 是对外提供服务的地址,客户端直接访问这些 VIP。Director 接收所有到达 VIP 的客户端请求。根据配置的 负载均衡算法 和 工作模式,Director 决定将请求转发给后端哪一台真实服务器。

  2. 真实服务器池 / 后端服务器:

    通常被称为 Real Server。这是实际处理用户请求、运行业务应用(如 Web 服务器、应用服务器、数据库服务器等)的一组物理或虚拟机。每台 Real Server 都有自己的 真实 IP 地址。它们处理 Director 转发过来的请求,并将响应返回给客户端(具体返回路径取决于工作模式)。

  3. 共享存储 (可选但推荐):

    为了保证所有 Real Server 提供一致的服务内容(尤其是动态内容或需要会话保持的应用),通常需要一个共享存储系统(如 NFS, iSCSI, 分布式文件系统等)。这样,无论请求被分配到哪台 Real Server,用户看到的数据都是一致的。

LVS 的三种主要工作模式

LVS 的强大之处在于它支持不同的工作模式,以适应不同的网络环境和性能需求:

  1. NAT 模式:

    (1)原理: Director 修改请求和响应的 IP 地址。
    (2)Real Server 处理请求,响应目标 IP 是 Director 的 DIP -> Director 修改响应源 IP 为           VIP,目标 IP 为客户端 CIP,发送回客户端。
    (3)客户端请求到达 VIP -> Director 修改目标 IP 为选中的 Real Server 的 RIP,源 IP 改            为 Director 的 DIP。
    (4)优点: 配置相对简单,Real Server 可以是任何操作系统,只需要设置默认网关                      为 Director 的 DIP。
    (5)缺点: 请求和响应都要经过 DirectorDirector 容易成为性能瓶颈(尤其是响应流量大        的场景)。Real Server 的 RIP 通常是私有地址。
    (6)适用场景: 网络结构简单,Real Server 数量不多,且响应流量不大的内部应用。

  2. DR 模式:

    (1)原理: Director 和 Real Server 都配置相同的 VIP,但只有 Director 的 VIP 对外响应 ARP 请求(通过 ARP 抑制实现)。Director 通过修改请求的 目标 MAC 地址 为选中的 Real Server 的 MAC 地址,将请求转发到二层。Real Server 处理请求后,直接 将响应发送回客户端(源 IP 是 VIP,不经过 Director)。
    (2)优点: 性能极高!响应流量不经过 Director,大大减轻了 Director 的负担,能处理海量并发。是 最常用、推荐 的模式。
    (3)缺点: 配置相对复杂(需要在 Real Server 上配置 VIP 并做 ARP 抑制要求 Director 和所有 Real Server 在同一个物理二层网络(或 VLAN)中,不能跨路由器。
    (4)适用场景: 高性能要求、大流量、同网段部署的场景(如数据中心内部)。

  3. TUN 模式:

    • 原理: Director 将收到的客户端请求包封装在一个新的 IP 包中(IP隧道/IPIP),目标 IP 是选中的 Real Server 的 RIP。Real Server 收到后解封装,处理原始请求,然后 直接 将响应发送回客户端(源 IP 是 VIP)。

    • 优点: Real Server 可以分布在不同的地理位置(跨网段、跨机房),响应流量不经过 Director

    • 缺点: 配置最复杂,需要 Real Server 支持隧道协议并进行配置,封装/解封装带来额外的 CPU 开销。隧道封装可能导致 MTU 问题。

    • 适用场景: Real Server 需要跨地域部署且性能要求不是极端苛刻的场景。

LVS 的核心调度算法

  Director 根据配置的算法决定将新请求分配给哪台 Real Server。常见算法有:

        轮询: 依次将请求分配给每台服务器。

        加权轮询: 根据服务器权重(处理能力)按比例分配请求。

        最少连接: 将新请求分配给当前活动连接数最少的服务器。

        加权最少连接: 在最少连接基础上考虑服务器权重。

        基于局部性的最少连接: 主要用于缓存集群,将相同目标 IP 的请求尽量发给同一台服务器          (提高缓存命中率)。

        目标地址散列: 根据目标 IP 地址散列值分配服务器,使相同目标 IP 的请求发给同一台服务          器。

        源地址散列: 根据源 IP 地址散列值分配服务器,使同一客户端的请求尽量发给同一台服务            器(用于需要会话保持但应用层不支持的情况)。

LVS 的关键优势

  1. 高性能与可扩展性: 核心工作在 Linux 内核空间(ipvs),转发效率极高,能轻松处理每秒数十万甚至百万级别的并发连接。通过简单地增加 Real Server 就能线性扩展服务能力。

  2. 高可用性: 结合 Keepalived 等工具,可以实现 Director 的主备(或主主)热备。当主 Director 故障时,备用 Director 能自动接管 VIP 和服务,实现故障转移。也可以监控 Real Server 的健康状态,自动剔除故障节点。

  3. 透明性: 对客户端和后端应用服务器都是透明的。客户端只看到一个 VIP。应用服务器不需要做特殊修改(在 DR/TUN 模式下响应直接回客户端)。

  4. 灵活性: 支持多种工作模式(NAT/DR/TUN)和丰富的负载均衡算法,适应不同的网络环境和业务需求。

  5. 开源与低成本: 基于 Linux,完全免费开源,利用通用硬件即可构建高性能负载均衡集群。

LVS 的局限性/考虑因素

  1. 配置复杂性: 相比应用层负载均衡器(如 Nginx, HAProxy),LVS(尤其是 DR/TUN 模式)的配置相对复杂,需要一定的网络知识。

  2. 四层负载均衡: 只能基于 IP 地址、端口和协议(TCP/UDP)进行转发,无法理解应用层内容(如 HTTP URL, Header, Cookie)。对于需要七层智能路由的场景(如根据 URL 分发),需要结合 Nginx/HAProxy 使用(LVS 作为前端四层负载,Nginx/HAProxy 做七层负载)。

  3. 会话保持: 默认情况下,LVS 本身不提供应用层会话保持(Session Persistence)。在需要会话保持的场景:可以使用 源地址散列 调度算法(效果有限,同一 NAT 后的用户会被视为同一客户端)。最好在应用层解决(如 Session 共享到 Redis)。或者使用能感知应用层的负载均衡器(如 Nginx)。

  4. 单点故障: 虽然 Director 可以通过 Keepalived 实现高可用,但在 NAT 模式下,Director 本身仍是性能瓶颈和潜在单点(需确保备机性能足够)。DR/TUN 模式避免了响应流量的瓶颈。

典型应用场景

        高流量网站/Web 服务: 负载均衡 Web 服务器集群。

        应用服务器集群: 负载均衡应用服务器(如 Tomcat, Java 应用)。

        数据库读负载均衡: 负载均衡数据库的只读从库(需要应用支持或通过中间件)。

        缓存服务器集群: 负载均衡 Memcached, Redis 等缓存服务器。

        邮件服务集群: 负载均衡 SMTP, POP3, IMAP 服务器。

        媒体/视频流服务: 负载均衡大流量媒体服务器。

        防火墙负载均衡: 扩展防火墙的处理能力。

二.部署lvs nat模式集群

lvs 集群技术_第1张图片

1.ipvsadm命令

ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
ipvsadm -Z [-t|u|f service-address] 清楚计数器

2.LVS集群中的参数

1.管理集群服务中的增删改                                                                                                                -A         #添加
-E         #修改
-t          #tcp服务
-u         #udp服务
-s         #指定调度算法,默认为 WLC
-p         #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一 Realserver
-f         #firewall mask 火墙标记,是一个数字
2. 管理集群中 RealServer 的增删改
-a         #添加 realserver
-e         #更改 realserver
-t          #tcp协议
-u         #udp协议
-f          #火墙 标签
-r          #realserver地址
-g         #直连路由模式
-i          #ipip隧道模式
-m         #nat模式
-w         #设定权重
-Z         #清空计数器
-C         #清空 lvs 策略
-L         #查看 lvs 策略
-n         #不做解析
--rate :输出速率信息
 

2.配置环境
node1    ip NAT :172.25.254.100/24        VIP 仅主机:192.168.10.100
node2    ip 仅主机:192.168.10.11/24
node3    ip 仅主机:192.168.10.22/24
node4    ip NAT:172.25.254.111/24

###关闭火墙(所有主机)
systemctl stop firewalld.service 
 
###安装ipvsadm(仅在lvs主机)
dnf install ipvsadm -y
 
###安装并应用httpd用于验证实验(仅在RS1和RS2)
dnf install httpd -y
 
#RS1
echo RS1 - 192.168.10.11 > /var/www/html/index.html 
systemctl enable --now httpd    #开启httpd服务
#RS2
echo RS2 - 192.168.10.22 > /var/www/html/index.html 
systemctl enable --now httpd
 
###使不同网段可通过lvs通讯
#lvs启用内核路由功能
echo net.ipv4.ip_forward=1 > /etc/sysctl.conf 

3.配置

#lvs
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.10.22:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.10.11:80 -m
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 192.168.10.11:80             Masq    1      0          0         
  -> 192.168.10.22:80             Masq    1      0          0      

4.测试

在client中
[root@client ~]# for i in {1..6}; do curl 172.25.254.100; done
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22

三.部署lvs DR模式集群

lvs 集群技术_第2张图片

1.配置环境

client         IP:172.25.254.10 #NAT模式

router         IP:eth0 192.168.10.100/24,192.168.10.2  eth1 172.25.254.100/24,172.25.254.2

lvs                IP:-192.168.10.200/24 -192.168.10.220/24         VIP:192.168.10.100

RS1             IP:eth0 192.168.10.11/24,192.168.10.100         VIP:-127.0.0.1/8 -192.168.10.220/32 

RS2             IP:eth0 192.168.10.22/24,192.168.10.100         VIP:-127.0.0.1/8 -192.168.10.220/32

###关闭防火墙(除了route)
systemctl disable --now firewalld.service


###在DR_lvs上安装ipvsadm
dnf install ipvsadm -y


###使不同网段能通过路由通讯
###route内核路由功能
echo net.ipv4.ip_forward=1 > /etc/sysctl.conf 
 
###打开防火墙
systemctl enable --now firewalld.service 
 

###开启地址伪装
firewall-cmd --permanent --add-masquerade

###重启防火墙
firewall-cmd --reload

3.配置

重启服务

#####每次修改网卡都需要
[root@node1 chen]# nmcli connection reload 
[root@node1 chen]# nmcli connection up eth0 #将修改的网卡名称放上去


#在客户端主机中为nat模式网卡
[root@client ~]# vim/etc/NetworkManager/system-connections/eth0.nmconnection 
[connection] 
id=eth0 
type=ethernet 
interface-name=eth0 
[ipv4] 
method=manual 
address1=172.25.254.10/24,172.25.254.100 
[root@client ~]# route -n 
Kernel IP routing table 
Destination     Gateway      Genmask     Flags     Metric     Ref   Use  Iface 
0.0.0.0     172.25.254.100    0.0.0.0     UG       100         0     0    eth0 
172.25.254.0 0.0.0.0       255.255.255.0  U        100         0     0    eth0
 
###route
#在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡
#对于eth0的设定
[root@DR-server ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]     
id=eth0
type=ethernet 
interface-name=eth0
 
[ipv4]
method=manual
address1=172.25.254.100/24
 
#对于eth1的设定
[root@DR-server ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth0
type=ethernet 
interface-name=eth0
 
[ipv4]
method=manual
address1=172.25.10.100/24



##对于DR调度器设定网卡为仅主机模式
[root@dr-server ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]     
id=eth0
type=ethernet 
interface-name=eth0
 
[ipv4]
method=manual
address1=192.168.10.200/24,192.168.10.100
[root@dr-server ~]# route -n #查看是否完成对于网卡的修改




#对于RS1的设定网卡为仅主机模式(RS2同理可得)
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]     
id=eth0
type=ethernet 
interface-name=eth0
 
[ipv4]
method=manual
address1=192.168.10.11/24,192.168.10.100 (RS2需要修改IP)
[root@webserver1 ~]# route -n #查看是否完成修改

4.实验测试

###使servera和serverb的vip不对外作用
#servera和serverb
echo net.ipv4.conf.all.arp_announce=2 >> /etc/sysctl.conf 
echo net.ipv4.conf.lo.arp_announce=2 >> /etc/sysctl.conf 
echo net.ipv4.conf.lo.arp_ignore=1 >> /etc/sysctl.conf 
echo net.ipv4.conf.all.arp_ignore=1 >> /etc/sysctl.conf 
 
#DR_lvs
[root@DRlvs ~]# ipvsadm -A -t 192.168.10.220:80 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.10.220:80 -r 192.168.10.11:80 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.10.220:80 -r 192.168.10.22:80 -g
[root@DRlvs ~]# ipvsadm -Ln
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.220:80 rr
  -> 192.168.10.11:80             Route   1      0          0         
  -> 192.168.10.22:80             Route   1      0          0         
[root@client ~]# for i in {1..6}; do curl 192.168.10.220; done
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11

四.实验注意事项


1.网络规划
IP地址分配:确保NAT和DR使用的IP地址不会产生冲突,合理规划IP地址段。

子网划分:正确划分子网,以支持不同的网络需求和设备。

2. 设备配置
路由器/防火墙配置:正确配置路由器或防火墙设备,以支持NAT和DR的规则。

交换机配置:确保交换机配置正确,能够处理来自不同源的流量。

3. 安全性
访问控制:设置访问控制列表(ACLs)来限制不必要的访问,增强网络安全。

火墙规则:配置防火墙规则以防止未授权访问和潜在的攻击。

4. 测试和验证
连通性测试:使用 ping、traceroute 等工具测试网络连通性。

服务测试:确保通过NAT和DR可以访问目标服务,如HTTP、HTTPS等。

5. 日志和监控
日志记录:启用设备和服务器的日志记录功能,以便于问题追踪和分析。

网络监控:使用网络监控工具来监控流量和性能,及时发现并解决问题。

6. 故障排除
错误分析:当出现问题时,分析错误日志和配置,找出问题根源。

逐步排查:从网络的最外层开始,逐步排查到内层,找到问题所在。

7. 文档记录
配置记录:记录所有配置的详细信息,包括IP地址、子网掩码、路由规则等。

操作记录:记录实验过程中的关键操作和更改,便于回溯和复现问题。

8. 实验环境
隔离实验环境:在隔离的实验环境中进行NAT和DR配置,避免影响生产环境。

备份配置:在进行任何更改之前,备份当前的配置文件。

9. 性能考虑
负载均衡:在需要时配置负载均衡,以优化资源使用和提高性能。

QoS配置:根据需要配置服务质量(QoS),确保关键业务的流量优先级。

10. 法规遵从
数据保护:确保实验过程中遵守相关的数据保护法规和政策。

合规性检查:定期检查配置和操作是否符合行业标准和法规要求。

你可能感兴趣的:(lvs 集群技术)