LVS (Linux virual server)

LVS简介

        LVS(Linux Virtual Server)是一个基于Linux平台的开源负载均衡系统。它通过将多个服务器组成一个虚拟服务器集群,实现了高效的负载均衡和流量分发。                
        LVS的核心思想是利用IP负载均衡技术和内容请求分发机制,将客户端的请求均衡地分配给服务器集群中的各个节点。这种机制能够有效地提高服务器的利用率,降低单点故障的风险,并提供高可用性和可伸缩性的服务。

LVS 官网: http://www.linuxvirtualserver.org/
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务

LVS的三种工作模式分别是NAT模式、DR模式和IP隧道模式。

VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP

lvs集群类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP

lvs的调度算法

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

静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS被调度

lvs静态调度算法

RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐

WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

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

DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

lvs动态调度算法

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

LC:least connections(最少链接发) 适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活 动链接数)

WLC:Weighted LC(权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight

SED:Shortest Expection Delay, 初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接

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

LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

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

NAT模式


本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和 PORT实现转发
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
支持端口映射,可修改请求报文的目标PORT
VS必须是Linux系统,RS可以是任意OS系统

 优点:配置和管理相对简单,网络架构灵活,允许后端服务器在不同网段中,客户端不需要感知后端服务器的存在。
缺点:在整个流程中,所有输入输出的流量都要经过负载均衡器,这会导致负载均衡器成为性能瓶颈,尤其是在Web类应用中,响应流量大于请求流量时更为明显。

实验

 四台虚拟机:客户端、lvs调度器、webserver1、webserver2

Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连 Web服务器采用仅主机网卡与director相连
Web服务器网关指向192.168.0.100
后端web服务器不需要连接外网

实验步骤:

1、启动路由器内核路由功能

2、lvs

下载 ipvsadm负载均衡控制组件

yum install -y ipvsadm

通过ipvsadm配置负载均衡器

ipvsadm -A -t 172.25.254.100:80 -s rr 
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.10:80 -m   
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.20:80 -m

3、sr1

yum install -y httpd
echo this is sr 1 > /var/www/html/index.html
systemctl enable --now httpd

4、测试

[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1

DR模式

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

DR模式的特点
1.Director和各RS都配置有VIP
2.确保前端路由器将目标IP为VIP的请求报文发往Director
3.在前端网关做静态绑定VIP和Director的MAC地址 在RS上使用arptables工具 在RS上修改内核参数以限制arp通告及应答级别
4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
5.RIP的网关不能指向DIP,以确保响应报文不会经由Director
6.RS和Director要在同一个物理网络
7.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
8.不支持端口映射(端口不能修败) arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP /proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce
9.RS可使用大多数OS系统

实验
实验环境

准备五台虚拟机:客户端、路由器、负载均衡器、真实服务器1、真实服务器2
五台虚拟机均为openEuler-22.03-LTS-SP3-x86_64-dvd.iso
router两个网卡,一个为nat模式一个为仅主机模式

client -- nat172.25.254.200
router -- nat172.25.254.100
router -- 仅主机182.168.0.100
LVS -- DIP192.168.0.50
sr1 -- RIP1192.168.0.10
sr2 -- RIP2192.168.0.20
VIP192.168.0.200

实验步骤

1、五台设备的ip配置

# client
[root@client ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:bd:21:87 brd ff:ff:ff:ff:ff:ff
    inet 172.25.254.200/24 brd 172.25.254.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:febd:2187/64 scope link 
       valid_lft forever preferred_lft forever

# router
[root@router ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:7a:6c:bf brd ff:ff:ff:ff:ff:ff
    inet 172.25.254.100/24 brd 172.25.254.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe7a:6cbf/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:7a:6c:c9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe7a:6cc9/64 scope link 
       valid_lft forever preferred_lft forever

# LVS
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.200/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:95:4f:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe95:4f97/64 scope link 
       valid_lft forever preferred_lft forever

# sr1
[root@rs1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.200/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:3e:fc:63 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3e:fc63/64 scope link 
       valid_lft forever preferred_lft forever

# sr2
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.200/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:06:4a:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe06:4acd/64 scope link 
       valid_lft forever preferred_lft forever

1、禁用sr1和sr2的arp响应

#在RS1和RS2中解决响应问题
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

3、开启router路由器的路由转发

4、在LVS中配置策略
在LVS、rs1、rs2的换回接口中配置VIP,都为192.168.0.200

ip a a 192.168.0.200/32 dev lo

#LVS配置
[root@lsv ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lsv ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -w 1 -g
[root@lsv ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -w 1 -g
# 查看规则[root@lsv ~]# ipvsadm -Ln
[root@lsv ~]# 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.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80              Route   1      0          0    

5、sr1配置

[root@rs1 ~]# yum install httpd -y

[root@rs1 ~]# echo this is rs1 > /var/www/html/index.html

[root@rs1 ~]# systemctl restart httpd

sr2配置相同

6、测试

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值