当前位置:   article > 正文

LVS(Linux Virtual Server)负载均衡详解_虚拟负载均衡

虚拟负载均衡

 一、LVS简介与集群概念


1.  LVS(Linux Virtual Server)

即Linux虚拟服务器,是一个高性能、高可用的服务器集群解决方案,现已集成至Linux内核中。它通过IP虚拟化技术通过将网络流量分散到多个服务器上,从而提高网络服务的可用性和扩展性,实现数据请求的负载均衡调度,广泛应用于需要大量并发处理能力的场景。

2. 集群

1. 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。

集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用HA),使得任何一个机器坏了整个系统还是能正常运行。

2、负载均衡集群技术
负载均衡(Load Balance):负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理。

负载通常包括应用程序处理负载和网络流量负载,每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。

 二、LVS的三种工作模式

1.  NAT模式(Network Address Translation,网络地址转换)

原理:
NAT模式使用Linux的网络地址转换功能,将进入的IP数据包的源地址转换为虚拟服务器的地址,然后根据预设的调度算法将请求分发到后端的真实服务器。真实服务器处理完请求后,直接将响应数据包发送回客户端,无需再次经过LVS。

特点:
所有流量都经过LVS,因此LVS成为潜在的瓶颈。
适用于内部网络结构,安全性较高。

配置要点:
LVS需要至少两块网卡,一块用于内部网络通信,另一块用于外部网络通信。
需要配置iptables规则来进行地址转换。

示例命令

  1. ipvsadm -A -t <VIP>:80 -s rr
  2. ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -m

2.  DR模式(Direct Routing,直接路由)

原理:
在DR模式下,LVS和所有真实服务器共享同一个虚拟IP(VIP)。LVS仅处理入站请求,并将它们分发到后端的真实服务器。真实服务器处理请求后,直接将响应发送回客户端,绕过LVS。

特点:
减少了LVS的负载,因为它不处理出站流量。
要求LVS和所有真实服务器在同一个物理网络内。

配置要点:
需要配置网络,使得VIP在LVS和所有真实服务器上都能被识别。
需要调整Linux内核参数,以允许真实服务器响应VIP地址的ARP请求。

示例命令:

  1. ipvsadm -A -t <VIP>:80 -s rr -g
  2. ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -g

3.  TUN模式(IP Tunneling,IP隧道)

原理:
TUN模式通过创建IP隧道来转发请求。LVS接收到请求后,将其封装在一个新的IP数据包中,然后发送到对应的真实服务器。 真实服务器解封装后处理请求,并将响应直接发送回客户端。

特点:
真实服务器可以分布在不同的地理位置。
所有请求和响应都经过LVS,因此LVS是流量的中心节点。

配置要点:
 需要在LVS上配置IP隧道接口。
真实服务器需要支持IP隧道协议。

示例命令:

  1. ipvsadm -A -t <VIP>:80 -s rr -i
  2. ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -i

 三、LVS的调度算法

LVS提供了包括轮询(RR)、加权轮询(WRR)、最小连接(LC)、加权最小连接(WLC)等多种调度算法,以适应不同的业务需求。

1.  轮询

(Round Robin, RR)
原理:顺序地将请求分配到每个服务器,类似于排队轮流服务。
适用场景:所有服务器性能相近,需要简单均匀的负载分配。

2.  最少连接

(Least Connections, LC)
原理:将请求分配给当前活跃连接数最少的服务器。
适用场景:服务器性能不一致时,优先分配给较空闲的服务器,以提高效率。

3.  加权最少连接

(Weighted Least Connections, WLC)
原理:考虑服务器的性能差异,给每个服务器分配权重,然后根据权重和当前连接数来分配请求。
适用场景:服务器性能有差异,需要根据性能合理分配负载。

4.  加权轮询

(Weighted Round Robin, WRR)
原理:在轮询的基础上,根据服务器的性能分配不同的权重,权重高的服务器接受更多的请求。
适用场景:需要根据服务器性能进行非均匀的负载分配。

5.  基于局部性最少连接

(Locality-Based Least Connections, LBLC)
原理:尽量将同一目标IP地址的请求分配到同一服务器,提高缓存命中率。
适用场景:适用于缓存集群,目标是提高缓存效率。

6.  带复制的基于局部性最少连接

