目录
[1、负载调度器(Load Balancer)](#1、负载调度器(Load Balancer))
[2、后端服务器(Real Server)](#2、后端服务器(Real Server))
[3、IP负载均衡(IP Load Balancing)](#3、IP负载均衡(IP Load Balancing))
[a)硬件负载均衡产品:F5 、深信服 、Radware](#a)硬件负载均衡产品:F5 、深信服 、Radware)
[b)软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)](#b)软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server))
[4、调度算法(Scheduling Algorithm)](#4、调度算法(Scheduling Algorithm))
[1、负载均衡器(Load Balancer)](#1、负载均衡器(Load Balancer))
[3、后端服务器(Real Server)](#3、后端服务器(Real Server))
[1、LVS-NAT模式(NAT mode)](#1、LVS-NAT模式(NAT mode))
[2、LVS-DR模式(Direct Routing mode)直接路由模式、应用最广泛】](#2、LVS-DR模式(Direct Routing mode)直接路由模式、应用最广泛】)
[3、LVS-TUN(IP隧道模式(IP Tunneling mode),不常用)](#3、LVS-TUN(IP隧道模式(IP Tunneling mode),不常用))
[5、TUN模式(Tunneling mode)](#5、TUN模式(Tunneling mode))
一、集群概述
LVS(Linux Virtual Server)是一个基于Linux操作系统的高性能、可扩展的负载均衡技术,用于构建可靠和高性能的服务器集群。LVS通过将客户端请求分发到多个后端服务器,以实现负载均衡,提高系统的性能、可用性和可扩展性。
(一)LVS集群主要组件组成:
1、负载调度器(Load Balancer)
负载调度器是LVS集群的核心组件,负责接收来自客户端的请求,并将请求分发到后端的服务器。它可以根据不同的调度算法(如轮询、最少连接、源地址散列等)来决定将请求发送到哪个后端服务器。常用的负载调度器有LVS/NAT、LVS/DR和LVS/TUN等。
2、后端服务器(Real Server)
后端服务器是承接客户端请求的实际服务器。负载调度器将客户端请求转发给后端服务器来处理,后端服务器可以是真实的物理服务器或虚拟机。后端服务器提供实际的服务,如WEB服务、数据库服务等。
3、IP负载均衡(IP Load Balancing)
负载调度器使用IP负载均衡技术,通过配置虚拟IP(VIP)来处理客户端的请求。VIP是集群的入口,客户端将请求发送到VIP上,负载调度器根据配置的调度算法将请求转发给后端服务器。
3.1、负载均衡技术类型:
1)四层负载均衡器:
也称为 4 层交换机,主要通过分析 IP 层及 TCP/UDP 层的流量实现基于 IP 加端口的负载均衡,如常见的 LVS、F5 等;
2)七层负载均衡器:
也称为 7 层交换机,位于 OSI 的最高层,即应用层,此负载均衡器支持多种协议,如HTTP、FTP、SMTP 等。7 层负载均衡器可根据报文内容,配合一定的负载均衡算法来选择后端服务器,即"内容交换器"。如常见的 HAProxy、Nginx。
3)负载均衡实现方式:
a)硬件负载均衡产品:F5 、深信服 、Radware
b)软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)
4、调度算法(Scheduling Algorithm)
负载调度器使用不同的调度算法来分发客户端请求到后端服务器。常见的算法包括轮询(Round Robin)、最少连接(Least Connections)、源地址散列(Source IP Hashing)等。调度算法的选择取决于具体的应用场景和需求。
LVS集群的优势包括高性能、高可用性、可伸缩性和灵活性。它可以通过添加或删除后端服务器来扩展集群的能力,同时提供故障转移和服务恢复的功能,以确保系统的可用性。LVS是一个开源技术,在Linux操作系统中广泛使用。
二、LVS结构
LVS结构指的是负责网络流量调度和负载均衡的组件结构。LVS是一种基于Linux操作系统的高性能、可扩展的服务器集群方案,通过将客户端请求分发到多个后端服务器上,实现负载均衡和高可用性。
(一)LVS结构的核心组件
1、负载均衡器(Load Balancer)
负载均衡器是整个LVS集群的前端,接收客户端请求并将其转发给后端的实际服务器。负载均衡器可以使用多种算法(如轮询、源地址哈希、最少连接等)来决定请求应该转发到哪个后端服务器上。
2、调度器(Scheduler)
调度器是负载均衡器内部的组件,根据配置的算法和策略,决定将客户端请求分发给哪个后端服务器。常见的调度算法有轮询、加权轮询、源地址哈希等。
3、后端服务器(Real Server)
后端服务器是LVS集群中实际处理客户端请求和提供服务的服务器。负载均衡器将客户端请求经过调度器的处理后,将其转发给一个或多个后端服务器。
4、监控器(Monitor)
监控器负责监测和检测后端服务器的运行状态和可用性。当后端服务器出现故障或不可用时,监控器会将其从负载均衡器的转发列表中移除,确保客户端请求不会发送到不可用服务器上。
LVS结构通过将客户端请求智能地分发给多个后端服务器,实现了负载均衡和高可用性。它可以提高服务器的并发处理能力和可扩展性,提升系统的性能和可靠性。LVS集群广泛应用于Web服务器、应用服务器、数据库服务器等多种应用场景中。
(二)三层结构
负载调度器
服务器池
共享存储
(三)架构对象
VS:Virtual Server,也称为 Director,负载均衡服务器
RS:Real Server,真正的服务器,集群中各节点
VIP:Director 向外部提供服务的 IP
DIP:Director 向内部与 RS 通信的 IP
RIP:真实服务器的 IP
CIP:客户端的 IP
三、LVS工作模式
LVS(Linux Virtual Server)具有多种工作模式,常见的包括以下几种:
1、LVS-NAT模式(NAT mode)
在NAT模式下,负载均衡器作为网络地址转换器(NAT)工作,将客户端请求的目标地址修改为后端服务器的地址,并将响应从后端服务器返回给客户端。这种模式可以隐藏后端服务器的真实地址,提高系统的安全性。
2、LVS-DR模式(Direct Routing mode)直接路由模式、应用最广泛】
在DR模式下,负载均衡器将客户端请求转发到后端服务器,但响应直接由后端服务器返回给客户端,负载均衡器不参与数据的转发。这种模式需要将负载均衡器和后端服务器处于同一个子网中,以便客户端能够直接访问后端服务器。
3、LVS-TUN(IP隧道模式(IP Tunneling mode),不常用)
在IP隧道模式下,负载均衡器通过IP隧道技术,将客户端请求封装在IP包中,并通过隧道转发给后端服务器。后端服务器处理请求后,将响应通过隧道发回给负载均衡器,再由负载均衡器返回给客户端。与TUN模式相比,IP隧道模式使用不同的隧道实现。
4、FULL-NAT模式(双向转换模式,不常用)
FULL-NAT模式是一种双向转换模式,通过在网络边界设备上进行地址映射来实现公网IP地址与内部IP地址的相互转换。在FULL-NAT模式下,数据包在进出网络边界设备时会进行地址转换,使得内部IP地址能够与公网IP地址进行通信。FULL-NAT模式相对于TUN模式来说,更加复杂且不常用。
5、TUN模式(Tunneling mode)
TUN模式是一种基于IP层的隧道模式,在TUN模式下,负载均衡器通过建立隧道(tunnel)技术,将客户端请求封装在IP包中,数据包在隧道传输过程中不做地址转换,仅进行封装和解封装操作,并通过隧道转发给后端服务器。后端服务器处理请求后,将响应通过隧道发回给负载均衡器,再由负载均衡器返回给客户端。TUN模式常用于虚拟私有网络(VPN)的实现。
这些工作模式可以根据实际需求和网络环境选择,每种模式都有自己的特点和适用场景。根据工作模式的选择,配置正确的网络环境和路由设置,LVS可以实现高性能的负载均衡和高可用性的服务。
四、LVS负载均衡算法
1、静态负载均衡
rr(round robin,轮询 )
wrr(weight round robin,加权轮询)
sh(source hashing,源地址散列算法(HASH))
dh(destination hashing,目标地址 HASH)
2、动态负载均衡
lc(leash-connection,最少连接 )
简单算法:active * 256 + inactive (谁的小选谁)
wlc(加权最少连接)
简单算法:(active * 256 + inactive) / weight(谁的小选谁)
sed(最少期望延迟)
简单算法:(active + 1) * 256 / weight (谁的小选谁)
nq(never queue,永不排队)
LBLC(基于局部性的最少连接 )
LBLCR(基于局部性的带复制功能的最少连接)
五、ipvsadm命令详解
|----|-------------|
| -A | 添加虚拟服务节点 |
| -D | 删除虚拟服务节点 |
| -L | 查看虚拟服务节点列表 |
| -a | 添加真实服务节点 |
| -d | 添加真实服务节点 |
| -l | 添加真实服务节点 |
| -t | 指定虚拟服务器IP地址 |
| -s | 指定虚拟服务器IP地址 |
| -r | 指定虚拟服务器IP地址 |
| -w | 指定权重值 |
| -g | 直接路由模式(默认) |
| -i | 直接路由模式(默认) |
| -m | NAT模式 |
六、LVS配置案例
(一)基础配置
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
关闭Selinux
setenforce 0
关闭Networkmanager
systemctl stop NetworkManager && systemctl disable NetworkManager
配置IP地址
实验要求准备三台虚拟机,同时可以使用主机与虚拟机之间的通联
虚拟机1:
第一块网卡ens33:192.168.11.101

第二块网卡ens36:192.168.1.100
虚拟机2:
192.168.11.102

虚拟机3:
192.168.11.103

(二)实现NAT模型搭建
拓补图

1、负载调度器配置
1.1、配置IP地址
增加一块网卡然后查看第二块网卡名称
ip a

配置ip地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
网卡参数为:
TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2

为了达到使用效果,将主机的VMnet5默认网关地址改为第一台虚拟机的ens36的网卡IP地址,进行访问。

虚拟机之间互ping网络测试


ping主机

1.2、安装ipvsadm
yum install -y ipvsadm

解析:
ipvsadm是一个Linux系统中的工具,用于配置和管理IPVS(IP Virtual Server)服务。IPVS是一个网络负载均衡技术,它可以将来自客户端的请求分发到多个后端服务器上,以实现负载均衡和高可用性。通过ipvsadm工具,可以配置和管理IPVS的调度算法、虚拟服务、后端服务器等参数。
1.3、开启路由转发功能(两种方式)
vim /etc/sysctl.conf
vim /etc/sysctl.d/route.conf
须知:
/etc/sysctl.d/是没有这个文件的,需要我们手动vim进行创建并编辑内容
添加内容如下:
net.ipv4.ip_forward = 1
解析:
"net.ipv4.ip_forward = 1"是Linux内核中的一个网络配置参数,它的作用是启用IP数据包的转发功能。当这个参数的值设置为1时,表示允许Linux系统将收到的IP数据包转发到其他网络接口,实现数据包在不同网络之间的传递。
使用命令使其生效 (分别对应上述两种方式)
sysctl -p
sysctl -p /etc/sysctl.d/route.conf

1.4、加载ip_vs模块
modprobe ip_vs
lsmod | grep ip_vs

命令解析:
modprobe
: 这是一个命令,用于加载内核模块。
ip_vs
: IP_VS是一种内核模块,它实现了Linux上的虚拟服务器技术。
lsmod
: 这是一个命令,用于列出已加载的内核模块。
|
: 这是一个管道符号,用于将一个命令的输出作为另一个命令的输入。
grep
: 这是一个命令,用于在输入中搜索指定的模式(或正则表达式)并返回匹配的行。综上所述,
modprobe ip_vs
命令会加载IP_VS内核模块,而lsmod | grep ip_vs
命令会列出已加载的内核模块,并过滤出包含"ip_vs"关键词的部分。这样可以查看系统中是否已加载了IP_VS模块。
1.5、启动ipvsadm服务
systemctl start ipvsadm
这里显示启动服务失败,主要原因是缺少这个文件

创建这个缺失的文件
touch /etc/sysconfig/ipvsadm

1.6、配置负载分配策略
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.11.102:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.11.103:80 -m
命令解析:
"-A"表示添加一个新的虚拟服务或者后端服务器,"-t"指定了目标地址和端口,"-s"指定了调度算法,"-r"指定了后端服务器的地址和端口,"-m"用于指定调度算法的参数。
- 第一条命令:添加一个新的虚拟服务,目标地址为192.168.1.100,监听端口为80,使用rrip算法作为调度算法。
- 第二条命令:添加一个新的后端服务器到虚拟服务中,虚拟服务的目标地址为192.168.1.100,监听端口为80,后端服务器的地址为192.168.11.102,服务端口为80,使用默认的调度算法。
- 第三条命令:添加一个新的后端服务器到虚拟服务中,虚拟服务的目标地址为192.168.1.100,监听端口为80,后端服务器的地址为192.168.11.103,服务端口为80,使用默认的调度算法。
1.7、保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
命令解析:
IPVS(IP Virtual Server)是Linux内核中的一个模块,提供了一种负载均衡和集群的解决方案。IPVSADM是一个与IPVS交互的工具,用于配置和管理IPVS的规则和设置。 该命令的作用是将当前IPVS的配置保存到指定的文件中,以便在需要时可以重新加载配置。

1.8、查看策略
ipvsadm -Ln

cat /etc/sysconfig/ipvsadm

2、web节点配置
2.1、安装nginx
yum install -y nginx

2.1、启动服务
systemctl start nginx
2.2、更改测试页面进行访问
在第二台虚拟机上进行操作:
echo nginx1 > /usr/share/nginx/html/index.html
在第三台虚拟机上进行操作:
echo nginx2 > /usr/share/nginx/html/index.html
2.3、使用虚拟机1进行访问测试
curl 192.168.11.102
curl 192.168.11.103

2.4、使用主机进行访问测试:

注: 使用 ctrl+F5 深度刷新,通过利用 nginx 的方式,实现 LVS 的负载均衡

(三)实现DR模型搭建
实验拓补图

实验要求
准备三台虚拟机,同时可以使用主机与虚拟机之间的通联
虚拟机1:
ens33:192.168.11.101

ens33:0:192.168.11.200
注:网卡信息在下方
虚拟机2:
192.168.11.102

虚拟机3:
192.168.11.103

ping虚拟机之间网络

ping主机

1、负载调度器配置
第一台虚拟机上的配置:
1.1、调整ARP参数
vim /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects = 0

sysctl -p

1.2、配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:1
vim ifcfg-ens33:1

重启网络
systemctl restart network
1.3、安装ipvsadm
yum install -y ipvsadm

1.4、加载ip_vs模块
modprobe ip_vs
lsmod | grep ip_vs

1.5、启动ipvsadm服务
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm
注:跟上个NET做法一样,没有这个文件的话是启动不了服务的
1.6、配置负载分配策略
ipvsadm -A -t 192.168.11.200:80 -s rr
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.102:80 -g
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.103:80 -g
1.7、保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm

1.8、查看策略
ipvsadm -Ln
cat /etc/sysconfig/ipvsadm

2、web节点配置
第二台虚拟机和第三台机器配置
2.1、调整ARP参数
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce=2

sysctl -p

2.2、配置虚拟IP地址
两台均是一样的配置
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.11.200
NETMASK=255.255.255.255
NETWORK=192.168.11.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=192.168.11.255
ONBOOT=yes
NAME=loopback

2.3、重启网络进行查看

2.4、添加回环路由
route add -host 192.168.11.200/32 dev lo:0
3、安装nginx
yum install -y nginx
启动服务
systemctl start nginx
3.1、编辑网页访问文件
echo nginx1 > /usr/share/nginx/html/index.html

echo nginx2 > /usr/share/nginx/html/index.html

3.2、进行测试
curl 192.168.11.102
curl 192.168.11.103

3.3、进行抓包查看
使用系统自带的抓包工具进行查看
tcpdump -i ens33:0

内容解析:
"ARP, Request who-has 192.168.11.103 tell localhost.localdomain, length 28"是一个ARP请求消息,表示有一台主机正在寻找具有IP地址192.168.11.103的目标主机。该请求消息的长度为28字节。
"ARP, Reply 192.168.11.103 is-at 00:0c:29:34:85:61 (oui Unknown), length 46"是一个ARP回复消息,表示具有IP地址192.168.11.103的目标主机的MAC地址是00:0c:29:34:85:61。该回复消息的长度为46字节。
ARP协议用于将IP地址映射到MAC地址,以便在局域网上进行通信。请求消息用于询问目标主机的MAC地址,回复消息用于告知源主机所要访问的目标主机的MAC地址。
使用软件进行查看
(ps:这个软件查看相对来说条理清晰,比系统自带的好用多了)

第一行表示在时刻1118,从IP地址192.168.11.11向IP地址192.168.11.200发送了一个HTTP GET请求,请求的内容是根路径(/)。
第二行表示在时刻1122,从IP地址192.168.11.200向IP地址192.168.11.11发送了一个HTTP响应,响应的状态码是200 OK,响应的内容是文本/HTML格式。
第三行表示在时刻1123,从IP地址192.168.11.11向IP地址192.168.11.200发送了一个HTTP GET请求,请求的内容是/favicon.ico。
第四行表示在时刻1128,从IP地址192.168.11.200向IP地址192.168.11.11发送了一个HTTP响应,响应的状态码是404 Not Found,响应的内容是文本/HTML格式。
总结
LVS集群是一种强大而灵活的负载均衡技术,能够提供高可用性、高性能和灵活的配置管理。在实际应用中,LVS集群为我们提供了可靠的解决方案,提升了系统的可用性和性能,对于大规模的网络应用来说具有重要的意义。本人也是初学,可能有理解不到位的地方,请大家多多见谅。