基于LVS 实现负载均衡

       LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统。

       常用的负载均衡分别有七层负载均衡、四层负载均衡:所谓四层就是基于IP+端口的负载均衡,主要代表有lvs;七层负载也称内容交换,就是基于URL等应用层信息的负载均衡,主要代表有nginx。

       而对于网络中数据包的传输,是根据网络七层层层封装数据包进行传输,解析数据包的时候也是层层进行拆包。如果在第四层网络层拆包后,根据IP、端口直接将数据包进行转发至目标主机,不进一步拆包的话,对于系统的消耗无疑中降低了很多,提交系统交互性能,增大并发量。

LVS的优势:
1)高并发能力强  LVS基于内核网络层工作,有着超强的并发处理能力,可以承受更多的并发连接。
2)稳定性高    LVS是基于4层的负载均衡软件,因此LVS在所有负载均衡软件中性能最强,稳定性最高,消耗CPU和内存少。
3)应用范围广   LVS是工作在4层,所以它可以对应用层的所有协议作负载均衡,包括http、DNS、ftp等。

LVS的工作原理:

当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间

PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链

IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链

POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

LVS的相关术语:

  • DS:Director Server。指的是前端负载均衡器节点。
  • RS:Real Server。后端真实的工作服务器。
  • VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
  • DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
  • RIP:Real Server IP,后端服务器的IP地址。
  • CIP:Client IP,访问客户端的IP地址。

LVS主要模式:

      LVS主要有三种模式,分别为NAT模式、TUN模式、DR模式。这里主要讲述DR模式,其它两种模式感兴趣的伙伴请自行搜索下。

LVS DR模式:

基于LVS 实现负载均衡_第1张图片

 

  • ①当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
  • ②PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
  • ③ IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
  • ④ 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
  • ⑤ RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
  • ⑥ 响应报文最终送达至客户端

DR模式具体设置命令:

      选一台主机作为DS,这里以10.194.67.10为例。RS设置为两台主机: 10.194.67.20、 10.194.67.30

      在DS创建脚本configds.sh,具体内容如下:

#!/bin/bash
#chkconfig: 2345 10 90
#description: service lvs

#FUNC: 配置director server

#回环lo的虚拟IP
VIP="10.194.67.10"
#掩码
NM="255.255.255.0"
#端口
PORT="30001"
#RS
RS1="10.194.67.20"
RS2="10.194.67.30"



case $1 in 
start)
/usr/sbin/ifconfig eth0:0 $VIP netmask $NM up
/usr/sbin/route add -host $VIP dev eth0:0
/usr/sbin/ipvsadm -A -t $VIP:$PORT -s rr
/usr/sbin/ipvsadm -a -t $VIP:$PORT -r $RS1:$PORT -g
/usr/sbin/ipvsadm -a -t $VIP:$PORT -r $RS2:$PORT -g
;;

stop)
/usr/sbin/route del -host $VIP
/usr/sbin/ifconfig eth0:0 down
/usr/sbin/ipvsadm -C
;;
*)

echo "Usage: sh $0 {start|stop}"
;;
esac

通过运行脚本  ,DS主机即设置完成。

sh  configds.sh start 

分别在两台RS中创建configrs.sh,执行其将RS的ipv4响应策略修改。

#!/bin/bash
#chkconfig: 2345 10 90
#description: service lvs


#FUNC: 配置real server
#回环lo的虚拟IP
VIP="10.194.67.10"
#掩码
NM="255.255.255.255"

case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
/usr/sbin/ifconfig lo:0 $VIP netmask $NM broadcast $VIP up
/usr/sbin/route add -host $VIP dev lo:0
;;

stop)
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_announce
/usr/sbin/route del -host $VIP
/usr/sbin/ifconfig lo:0 down
;;

*)
echo "Usage: sh $0 {start|stop}"
;;

esac
sh  configrs.sh start 

此外,如果脚本无法执行,那么将脚本设置为linux可执行脚本,dos2unix configds.sh。

上述脚本都执行成功后,通过访问10.194.67.10:30001 即可实现访问到 10.194.67.20:30001、10.194.67.30:30001,达到负载均衡的效果。

你可能感兴趣的:(LVS)