LVS (Linux virtual server)

📅 2026/7/29 3:41:37 👁️ 阅读次数 📝 编程学习
LVS (Linux virtual server)

LVS (Linux virtual server)

LVS (Linux Virtual Server),是LInux内核层实现的高性能、高可用的负载均衡,核心作用是将前端的请求流量分发到后端多台真实服务器上,提高服务的并发处理能力和可用性

一.LVS运行原理

1.1 LVS集群体系结构

1.2 LVS的相关概念

  • VS(Virtual Server):调度器
  • RS(Real Server):业务服务器
  • CIP(Client IP):客户端的IP
  • VIP(Virtual server IP):外网的IP,用于客户访问
  • DIP(Director IP)内网的IP,调度器负责访问内网的IP
  • RIP(Real Server IP):真实的业务服务器

访问流程:CIP <—> VIP === DIP <—> RIP

1.2.1 LVS的部署命令

程序包:ipvsadm

1.2.1.1 ipvsadm命令

核心功能:

  • 集群服务管理:增 删 改
  • 集群服务的RS管理:增 删 改
  • 查看

命令参数

# 管理集群服务ipvsadm -A(添加)|E(编辑) -t(tcp)|u(udp)|f(防火墙标签) service-address(集群地址)[-s scheduler(调度算法)][-p[timeout]]会话持久[-M netmask]掩码[--pepersistence_engine]引擎类型[-b sched-flags]标记 ipvsadm-D-t|u|f service-address 删除 ipvsadm-C清空 ipvsadm-R重载 ipvsadm-S保存
1.2.1.2 LVS集群中的增删改
1,管理集群服务中的增删改

ipvsadm -A | E | u | f service-address

-A添加-E修改-ttcp服务-uudp服务-s指定调度算法,默认为WLC-p设置持久连接超时-f火墙标记,是一个数字

2,管理集群中RealServer的增删改

ipvsadm -a|-e -t|-u|f service-address …

-a添加realserver-e修改realserver-ttcp协议-uudp协议-f火墙标记-rrealserver地址-g直连路由模式-iip隧道模式-mnat模式-w设置权重-Z清空计数器-C清空LVS策略-L列出LVS策略--rate输出速率信息

1.3 LVS集群的类型

LVS-NAT:修改请求报文的目标IP,多目标的DNAT

LVS-DR:封装新的MAC地址

LVS-TUN:在请求报文IP报文之外新加一个IP首部

LVS-FULLNAT:修改请求报文的源和目标IP

1.3.1 NAT模式

  • 本质是多目标IP的DNAT,修改请求报文中的目标地址和目标端口修改为挑出的RS的RIP和PORT实现转发

  • RIP和DIP应在同一个网络,且使用私网地址;RS的网关要指向DIP

  • 请求报文和响应报文都必须经由Director转发

  • 支持端口映射,可修改的请求报文的目标PORT

  • VS必须是liunx系统,RS可以是任意OS系统

1.3.1.1 NAT模式数据逻辑

1,客户端发送请求,数据包中包含源IP,目标IP和访问端口(9000)

2,VS服务器收到请求后,把数据包中的DIP的VIP换为RS的RIP和相应端口

3,RS1响应请求,发送应答数据包,包中包含DIP,SIP,PORT(9000)

4,VS收到应答报文,改变包中的数据来源DIP改为VIP,目标端口改为80,然后传回给客户端

1.3.1.2 NAT模式集群案例

1,VS调度器采用双网卡,一个是NAT 连接外网,一个是仅主机网卡与后端的服务器相连

2,Web服务器网关指向DIP,并且不需要连接外网

1.3.1.2.1 实验环境
主机名IPVIP角色
LVS192.168.146.100192.168.136.100调度器(VS)
RS1192.168.146.10,GW192.168.146.100null后端服务器1
RS2192.168.146.20,GW192.168.146.100null后端服务器2
Node192.168.136.10测试机
1.3.1.2.2 配置命令

注意:RS的网关是DIP

1,RS1

[root@RS1 ~]# yum install httpd [root@RS1 ~]# echo RS1 > /var/www/html/index.html [root@RS1 ~]# systemctl enable --now httpd

