全面讲解--lvs

(一)LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统。以下是它的基础介绍:

一、产生背景与目的

在互联网等应用场景中,随着业务量的不断增长,单台服务器往往无法满足高并发的访问需求,容易出现性能瓶颈,导致服务质量下降。LVS应运而生,其目的是通过将多台服务器组成一个集群,实现负载均衡,提高系统的整体性能、可靠性和可扩展性。

二、工作原理

1. IP负载均衡技术

 - LVS可以实现基于 IP 的负载均衡。它会接收客户端的请求,然后根据预先设定的算法将请求分发到后端的真实服务器(Real Server)。例如,当采用轮询(Round Robin)算法时,它会依次将请求轮流分配到不同的真实服务器,使得各服务器的负载相对均衡。 - 当使用最少连接(Least Connections)算法时,LVS会将新的请求分配到当前连接数最少的真实服务器上,这样可以充分利用服务器的资源,避免某些服务器负载过高而其他服务器闲置的情况。

2. 数据转发方式

- LVS有多种数据转发方式。其中,NAT(Network Address Translation)模式是一种常见的方式。在这种模式下,LVS作为网关,将客户端请求的目标 IP 地址(即虚拟 IP 地址)转换为后端真实服务器的 IP 地址,并将响应数据包的源 IP 地址从真实服务器的 IP 转换回虚拟 IP 地址,再发送给客户端。这种方式的优点是配置简单,只需要一个公网 IP 地址即可,但缺点是 LVS 可能会成为网络瓶颈,因为所有的数据包都需要经过它进行地址转换。

- 另一种方式是 DR(Direct Routing)模式。在 DR 模式下,LVS 和真实服务器都需要配置在同一个物理网络中,并且都有各自的 IP 地址。LVS 接收到客户端请求后,通过修改数据包的 MAC 地址,将请求直接转发给真实服务器。真实服务器处理完请求后,直接将响应数据包返回给客户端,不需要经过 LVS 进行地址转换。这种方式的效率较高,因为 LVS 只负责分发请求,而不处理响应数据包,适合大流量的网络应用。 - 还有 TUN(IP Tunneling)模式,它通过在 IP 隧道中封装数据包,将请求转发给后端真实服务器。真实服务器接收到数据包后,解封装并处理请求,然后将响应数据包直接返回给客户端。TUN 模式可以跨越不同的网络区域,将分散的真实服务器组成一个集群,但它的配置相对复杂。

三、主要特点和优势

1. 高性能

- LVS 能够处理大量的并发请求,其核心代码运行在操作系统内核空间,具有很高的执行效率。它可以快速地将请求分发到后端真实服务器,减少请求的响应时间,提高系统的吞吐量。 - 例如,在一个大型电商网站的应用场景中,LVS 可以在高峰时段每秒处理数万甚至数十万的请求,确保用户能够快速浏览商品页面和进行交易操作。

2. 高可靠性

- 通过将请求分发到多个真实服务器上,即使其中某台真实服务器出现故障,LVS 也可以自动将请求转发到其他正常的服务器上,不会导致整个系统的服务中断。 - 比如在一个在线视频平台中,如果某台服务器出现硬件故障,LVS 会立即停止向该服务器发送请求,转而将请求分配给其他健康的服务器,用户仍然可以正常观看视频,不会受到明显影响。

3. 可扩展性

- 当业务量增长时,可以方便地添加新的真实服务器到集群中,LVS 会自动将请求分配到新加入的服务器上,无需对现有的系统架构进行大规模的修改。 - 例如,一家企业的网站随着业务的拓展,访问量不断增加,这时可以轻松地添加新的服务器到 LVS 集群中,以满足不断增长的用户需求。

4. 开源免费

- LVS 是基于开源的 Linux 操作系统实现的,用户可以免费获取和使用它的代码,并且可以根据自己的需求进行定制和优化。这对于许多企业和开发者来说,可以降低成本,同时也能够充分利用社区的力量进行技术改进和问题解决。

四、应用场景

1. 大型网站

- 像淘宝、京东等大型电商网站,以及新浪、腾讯等门户网站,都需要处理海量的用户请求。LVS 可以将用户的请求均衡地分配到多台 Web 服务器上,保证网站的高可用性和快速响应。 - 例如,在双十一购物节期间,淘宝网站的访问量会急剧增加,LVS 能够确保购物页面的稳定加载和交易的顺利进行,防止服务器因过载而崩溃。

2. 企业应用服务器集群

- 许多企业内部的应用系统,如 ERP(Enterprise Resource Planning)、CRM(Customer Relationship Management)等,也可以采用 LVS 构建服务器集群。通过负载均衡,提高应用系统的性能和可靠性,满足企业内部员工的使用需求。 - 比如一个企业的 ERP 系统,使用 LVS 可以让不同部门的员工在访问系统时都能得到快速的响应,提高工作效率。

3. 云计算平台

