一、什么是 LVS?

LVS:Linux Virtual Server的简写,也就是Linux 虚拟服务器,是一个虚拟的服务器集群系统,本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。官方网站 :http://www.linuxvirtualserver.org LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了高效的解决方法,现在 LVS 已经是 Linux 内核标准的一部分。

LVS是四层负载均衡

四层负载均衡的优点:在响应请求时速度较反向服务器负载均衡要快。

缺点:无法处理更高级的请求

二、OSI七层模型

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_IP

三、LVS 的组成

LVS 由两部分程序组成,包括 ipvs 和 ipvsadm。

1、ipvs (ip virtual server):LVS 是基于内核态的 netfilter 框架实现的 IPVS 功能,工作在内核态。用户配置 VIP 等相关信息并传递到 IPVS 就需要用到 ipvsadm 工具。

2、ipvsadm:ipvsadm 是 LVS 用户态的配套工具,可以实现 VIP 和 RS 的增删改查功能,是基于 netlink 或 raw socket 方式与内核 LVS 进行通信的,如果 LVS 类比于 netfilter,那 ipvsadm 就是类似 iptables 工具的地位。

四、LVS的作用

作用:
  • 主要用于多服务器的负载均衡;
  • 工作在网络层,可实现高性能,高可用的服务器集群技术;
  • 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器;
  • 易用,配置简单,有多种负载均衡的方法;
  • 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果;
  • 可扩展性好;
LVS的优点:
  1. 网络隔离更安全
  2. 节约IP地址
LVS的缺点:
  1. directory很可能成为系统性能瓶颈,所有的请求directory都要进行应答。
  2. <20【能够代理的集群数量有限,一般为20台以内】

五、工作方式

常用:

① NAT (地址转换)

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_负载均衡_02

CIP——客户端IP

VIP——虚拟IP

RIP——真实服务器IP


② DR (直接路由)

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_负载均衡_03

工作原理:

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改

为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口 送给eth0网卡直接发送给客户

端。

日常生活中用的比较多的就是NAT、DR两种模型,当然还有其他的模型,在下面进行拓展。


③ TUN-IP隧道模式

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_负载均衡_04

在CIP和VIP外包裹一层DIP和RIP进行加密封装

④ FULL-NAT

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_负载均衡_05

此模型在国内不常用

六、LVS-NAT实验

实验环境:

系统:Rocky 9.4

Vmware Workstation

LVS-NAT Server --- 192.168.5.8 192.168.153.128

LVS-Client --- 192.168.5.9

Web1 --- 192.168.153.129

Web2 --- 192.168.153.130

实验拓扑:

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_IP_06

图较为模糊但是具体基本相同

实验步骤:

yum -y install httpd*	# 先给两个web主机做一个不同的网站,为了好分辨(一般日常为相同资源)
echo WEB-A > /var/www/html/index.html	# web-1 主机下
echo Web-B > /var/www/html/index.html	# web-2 主机下
systemctl restart httpd	# 同样,web-1和web-2下
systemctl enable httpd # 同样,web-1和web-2
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.


[root@LVS-Server yum.repos.d]# echo 1 > /proc/sys/net/ipv4/ip_forward # 开启路由功能
[root@LVS-Server yum.repos.d]# ipvsadm -A -t 192.168.5.8:80 -s rr   	# 配置对外接口IP 
[root@LVS-Server yum.repos.d]# ipvsadm -a -t 192.168.5.8:80 -r 192.168.153.129:80 -m # 配置对内接口IPWeb-1[root@LVS-Server yum.repos.d]# ipvsadm -a -t 192.168.5.8:80 -r 192.168.153.130:80 -m # 配置对内接口IPWeb-2
  • 1.
  • 2.
  • 3.
  • 4.


验证:

【方法一】

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_IP_07

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_负载均衡_08

【方法二】

[root@LVS-Server yum.repos.d]# ipvsadm -Lnc
  • 1.


大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_负载均衡_09

七、LVS-DR

DR:直连路由

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_服务器_10