(Locality-Based Least Connections with Replication, LBLCR)
原理:在LBLC的基础上,维护目标IP地址到一组服务器的映射,以支持复制和负载均衡。
适用场景:适用于需要数据复制的缓存集群。
这些算法中,轮询、最少连接和它们的加权版本是最常用的,因为它们简单、高效,并且适用于大多数场景。特别是当服务器规模较大或服务器性能相近时,这些算法可以提供良好的负载均衡效果。而基于局部性的调度算法则适用于特定的应用场景,如缓存集群。

7.  源地址散列

(Source Hashing, SH)
原理:根据请求的源IP地址进行散列,确保来自同一IP的请求总是被分配到同一个服务器。
适用场景:需要保持客户端IP到服务器的会话持久性时。

8.  目标地址散列

(Destination Hashing, DH)
原理:根据请求的目标IP地址进行散列,以决定请求的目的地。
适用场景:适用于请求按目标地址进行分组的情况。

9.  最短期望延迟

(Shortest Expected Delay, SED)
原理:计算每台服务器的权重和当前连接数的比值,将请求分配给比值最小的服务器。
适用场景:需要考虑服务器当前负载和权重,优化响应时间。

10. 最少队列调度

(Least Queue Length, LQ)
原理:选择当前队列长度最短的服务器,以减少请求等待时间。
适用场景:适用于服务器处理能力相近,但请求量波动较大时。

四、LVS实战部署

实战部署包括环境准备、LVS/DR模式和LVS-NAT模式的配置,以下是具体的实现过程和代码示例。

4.1 命令介绍

  1. #安装LVS软件和管理工具ipvsadm。
  2.     yum install -y ipvsadm
  3. -A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
  4. -t #表示为tcp服务
  5. -u #表示为udp服务
  6. -s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
  7. 例:ipvsadm -A -t 192.168.1.2:80 -s wrr
  8. -a --add-server #在服务器表中添加一条新的真实主机记录
  9. -t --tcp-service #说明虚拟服务器提供tcp服务
  10. -u --udp-service #说明虚拟服务器提供udp服务
  11. -r --real-server #真实服务器地址
  12. -m --masquerading #指定LVS工作模式为NAT模式
  13. -w --weight #真实服务器的权值
  14. -g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
  15. -i --ip #指定LVS的工作模式为隧道模式
  16. -p #会话保持时间,定义流量呗转到同一个realserver的会话存留时间
  17. 例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1
  18. -E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
  19. -D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
  20. -C -clear #清除内核虚拟服务器表中的所有记录。
  21. -R -restore #恢复虚拟服务器规则
  22. -S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
  23. -e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
  24. -d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
  25. -L|-l –list #显示内核虚拟服务器表
  26. --numeric, -n:#以数字形式输出地址和端口号
  27. --exact: #扩展信息,精确值
  28. --connection,-c: #当前IPVS连接输出
  29. --stats: #统计信息
  30. --rate : #输出速率信息
  31. 参数也可以从/proc/net/ip_vs*映射文件中查看
  32. -Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)

4.2 LVS NAT模式部署

1. 加载IPVS模块并设置为开机自启。

  1. modprobe ip_vs
  2. echo "ip_vs" >> /etc/modules-load.d/ipvs.conf

2. 配置虚拟IP(VIP)并设置网络地址转换。

  1. ip addr add <VIP> dev <interface>
  2. echo 1 > /proc/sys/net/ipv4/ip_forward

3. 使用ipvsadm添加虚拟服务和真实服务器。

  1. ipvsadm -A -t <VIP>:80 -s rr
  2. ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -m -w 1

4.2 LVS DR模式部署

1. 配置共享VIP地址在LVS Director和所有Real Servers上。
2. 设置直接路由模式,允许Real Servers响应VIP地址的ARP请求。
3. 使用ipvsadm添加虚拟服务和真实服务器,与NAT模式类似,但使用`-g`标志表示直接路由。

  1. ipvsadm -A -t <VIP>:80 -s rr
  2. ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -g -w 1

总结

LVS作为一种成熟高效的负载均衡解决方案,已经在许多高负载环境中得到应用。通过合理选择工作模式和调度算法,它能够有效提升服务的稳定性和响应速度。随着技术的发展,LVS也在不断地更新和完善,以满足日益增长的网络负载需求。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/986795
推荐阅读
相关标签
  

闽ICP备14008679号