- 在云计算环境中,LVS 可以用于构建虚拟服务器集群,为云服务提供商的客户提供高效、可靠的计算资源。云服务提供商可以根据客户的需求动态调整服务器集群的规模,利用 LVS 实现负载均衡和资源优化配置。 - 例如,阿里云、腾讯云等云计算平台都采用了类似的技术来管理和分配计算资源,保证云服务的质量。

总之,LVS 作为一种强大的服务器集群负载均衡技术,在现代互联网和企业信息化建设中发挥着重要作用,能够有效提高系统的性能、可靠性和可扩展性。

(二)LVS(Linux Virtual Server)的调度算法静动态调度算法等类别,以下是相关介绍:

一、静态调度算法

1. 定义与特点

- 静态调度算法是在系统运行前就确定好调度策略,并且在运行过程中不会根据服务器的实时状态进行调整。它不依赖于服务器的实时负载、响应时间等动态信息。

- 这种算法的优点是实现简单,计算开销小。但缺点是无法适应服务器负载的动态变化,可能在某些情况下导致负载不均衡。

2. 常见静态调度算法

- 轮询(Round Robin,RR)调度算法:

- 原理:将客户端的请求依次轮流分配到后端的各台真实服务器,不考虑服务器的当前负载情况和性能差异。例如,有服务器 A、B、C,第一个请求分配给 A,第二个请求分配给 B,第三个请求分配给 C,然后循环。

- 优点:实现简单,绝对公平,能平均分配请求。

- 缺点:不考虑服务器实际性能差异,可能导致性能较弱的服务器响应时间长。

加权轮询(Weighted Round Robin,WRR)调度算法

- 原理:在轮询基础上,为每台真实服务器分配一个权重值,按照权重比例分配请求。权重越大,分配的请求数量相对越多。

- 优点:可根据服务器性能差异合理分配请求,充分利用资源。

- 缺点:权重设置需准确评估服务器性能,否则可能达不到最佳负载均衡效果。

二、动态调度算法

1. 定义与特点 

- 动态调度算法会根据服务器的实时状态信息来调整请求的分配。它通过不断监测服务器的负载、连接数、响应时间等指标,动态地将请求分配到最合适的服务器上,以实现更好的负载均衡效果。

2. 常见动态调度算法

最少连接(Least Connections,LC)调度算法

- 原理:将新的请求分配到当前连接数最少的真实服务器上。实时监测各台服务器的连接数情况,当有新请求到来时,选择连接数最少的服务器进行分配。 - 优点:能根据服务器实际负载动态分配请求,使负载更均衡,提高服务器处理能力和响应速度,尤其适用于处理长时间连接的应用。

- 缺点:计算连接数方式可能不够精确,仅考虑连接数无法全面反映服务器负载情况,且对服务器连接状态的监测和统计有一定系统开销。

加权最少连接(Weighted Least Connections,WLC)调度算法

- 原理:是最少连接算法的改进版,结合了服务器的权重值和当前连接数。计算方式为(当前活动连接数*256 + 非活动连接数)/权重,得出值越小说明该服务器负载越轻,新的请求会分配给计算结果最小的服务器。 - 优点:综合考虑服务器连接数和权重,能更合理分配请求,提高系统整体性能和稳定性,在服务器性能不均衡场景下更具优势。

- 缺点:算法相对复杂,计算量较大,对系统资源有一定占用,权重准确设置有难度。

基于局部性的最少连接(Locality-Based Least Connections,LBLC)调度算法

- 原理:考虑请求的“局部性”,试图将请求分配到同一目标 IP 地址的请求分发到同一台服务器上以提高缓存命中率。当有新请求到来时,如果目标 IP 地址在某台服务器上有对应记录且该服务器连接数不是最少的,会将该服务器连接数减 1,然后重新计算连接数最少的服务器进行分配。如果目标 IP 地址没有对应的记录,则按照最少连接算法分配服务器。

- 优点:利用请求局部性原理,对于有大量重复请求的应用场景可提高缓存命中率,减少服务器间数据传输,提高系统性能和响应速度,减少服务器负载不均衡情况。

- 缺点:对于请求目标 IP 地址分布分散的情况可能无法充分发挥优势,且需要维护目标 IP 地址与服务器的对应关系,增加系统复杂性和开销。

带复制的基于局部性最少连接(Locality-Based Least Connections with Replication,LBLCR)调度算法

- 原理:在基于局部性的最少连接算法基础上改进,除将请求分配到同一目标 IP 地址的请求分发到同一台服务器上之外,还会将热门内容复制到其他服务器上。当某台服务器上的热门内容被频繁访问时,会将该内容复制到其他服务器上以提高整体缓存命中率和系统性能,请求分配依然遵循基于局部性的最少连接算法原则。

- 优点:进一步提高缓存命中率,通过内容复制,即使目标 IP 地址对应的服务器负载较高,也可将请求分配到其他复制了相同内容的服务器上,提高系统可用性和性能,对处理热门内容的应用场景非常有效,能更好应对突发高流量访问情况。

- 缺点:内容复制会占用一定网络带宽和服务器存储空间,复制策略确定和管理相对复杂,需考虑内容热度、服务器负载等多个因素,否则可能导致复制效果不佳或资源浪费。

