Lvs网络负载均衡
网络负载均衡
1.基于网络设备的负载均衡(设备层面)
Cisco的以太网通道、F5负载均衡
2.基于操作系统的负载均衡
Lvs常用的三种负载均衡模式
1.Lvs nat模式
2.Lvs ip-tun模式
3.Lvs dr模式
lvs net 模式
1)Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的相应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
Ip tun模式
2)Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决整个问题,调度器把请求报文IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN技术后,负载均衡系统的最大吞吐量可以提高10倍。
Lvs dr模式
3)Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。
四种常用的轮叫负载算法
1)轮叫(Round Robin)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2)加权轮叫(Weighted Round Robin)
调度器通过“加权轮叫”调度算法根据实际服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3)最少链接(Least Connections)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
4)加权最少连接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
实验部分
一、lvs nat配置
准备部分
window中(外部用户)利用 VMnet1这块网卡来进行和Linux进行通信,设置静态ip地址为8.8.8.1,子网掩码为255.255.255.0。
准备三台linux服务器,分别为lvs-server,real-webserver1,ral-webserver2,lvs-server需要2块网卡,一块左侧网卡为VMnet1,和真实机的网卡相对称,第二块网卡用VMnet2,同其他2台linux webserver同属一个网段,所以需将另外2台WebServer的服务器网卡改为VMnet2。
lvs-server:
ifconfig eth0 8.8.8.8 netmask 255.255.255.0 ifconfig eth1 192.168.10.1 netmask 255.255.255.0
real-webserver1:
ifconfig eth0 192.168.10.2 netmask 255.255.255.0 route add default gw 192.168.10.1
real-webserver2:
ifconfig eth0 192.168.10.3 netmask 255.255.255.0 route add default gw 192.168.10.1
分别检测防火墙和SElinux状态
iptables -L -n
sestatus
以上步骤做完后,可以检测网络连通性,windows上可以ping同lvs-server中的eth0网卡8.8.8.8,lvs-server中向左可以ping通windwos的8.8.8.1,向右可以ping通real-webserver1的地址192.168.10.2和real-webserver1的地址192.168.10.3,就是说3台linux服务器之间都可以相互ping通,则此时网络配置正确。
Lvs nat服务器脚本
lvs server:
echo 1 >/proc/sys/net/ipv4/ip_forward #路由管道开启
安装ipvsadm软件
yum -y install ipvsadm
新建一个脚本
# vi ipvs.sh #!/bin/bash #lvs.sh ipvsadm -C ipvsadm -At 8.8.8.8:80 -s rr ipvsadm -at 8.8.8.8: -r 192.168.10.2:80 -m ipvsadm -at 8.8.8.8: -r 192.168.10.3:80 -m ipvsadm -L -n --增加执行权限 # chmod a+x ipvs.sh --执行脚本 # ./ipvs.sh
分别在real-webserver1根目录下创建index.html文件 echo "192.168.10.2" >index.html,real-webserver2下echo "192.168.10.3" >index.html
此时,访问8.8.8.8,会分别轮询2台real-webserver,分别看到不同的ip地址。
二、lvs ip-tun配置
准备部分
window中(外部用户)利用 VMnet1这块网卡来进行和Linux进行通信,设置静态ip地址为200.168.10.4,子网掩码为255.255.255.0。
这种模式下lvs-server只需要1块网卡,所以需要停掉上次实验添加的eth1
在这种模式下,3台linux服务器都是用VMnet1来进行通信,所以,更改3台linux服务器的网卡为VMnet1。此时在windows下,能同时ping通linux3台服务器。
lvs-server:
ifconfig eth0 200.168.10.1 ifconfig eth1 down --配置隧道网卡 ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 --添加路由表 route add -host 200.168.10.10 dev tunl0 # vi ipvs.sh #!/bin/bash #lvs.sh ipvsadm -C ipvsadm -At 200.168.10.10:80 -s rr ipvsadm -at 200.168.10.10:80 -r 200.168.10.2 -i ipvsadm -at 200.168.10.10:80 -r 200.168.10.3 -i ipvsadm -L -n --增加执行权限 # chmod a+x ipvs.sh --执行脚本 # ./ipvs.sh
real-webserver1:
--删除网关 route del default ifconfig eth0 200.168.10.2 ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 route add -host 200.168.10.10 dev tunl0 vi arp.sh #/bin/bash #arp.sh echo 1 >/proc/system/net/ipv4/conf/tunl0/arp_ignore echo 2 >/proc/system/net/ipv4/conf/tunl0/arp_announce echo 1 >/proc/system/net/ipv4/conf/all/arp_ignore echo 2 >/proc/system/net/ipv4/conf/all/arp_announce # chmod a+x arp.sh # ./arp.sh --赋值脚本到200.168.10.3真实服务器 scp arp.sh 200.168.10.3:/root/
real-webserver2:
--删除网关 route del default ifconfig eth0 200.168.10.3 --配置ip tun网卡 ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 route add -host 200.168.10.10 dev tunl0 --执行上步复制过来的脚本 # ./arp.sh
分别在real-webserver1根目录下创建index.html文件 echo "200.168.10.2" >index.html,real-webserver2下echo "200.168.10.3" >index.html
此时,访问192.168.10.10,会分别轮询2台real-webserver,分别看到不同的ip地址。
二、lvs DR配置
lvs-server:
--关闭tunl0网卡 # ifconfig tunl0 down # ifconfig eth0:0 200.168.10.10 netmask 255.255.255.255 up # route add -host 200.168.10.10 dev eth0:0
# vi ipvs.sh #!/bin/bash #lvs.sh ipvsadm -C ipvsadm -At 200.168.10.10:80 -s rr ipvsadm -at 200.168.10.10:80 -r 200.168.10.2 -g ipvsadm -at 200.168.10.10:80 -r 200.168.10.3 -g ipvsadm -L -n # ./lvs.sh
real-webserver1:
# ifconfig tunl0 down # ifconfig lo:0 200.168.10.10 netmask 255.255.255.255 up # route add -host 200.168.10.10 dev lo:0 vi arp.sh #/bin/bash #arp.sh echo 1 >/proc/system/net/ipv4/conf/lo/arp_ignore echo 2 >/proc/system/net/ipv4/conf/lo/arp_announce echo 1 >/proc/system/net/ipv4/conf/all/arp_ignore echo 2 >/proc/system/net/ipv4/conf/all/arp_announce # chmod a+x arp.sh # ./arp.sh
real-webserver2:
# ifconfig tunl0 down # ifconfig lo:0 200.168.10.10 netmask 255.255.255.255 up # route add -host 200.168.10.10 dev lo:0 vi arp.sh #/bin/bash #arp.sh echo 1 >/proc/system/net/ipv4/conf/lo/arp_ignore echo 2 >/proc/system/net/ipv4/conf/lo/arp_announce echo 1 >/proc/system/net/ipv4/conf/all/arp_ignore echo 2 >/proc/system/net/ipv4/conf/all/arp_announce # chmod a+x arp.sh # ./arp.sh
同样,分别在real-webserver1根目录下创建index.html文件 echo "200.168.10.2" >index.html,real-webserver2下echo "200.168.10.3" >index.html
此时,访问192.168.10.10,会分别轮询2台real-webserver,分别看到不同的ip地址。
浙公网安备 33010602011771号