一.lvs概述
1.1什么是lvs
LVS(Linux Virtual Server)是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。LVS主要有两个组件:IPVS(IP Virtual Server)和LVS-NAT、LVS-DR、LVS-TUN三种工作模式。
1.2lvs的优点
高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。
高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。
灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景。
二.lvs架构
2.1lvs整体架构
LVS的整体架构主要包括负载均衡器(Load Balancer)、后端服务器(Real Server)和客户端三部分。客户端的请求首先到达负载均衡器,然后由负载均衡器根据一定的调度算法将请求转发到后端服务器进行处理,处理结果再返回给客户端。
2.2lvs工作模式
LVS支持三种主要的工作模式:
LVS-NAT(Network Address Translation):在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群。
LVS-DR(Direct Routing):在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群。
LVS-TUN(IP Tunneling):该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群。
三.lvs调度算法
3.1调度算法类型
根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法。静态方法:仅根据算法本身进行调度,不考虑RS的负载情况。动态方法:主要根据每RS当前的负载状态及调度算法进行调度。
3.2静态算法
-
轮询(Round Robin,RR):将请求依次分配给各个真实服务器,依次循环。
-
加权轮询(Weighted Round Robin,WRR):给每个真实服务器设置一个权重,根据权重的比例将请求分配给服务器。权重越高,分配到的请求越多。
3.目标地址散列(Destination Hashing, DH):根据请求的目标 IP 地址进行哈希运算,将请求分配到固定的服务器。
4.源地址散列(Source Hashing, SH):根据请求的源 IP 地址进行哈希运算,将请求分配到固定的服务器。
3.3动态算法
-
最少连接(Least Connections,LC):将新的请求分配给当前连接数最少的真实服务器。
-
加权最少连接(Weighted Least Connections,WLC):为真实服务器设置权重,综合考虑服务器的权重和当前连接数来分配请求。
-
基于局部性的最少连接(Locality-Based Least Connections,LBLC):主要考虑请求的目标 IP 地址,优先将请求分配给同一 IP 地址对应的真实服务器。
-
带复制的基于局部性最少连接(Locality-Based Least Connections with Replication,LBLCR):结合了 LBLC 和复制功能,对于目标 IP 地址相同的请求,如果对应的真实服务器没有活动连接,则可以在有活动连接的真实服务器中选择一个,并复制该连接。
四.lvs的nat模式
nat模式需要三个虚拟机完成实验。其中lvs需要两个网络适配器,其中一个为nat模式,一个为仅主机模式。而server1和server2均为仅主机模式。
配置ip
lvs主机
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.connection
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.100/24
method=manual
nmcli c reload
nmcli c up eth1
server1主机
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
nmcli c reload
nmcli c up eth0
server2主机
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
nmcli c reload
nmcli c up eth0
在lvs主机打开配置
vim /etc/sysctl.conf
net.ipv4.ip_forwaed = 1 #在最后一行添加
sysctl -p #使配置生效
下载ipvsadm
yum install ipvsadm
在lvs主机中配置规则
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20 -m
ipvsadm -Ln
watch -n 1 ipvsadm -Ln --rate
分别在server1和server2中配置
yum install httpd -y #都要下载httpd
echo webserver1-192.168.0.10 > /var/www/html/index.html #server1中配置
echo webserver1-192.168.0.20 > /var/www/html/index.html #server2中配置
结果
五.lvs的dr模式
lvs的dr模式需要五个虚拟机。其中客户端主机为nat模式。路由器主机需有两个网络适配器一个为nat模式,一个为仅主机模式。其它三个均为仅主机模式。
配置ip
client
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual
nmcli c reload
nmcli c up eth0
router
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.25.254.100/24,172.25.254.2
dns=114.114.114.114;
method=manual
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.connection
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.100/24
method=manual
nmcli c reload
nmcli c up eth0
nmcli c up eth1
配置lvs'主机(vip使用环回来创建)
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
nmcli connection reload
nmcli connection up eth0
[root@lvs ~]# ip addr add dev lo 192.168.0.200/32
配置server1主机(vip使用环回来创建)
[root@server1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
nmcli c reload
nmcli c up eth0
[root@server1 ~]# ip addr add dev lo 192.168.0.200/32
配置server2主机(vip使用环回来创建)
[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
nmcli c reload
nmcli c up eth0
[root@server2 ~]# ip addr add dev lo 192.168.0.200/32
修改Linux内核参数。server1和server2上面都要做
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
配置ipvsadm
在lvs主机上
ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
启用ip转发
在router上
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #在最后一行添加
ipvsadm -p
配置web服务
在server1和server2上配置
yum install httpd -y
echo 11111111 > /var/www/html/index.html #server1中配置
echo 22222222 > /var/www/html/index.html #server2中配置
测试结果