三、其他相关调度算法

1. 源地址散列(Source Hashing)调度算法

- 原理:根据请求的源 IP 地址进行散列计算,将相同源 IP 地址的请求始终分配到同一台真实服务器上。这样可以保证来自相同客户端的请求都由同一台服务器处理,有利于提高缓存的命中率。例如,通过特定的散列函数对源 IP 地址进行计算,得到一个数值,然后根据该数值将请求分配到对应的服务器。

- 优点:能够提高缓存命中率,特别是对于一些需要保持会话一致性或者需要在服务器端保存与客户端相关状态的应用场景非常有用。因为相同客户端的请求总是由同一台服务器处理,服务器可以更好地维护与该客户端相关的状态信息。

- 缺点:当某台服务器出现故障时,原本分配到该服务器的客户端请求需要重新进行分配,可能会导致一些短暂的服务中断或者状态不一致的情况。而且如果服务器集群中某台服务器的性能下降,由于请求还是会按照散列结果分配到该服务器,可能会影响整体的服务质量。

2. 目标地址散列(Destination Hashing)调度算法

- 原理:与源地址散列算法类似,但是它是根据请求的目标 IP 地址(通常是服务器所提供服务的 IP 地址)进行散列计算,将请求分配到对应的真实服务器上。例如,对于一个提供多个虚拟服务的 LVS 集群,不同的虚拟服务可能有不同的目标 IP 地址,通过对目标 IP 地址进行散列,将请求分配到合适的服务器。

- 优点:对于一些与目标地址相关的服务,能够更有效地进行请求分配,保证相同目标地址的请求被分配到相同的服务器处理,有利于提高服务的稳定性和效率。例如,在一些基于内容分发的网络中,不同的内容可能有不同的目标 IP 地址,通过目标地址散列可以将对相同内容的请求分配到同一台服务器,提高缓存命中率和服务响应速度。

- 缺点:和源地址散列算法类似,当服务器出现故障或者需要调整服务器集群结构时,可能需要重新计算散列值并重新分配请求,会带来一定的复杂性和可能的服务中断。而且如果目标地址的分布不均衡,可能会导致服务器负载不均衡的情况。

三、LVS-NAT

1、设置网卡

2、lvs

1、脚本应用
 vmset.sh eth0 172.25.254.100 lvs.org
 vmset.sh eth1 192.168.0.100  lvs.org
2、修改网关
 vim /etc/NetworkManager/system-connections/eth1.nmconnection
3、 更新网卡
 nmcli connection reload
 nmcli connection up eth1
4、 启用内核路由功能
vim /etc/sysctl.conf
添加 net.ipv4.ip_forward = 1
安装ipvsadm
 yum install ipvsadm -y
5、添加调度策略
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
6、查看策略
  ipvsadm -Ln
TCP 172.25.254.100:80 rr
 
   -> 192.168.0.10:80   Masq   1   0   0
 
   -> 192.168.0.20:80

服务器1,2

1、脚本应用
vmset.sh eth0 192.168.0.10 webserver1.org
2、 修改网关
vim /etc/NetworkManager/system-connections/eth0.nmconnection
address1=192168.0.10/24,192.268.0.100
3、 更新网卡
nmcli connection reload
nmcli connection up eth0
4、下载httpd服务,用于测试
yum install httpd -y
echo webserver1 - 192.168.0.10 > /var/www/html/index.html
syst

emctl enable  --now httpd

测试

[root@client~ ]# for i in {1..5}; do curl 172.25.254.100; done
webserver2 - 192.168.0.20
 
webserver - 192.168.0.10
 
webserver2 - 192.168.0.20
 
webserver - 192.168.0.10
 
webserver2 - 192.168.0.20

四、LVS-DR

在上个实验的基础上作出修改

服务器

 在server设定vip
[root@webserver1 ~]#  ip a a 192.168.0.200/32 dev lo
[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo

主机

使用脚本,修改网关,更新网卡

 vmset.sh eth0 172.25.254.200 client.org
 vim /etc/NetworkManager/system-connections/eth0.nmconnection
 address1=172.25.254.200/24.172.25.254.100
 nmcli connection reload
 nmcli connection up eth0

lvs

1、脚本应用
[root@lvs ~]# vmset.sh eth1 192.168.0.50 lvs.org
修改网关为192.168.0.100
[root@lvs ~]#vim /etc/NetworkManager/system-connections/eth1.nmconnection
address1=192.168.0.50/24,192/168/0/100
2、更新网卡
[root@lvs ~]# nmcli connection reload
[root@lvs ~]#nmcli  connection  up eth1
3、在回环接口配置VIP
[root@lvs ~] ip a a 192.168.0.200/32 dev lo
下载ipvsadm
[root@lvs ~] yum install ipvsadm -y
4、配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2

5、 查看策略
[root@lvs ~]# ipvsadm -Ln
TCP  192.168.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   2      0          0

测试

[root@client ~]# for i in {1..5}
> do
> curl 192.168.0.200
> done
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值