LVS-DR数据包流量分析(同一局域网)

  • 客户端向目标VIP发送请求,负载均衡器接收
  • 负载均衡器根据负载均衡算法选择后端真实服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为后端真实服务器的MAC地址,然后在局域网上发送
  • 后端真实服务器收到这个帧,解封装后发现目标IP与本机匹配(事先绑定了VIP),于是处理这个报文。随后重新封装报文,将响应报文通过lo接口传送给物理网卡然后向外发出
  • 客户端将收到回复报文。客户端认为得到正常的服务,而不会知道是哪一台服务器处理的如果跨网段,则报文通过路由器经由 internet 返回给用户

八、LVS-DR实验

实验环境:

VMware workstation

Rocky 9

四台虚拟机:① Client ② DR Server ③ Web-1 ④ Web-2

① Client 192.168.5.10

② LVS Server 192.168.5.8

③ LVS Web-1 192.168.5.12

③ LVS Web-2 192.168.5.13

配置步骤:

大型网站高并发解决方案 LVS (一文让你搞懂什么是LVS及四层、七层负载均衡)_服务器_11

实验步骤演示:
  1. LVS准备和路由部分
[root@localhost ~]# nmcli
ens160:已连接 到 ens160
        "VMware VMXNET3"
        ethernet (vmxnet3), 00:0C:29:01:99:F9, 硬件, mtu 1500
        ip4 默认
        inet4 192.168.5.8/24
        route4 192.168.5.0/24 metric 100
        route4 default via 192.168.5.254 metric 100
        inet6 fe80::20c:29ff:fe01:99f9/64
        route6 fe80::/64 metric 1024

lo:连接(外部) 到 lo
        "lo"
        loopback (unknown), 00:00:00:00:00:00, 软件, mtu 65536
        inet4 127.0.0.1/8
        inet6 ::1/128
        route6 ::1/128 metric 256

DNS configuration:
        servers: 114.114.114.114 8.8.8.8
        interface: ens160

使用 "nmcli device show" 获取关于已知设备的完整信息,以及 
"nmcli connection show" 获取活动连接配置集的概述。

完整的用法细节,可参考 nmcli(1) 和 nmcli-examples(7) 手册页。

[root@localhost ~]# ifconfig ens160:0 192.168.5.14 broadcast 192.168.40.255 netmask 255.255.255.0 up 
[root@localhost ~]# route  add -host 192.168.5.14 dev ens160:0
[root@localhost ~]# vim /etc/sysctl.conf 
    net.ipv4.ipforward = 1	# 开启路由功能
    net.ipv4.conf.all.send_redirects = 0	# 禁止转发重定向报文
    net.ipv4.conf.ens160.send_redirects = 0		# 禁止ens160转发重定向报文
    net.ipv4.conf.default.send_redirects = 0	# 禁止转发默认重定向报文

[root@localhost ~]# yum -y install ipvsadm*

[root@localhost ~]# ipvsadm -A -t 192.168.5.14:80 -s rr #添加VIP规则

[root@localhost ~]# ipvsadm -a -t 192.168.5.14:80 -r 192.168.5.12:80 -g

[root@localhost ~]# ipvsadm -a -t 192.168.5.14:80 -r 192.168.5.13:80 -g

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm	//永久

[root@localhost ~]# systemctl enable ipvsadm.service 	//设置开机自启动
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.

九、轮训算法

(一)静态调幅方法 Fixed Scheduling Method
  1. .RR 轮询

Round-Robin:调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。


  1. .WRR 加权轮询

调度器通过"加权轮叫"调度算法,根据真实服务器的不同处理能力,来调度访问请求。这样可以保证处理能力强的服务器,处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。


  1. .DH 目标地址hash

"目标地址散列"调度算法根据请求的目标IP地址,作为散列键 (Hash Key) 从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。


  1. .SH 源地址hash

"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。


(二)动态调服方法 Dynamic Scheduling Method
  1. .LC 最小连接

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

  1. .WLC 加权最小连接
  2. .LBLC 基于本地的最小连接
  3. .LBLCR 带复制的基于本地的最少连接

十、负载均衡的主要方式

  1. http重定向
  2. DNS负载均衡
  3. 7层负载均衡
  4. 4层负载均衡
  5. 数据链路层负载均衡
  6. F5硬件负载均衡