2,RS2

[root@RS2 ~]# yum install httpd [root@RS2 ~]# echo RS2 > /var/www/html/index.html [root@RS2 ~]# systemctl enable --now http

3,LVS调度器

[root@LVS ~]# yum install ipvsadm.x86_64 -y[root@LVS ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf[root@LVS ~]# sysctl -pnet.ipv4.ip_forward=1[root@LVS ~]# ipvsadm -A -t 192.168.136.100:80 -s wrr[root@LVS ~]# ipvsadm -a -t 192.168.136.100:80 -r 192.168.146.10:80 -m -w 1[root@LVS ~]# ipvsadm -a -t 192.168.136.100:80 -r 192.168.146.20:80 -m -w 1[root@LVS ~]# ipvsadm -LnIP Virtual Server version1.2.1(size=4096)Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn TCP192.168.136.100:80 wrr ->192.168.146.10:80 Masq100->192.168.146.20:80 Masq100[root@LVS ~]# systemctl enable --now ipvsadm.service# 测试# 修改权重[root@LVS ~]# ipvsadm -e -t 192.168.136.100:80 -r 192.168.146.10:80 -m -w 2[root@LVS ~]# ipvsadm -LnIP Virtual Server version1.2.1(size=4096)Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn TCP192.168.136.100:80 wrr ->192.168.146.10:80 Masq200->192.168.146.20:80 Masq100[root@LVS ~]# for i in {1..10};do curl 192.168.136.100;doneRS1 RS2 RS1 RS2 RS1 RS2 RS1 RS2 RS1 RS2# 修改权重[root@LVS ~]# ipvsadm -e -t 192.168.136.100:80 -r 192.168.146.10:80 -m -w 2[root@LVS ~]# ipvsadm -LnIP Virtual Server version1.2.1(size=4096)Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn TCP192.168.136.100:80 wrr ->192.168.146.10:80 Masq200->192.168.146.20:80 Masq100[root@LVS ~]#[root@LVS ~]# for i in {1..10};do curl 192.168.136.100;doneRS2 RS1 RS1 RS2 RS1 RS1 RS2 RS1 RS1 RS2

1.3.2 DR模式

DR:Direct Routing,直接路由,LVS默认模式(应用最广泛),通过给请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口MAC,目标MAC是某挑选出RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

1.3.2.1 DR模式数据逻辑

在DR模式中,RS接收到访问请求后不需要回传给LVS调度器,直接把数据回传给Client,所有RS和VS上都要有VIP

1.3.2.2 DR模式数据传输过程

1,客户端发送请求报文给到VS调度器,内容为客户端IP+客户端MAC+VIP+VIP的MAC

2,VS调度器接收到报文后把里面的VIP的MAC改为RS1的MAC,

3,RS1回复响应报文,数据包中内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC

1.3.2.3 DR模式的特点

1,Director和各RS都配置有VIP

2,确保前端路由器将目标IP为VIP的请求报文发往Director

3, 在前端网关做静态绑定VIP和Director的MAC地址

4,RS的RIP可以使用私网地址,也可以是公网地址;RIP和DIP在同一IP网络;

5,RIP的网关不能指向DIP,以确保响应报文不会经由Director

6,RS和Director要在同一个物理网络

7,响应报文直接发往Client

8,不支持端口映射

1.3.2.4 部署DR模式集群案例
1.3.2.4.1 实验环境

1.3.2.4.2 配置命令

RS的配置与NAT模式的配置相同

1,DR

# 开启内核路由功能[root@DR ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf[root@DR ~]# sysctl -pnet.ipv4.ip_forward=1# 数据转发策略[root@DR ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.146.100[root@DR ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.136.100# 配置网络[root@DR ~]# sh vmset.sh eth0 192.168.136.100 DR[root@DR ~]# sh vmset.sh eth1 192.168.146.10 DR

2,LVS(调度器)

