LVS负载均衡部署的模式
1.LVS主要有三种负载均衡的模式,分别是NAT(网络地址转换模式)、DR(直连路由模式)、TUN(隧道模式)。
2.LVS为4层IP网络层负载均衡,基于IP地址和端口转发至后端真实服务器中
优点:
1)处理速度快
响应请求时速度快,四层负载均衡主要关注IP和端口信息,不需要解析完整的应用层数据,因此处理速度相对较快。
2)低延迟和高吞吐量
由于四层负载均衡不需要解析应用层数据,只需要查看IP地址和端口号即可做出路由决策,因此通常比七层负载均衡提供更低的延迟和更高的吞吐量。这对于需要高吞吐量和低延迟的应用场景非常有利。
缺点:
1)功能局限
四层负载均衡主要基于IP和端口信息进行流量分发,不能区分用户请求的内容(如图片、视频、文字等)
LVS-NAT实战案例
1.工作原理
1.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
2.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标IP地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
3.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
4.然后lvs将此报文的源地址修改为本机并发送给客户端。
2.优点
1.兼容性强
后面的真实服务器,无论是linux还是windows,只要有IP,LVS就可以进行地址转换,实现代理和负载均衡的功能
2.节约IP地址
LVS-NAT模式通过地址转换,使得内部网络的真实服务器可以使用私有IP地址,而只需要一个合法的公网IP地址(VIP)对外提供服务,使得外界网络可以访问到LVS。这有助于节省IP地址资源,特别是在IP地址资源有限的情况下。
3.网络隔离更安全
由于所有的流量都经过LVS负载均衡器,因此可以对流量进行集中管理和监控。这有助于提升后端真实服务器网络的安全性,防止未经授权的访问和恶意攻击。
3.缺点
1.性能瓶颈
由于LVS-NAT模式需要负载均衡器处理所有的进出流量,包括请求和响应数据包的地址转换,这增加了负载均衡器的处理负担。在高并发或大流量场景下,负载均衡器可能成为性能瓶颈,影响整体系统的吞吐量和响应时间。
2.扩展性有限
LVS-NAT模式最多代理20台后端真实服务器
4.部署
4.1 实验环境
client | VMnet0 | 192.168.147.1 | 本机 |
---|
lvs | VMnet0/VMnet2 | 192.168.147.153/192.168.85.138 | 安装ipvsadm |
web1 | VMnet2 | 192.168.85.139 | 安装httpd、net-tools |
web2 | VMnet2 | 192.168.85.140 | 安装httpd、net-tools |
VMware默认只安装VMnet1和VMnet8两个虚拟网卡,需要额外添加VMnet2虚拟网卡(编辑->虚拟网络编辑器->添加网络VMnet2)
4.2 web1
VMnet2网卡无法上网,需要先将网卡调整回VMnet8,下载httpd、net-tools后,再将网卡调整为VMnet2
1.网卡选择VMnet8,安装httpd和net-tools
[root@lvs-1 ~]# yum -y install httpd
[root@lvs-1 ~]# yum -y install net-tools
[root@lvs-1 ~]# systemctl start httpd
[root@lvs-1 ~]# systemctl enable httpd
[root@lvs-1 ~]# echo web1 > /var/www/html/index.html
2.网卡切换回VMnet2
[root@lvs-1 ~]# route add -net 192.168.147.0/24 gw 192.168.85.138
4.3 web2
VMnet2网卡无法上网,需要先将网卡调整回VMnet8,下载httpd、net-tools后,再将网卡调整为VMnet2
1.网卡选择VMnet8,安装httpd和net-tools
[root@lvs-2 ~]# yum -y install httpd
[root@lvs-2 ~]# yum -y install net-tools
[root@lvs-2 ~]# systemctl start httpd
[root@lvs-2 ~]# systemctl enable httpd
[root@lvs-2 ~]# echo web2 > /var/www/html/index.html
2.网卡切换回VMnet2
[root@lvs-2 ~]# route add -net 192.168.147.0/24 gw 192.168.85.138
4.4 lvs
1.启动路由功能/路由转发,启动后192.168.147.0网段的主机和web1、web2可以互通了
[root@lvs-3 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
2.安装LVS
[root@lvs-3 ~]# yum install -y ipvsadm
3.添加LVS对外提供服务的IP地址
[root@lvs-3 ~]# ipvsadm -A -t 192.168.147.153:80 -s rr
#-A表示添加一个IP
#-t表示TCP协议
#-s表示schedule调度
#rr表示轮循算法类型
4.请求转发,客户端访问LVS对外提供服务的IP地址(192.168.147.153),通过LVS将请求转发至后端真实服务器(192.168.85.139)
[root@lvs-3 ~]# ipvsadm -a -t 192.168.147.153:80 -r 192.168.85.139:80 -m
#-a表示添加一个真实服务器
#-r表示真实服务器IP地址
#-m表示nat模式工作
5.请求转发,当客户端访问LVS时,将请求转发至后端真实服务器(192.168.85.140)
[root@lvs-3 ~]# ipvsadm -a -t 192.168.147.153:80 -r 192.168.85.140:80 -m
4.5 client测试
1.浏览器访问LVS对外IP
http://192.168.147.153
每次访问的结果都不一样,web1和web2相互切换
2.查看当前ipvs模块中记录的连接信息(可用于观察LVS转发情况)
[root@lvs-3 ~]# ipvsadm -Lnc
LVS-DR实战案例
1.工作原理
1.客户端将请求发往前端的负载均衡器(LVS),请求报文源地址是CIP,目标地址为VIP。
2.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS后端真实服务器。
3.RS发现请求报文中的目的MAC是自己,就会将此报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端(CIP)。
2.优点
1.高性能
在DR模式下,负载均衡器仅负责接收客户端的请求,并将其转发到后端的真实服务器。而真实服务器处理完请求后,直接将响应返回给客户端,无需经过负载均衡器。这种方式减少了负载均衡器的处理负担,提高了系统的整体性能。
2.高效并发
客户端的请求和真实服务器的响应分别通过不同的路径传输,提高了系统的并发处理能力,使得负载均衡器能够处理更多的并发请求,适用于大型集群环境。
3.支持透传客户端源IP
在DR模式下,真实服务器能够直接获取到客户端的源IP地址,这对于日志记录、安全审计等场景非常有用。
3.缺点
1.RS和LVS必须在一个物理网络内
LVS-DR模式工作于OSI模型的第二层(数据链路层),通过修改数据帧的MAC地址来实现请求转发。因此,LVS必须与所有RS(真实服务器)处于同一二层广播域内,这样LVS才能通过ARP(地址解析协议)获取到RS的IP地址和对应的MAC地址。如果VIP和RIP不在同一个网段,它们可能不在同一个二层广播域内,这将导致LVS无法直接通过ARP获取RS的MAC地址,从而无法实现直接路由。
4.部署
4.1 实验环境
client | 192.168.147.1 | 无 |
---|
web1 | 192.168.147.157 | 192.168.147.160(VIP) |
web2 | 192.168.147.158 | 192.168.147.160(VIP) |
lvs | 192.168.147.153 | 192.168.147.160(VIP) |
4.2 web1
1.安装nginx服务
[root@web1 ~]# yum -y install nginx
2.启动nginx
[root@web1 ~]# systemctl start nginx
[root@web1 ~]# systemctl enable nginx
3.修改主页内容
[root@web1 ~]# echo web1 > /usr/share/nginx/html/index.html
4.设置lo的子接口,定义子网掩码为32位的VIP
[root@web1 ~]# yum -y install net-tools
[root@web1 ~]# ifconfig lo:0 192.168.147.160/32 #定义32个网络位,没有主机位,不会发生IP地址冲突,只是为了回复请求内容,不用于网络通信
5.设置内核参数
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp响应,不允许收,忽略用户跳过LVS直接请求后端服务器
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #为了让vip发包出去,但允许发,允许直接回复用户的请求,不用再经过LVS
4.3 web2
1.安装nginx服务
[root@web2 ~]# yum -y install nginx
2.启动nginx
[root@web2 ~]# systemctl start nginx
[root@web2 ~]# systemctl enable nginx
3.修改主页内容
[root@web2 ~]# echo web2 > /usr/share/nginx/html/index.html
4.设置lo的子接口,定义子网掩码为32位的VIP
[root@web2 ~]# yum -y install net-tools
[root@web2 ~]# ifconfig lo:0 192.168.147.160/32 #定义32个网络位,没有主机位,不会发生IP地址冲突,只是为了回复请求内容,不用于网络通信
5.设置内核参数
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp响应,不允许收,忽略用户跳过LVS直接请求后端服务器
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #为了让vip发包出去,但允许发,允许直接回复用户的请求,不用再经过LVS
4.4 lvs
1.准备VIP(设置VIP为:192.168.147.160)
[root@lvs ~]# yum -y install net-tools
[root@lvs ~]# ifconfig ens33:0 192.168.147.160 broadcast 192.168.147.255 netmask 255.255.255.0 up #ens33网卡名根据实际情况填写
#ens33:0 192.168.147.160 为虚拟子接口,用于一个网卡配置多个IP(配置的IP需要跟该网卡在同一网段中,并且为本网段未使用的IP,VIP与RIP要配到同一个网段上)
#broadcast 192.168.147.255 为广播地址,IP为本网段的最后一个IP
#netmask 255.255.255.0 为子网掩码
#up 为启动
2.添加路由
[root@lvs ~]# route add -host 192.168.147.160 dev ens33:0
#添加路由,当用户想要访问服务器集群时,通过指向该网卡的虚拟子接口(192.168.147.160),并通过该IP转发给真实服务器
3.设置路由转发
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启路由功能,开启forward后,该服务器具备了路由器的所有功能,所以只开启路由功能,其他功能全部关闭
net.ipv4.conf.all.send_redirects = 0 #禁止转发重定向报文
net.ipv4.conf.ens33.send_redirects = 0 #禁止ens33转发重定向报文
net.ipv4.conf.default.send_redirects = 0 #禁止转发默认重定向报文
4.LVS设置负载均衡条目/规则
[root@lvs ~]# yum install ipvsadm -y #安装lvs
[root@lvs ~]# ipvsadm -C #清理所有ipvs规则的命令
[root@lvs ~]# ipvsadm -A -t 192.168.147.160:80 -s rr #添加LVS对外提供服务的VIP地址
#-A 为添加虚拟服务
#-t 为指定使用tcp协议
#-s 为指定调度策略/负载均衡算法为rr(轮询)
[root@lvs ~]# ipvsadm -a -t 192.168.147.160:80 -r 192.168.147.157:80 -g #当访问VIP时,转发给真实服务器(192.168.147.157)
[root@lvs ~]# ipvsadm -a -t 192.168.147.160:80 -r 192.168.147.158:80 -g #当访问VIP时,转发给真实服务器(192.168.147.158)
#-a 为添加realserver真实服务器
#-r 为指定realserver真实服务器
#-g 为指定LVS类型为DR
5.保存配置并永久生效
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm #保存当前的IPVS配置并导出到/etc/sysconfig/ipvsadm目录中
[root@lvs ~]# systemctl enable ipvsadm
4.5 client测试
1.浏览器访问VIP(192.168.147.160)
http://192.168.147.160
每次访问的结果都不一样,web1和web2相互切换
轮询算法
静态负载均衡算法
1.RR 轮询
将外部请求按顺序轮流分配到集群中的真实服务器上
2.WRR 加权轮询
根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器,处理更多的访问流量。
动态负载均衡算法
1.LC 最少连接
动态地将网络请求调度到已建立的链接数最少的服务器上。
2.WLC 加权最少连接
在相同链接数的情况下,具有较高权值的服务器将承受较大比例的活动连接负载。