一、LVS简介
LVS(Linux Virtual Server)是一个开源的负载均衡软件,它运行在Linux操作系统上,用于将网络流量分发到多个服务器上,以实现负载均衡和高可用性。
工作原理:将客户端请求通过网络转发到后端的多台服务器上,从而分担服务器的负载压力。LVS提供了多种负载均衡算法,包括轮询、加权轮询、最少连接等,可以根据实际需求选择合适的算法。
二、LVS工作模式
LVS有三种常用的工作模式,分别是NAT模式、IP隧道模式和直接路由模式。
-
NAT模式(Network Address Translation):在NAT模式下,LVS调度器将客户端请求的目标IP地址和端口进行修改,然后将请求转发给后端服务器。后端服务器将响应返回给LVS调度器,再由LVS调度器修改响应的源IP地址和端口,最后将响应返回给客户端。这种模式适用于所有的TCP和UDP应用。
-
IP隧道模式(IP Tunneling):在IP隧道模式下,LVS调度器将客户端请求封装在一个新的IP包中,然后通过IP隧道将请求发送给后端服务器。后端服务器接收到请求后,将响应封装在一个新的IP包中,再通过IP隧道将响应返回给LVS调度器,最后由LVS调度器将响应返回给客户端。这种模式适用于所有的IP协议。
-
直接路由模式(Direct Routing):在这种模式下,用户请求LVS到达 director,director将请求的报文的目标 MAC地址改成后端的realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(保持不变),然后director将报文发送到realserver,realserver检测到目标为自己本地VIP,如果在同一个网段,然后将请求直接返给用户。如果用户跟realserver不在一个网段,则通过网关返回用户。
三、LVS-NAT的工作流程
LVS-NAT的工作流程如下:
- 客户端发送请求到LVS调度器(Load Balancer)的虚拟IP地址和端口。
- LVS调度器接收到请求后,根据负载均衡算法选择一个后端服务器(Real Server)。
- LVS调度器将客户端请求的目标IP地址和端口进行修改,将请求转发给选中的后端服务器。
- 后端服务器接收到请求后进行处理,并生成响应。
- 后端服务器将响应返回给LVS调度器。
- LVS调度器将响应的源IP地址和端口进行修改,然后将响应返回给客户端。
在LVS-NAT模式下,LVS调度器充当了一个中间人的角色,通过修改IP地址和端口来实现请求和响应的转发。这种模式可以适用于各种TCP和UDP应用,并且可以提供负载均衡和高可用性的功能。
需要注意的是,LVS-NAT模式需要在LVS调度器和后端服务器之间进行网络地址转(NAT),因此可能会引入一定的网络开销和延迟。另外,LVS调度器也需要维护转发表来跟踪客户端请求和后端服务器的状态。
四、部署流程
一、环境准备:四台Linux服务器(centos),一台客户机,一台LVS服务器,两台web服务器。
地址分配:
- test :VWnet0,192.168.3.230
- LVS:VMnet0,192.168.3.205 ;VMnet2,192.168.220.128(双网卡)
- web1:VMnet2,192.168.220.129
- web2:VMnet2,192.168.220.130
注意:web1 和 web2 配置网卡之前装好httpd服务。(关闭防火墙和SElinux,启动httpd)
二、在web1和web2上配置网站和路由:
web1:
[root@web1 ~]# echo web1 > /var/www/html/index.html
[root@web1 ~]# route add -net 192.168.3.0/24 gw 192.168.220.128
web2:
[root@web2 ~]# echo web2 > /var/www/html/index.html
[root@web2 ~]# route add -net 192.168.3.0/24 gw 192.168.220.128
三、LVS配置路由功能和负载均衡
[root@LVS ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@LVS ~]# yum -y install ipvsadm
[root@LVS ~]# ipvsadm -A -t 192.168.3.205:80 -s rr
[root@LVS ~]# ipvsadm -a -t 192.168.3.205:80 -r 192.168.220.129:80 -m
[root@LVS ~]# ipvsadm -a -t 192.168.3.205:80 -r 192.168.220.130:80 -m
四、client测试
[root@client ~]# yum -y install elinks
[root@client ~]# elinks --dump http://192.168.3.205
(反复执行你会看到web1和web2轮询出现)
如果不成功检查LVS、web1、web2的防火墙状态;httpd服务的状态。
------------------------------------------------实验至此结束-------------------------------------------------------