# 添加VIP[root@LVS ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection[connection]id=lotype=loopback interface-name=lo[ipv4]method=manualaddress1=127.0.0.1/8address2=192.168.146.100/32# vip# 注意网关[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0uuid=cdf80ff8-490d-4a3e-a1ec-90910407a6e7type=ethernet interface-name=eth0[ipv4]method=manualaddress1=192.168.146.200/24,192.168.146.10# 网关为DR对内网卡的IPdns=8.8.8.8# 添加策略[root@LVS ~]# ipvsadm -A -t 192.168.146.100:80 -s wrr[root@LVS ~]# ipvsadm -a -t 192.168.146.100:80 -r 192.168.146.101:80 -g[root@LVS ~]# ipvsadm -a -t 192.168.146.100:80 -r 192.168.146.102:80 -g[root@LVS ~]# ipvsadm -LnIP Virtual Server version1.2.1(size=4096)Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn TCP192.168.146.100:80 wrr ->192.168.146.101:80 Route100->192.168.146.102:80 Route100# 测试[Administrator.WIN-G01HRFS4OB1]forNin{1..6};docurl192.168.146.100;doneRS2 RS1 RS2 RS1 RS2 RS1

1.3.3 TUN模式

转发方式:不修改请求报文的IP头部,而在IP头部另外封装一个IP头部,将报文发往挑选出的目标RS;RS直接响应给客户端

1.3.3.1 TUN模式数据传输过程

1,客户端发送请求报文,包含源IP+VIP+端口

2,到达VS调度器给客户端发来的数据重新添加IP报文头部,添加的报文头部包含DIP+RS发送到对应的RS

3,RS收到调度器发送的数据包做出响应,生成的响应包含VIP+CIP+port,直接传输给client

1.3.3.2 TUN模式特点

1,DIP,VIP,RIP都是公网地址

2,RS的网关一般不能指向DIP

3,请求报文要经由Director,但响应是直接给Director

4,不支持端口映射

5,RS的OS必须支持隧道功能

1.3.4 Fullnet 模式

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发

1.4 LVS工作模式总结

NAT模式TUN模式DR模式
RS操作系统不限支持隧道禁用arp
调度器和服务器网络可跨网络可跨网络不可跨网络
调度服务器数量服务器数量
RS服务器网关指向到调度器DIP指向到路由指向到路由
  • LVS-NAT与LVS-fullnat:请求和响应报文都经由Director
  • LVS-NAT:RIP的网关要指向DIP
  • LVS-Fullnat:RIP和DIP未必在同一网络,但要能通信
  • LVS-DR和LVS-TUN:请求报文要经由Director,但响应报文由RS直接发往Client
  • LVS-DR:通过封装新的MAC首部实现,通过MAC网络转发
  • LVS-TUN:通过在源IP报文首部添加新IP头部转发,实现远距离传输

1.5 LVS调度算法

1.5.1 LVS调度算法类型

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态和动态算法

静态算法:仅根据算法本身进行调度,不考虑RS的负载情况

动态算法:主要依据RS的当前负载状态及调度算法进行调度Overhead=value较小的RS将被调度

1.5.2 LVS静态调度算法

1,RR:Roundrobin轮询 RS将被分别调度,RS配置有差别时不推荐

2,WRR:Weight Roundrobin ,加权轮询 根据RS的配置进行加权调度

3,SH:Source Hashing ,实现session sticky,源地址hash,将来自于同一个IP地址的请求始终发往第一次挑选中的RS,实现会话绑定

4,DH:Destination Hashing 目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS

1.5.3 LVS动态调度算法

主要依据当前RS的负载状态进行调度

1,LC(Least Connections — 最少连接法)

适用于长连接应用Overhead(负载值)= activeconns(活动连接数)* 256 + inactiveconns(而非活动连接数)

2,WLC(Weight LC — 权重最少连接)

默认调度方法为Onerhead=(connections * 256 + inconnections)/weight

3,SDE:Shortest Expection Delay

初始连接高权重优先Overhead=(activeconns + 1 + inactiveconns) * 256 / weight

4,NQ:Never Queue,第一轮均匀分配,后续SED

5,LBLC:Locality-Based LC,动态的DH算法

6,LBLCR:LBLC with Reolication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的