目前四层负载均衡技术中,LVS软件实现了四层负载均衡,可以在Linux服务器上实现网络服务的高可用。先简要介绍一下相关的概念,有利于我们更好地了解该技术,下图是LVS的主要工作原理图,并针对主要概念进行简要介绍:
LVS基本g'gong'zuo'yuan'li'tu上图表示客户端发送请求到达负载均衡器后,请求被转发至后端服务器中的某一台被处理的过程。VIP(Virtual IP Address)是虚IP的意思,采用一个虚拟的IP来表示负载均衡器Director,用来屏蔽Director后面的转发逻辑以及后端服务器(Real Server, RS)。Director是整个集群的前端机,负责将用户请求转发至RS。RS是真正处理请求,提供服务的后端服务器,接收转发自Director的传输层数据报文。其他相关术语见文末。
LVS负载均衡工作主要是转发,目前主流的转发模式有以下四种: Direct Route模式(DR模式)、Tunnel模式(TUN模式)、NAT模式、Full-NAT模式。下面具体介绍一下实现原理以及实验:
图1:LVS DR模式gong'zuo流程图DR模式DR是性能最好的一种模式,但在链路层上实现负载均衡的方式限制其RS和Director必须处于同一物理网络。同时,该模式不支持地址转换NAT以及端口映射。具体主要工作流程如图1所示。客户端请求到Director后,Director会将网络帧MAC地址更改成负载均衡路径上RS的MAC地址,使得请求被转发至该RS。DR模式下,Director和RS需绑到同一VIP。其中RS是通过loopback绑定来实现的。当RS收到Director转发的包时,链路层发现MAC地址是自己的,网络层在loopback中也找到自己的IP,该包就会被接收。当RS返回响应时,直接向客户端(CIP)返回即可,不用再经过Director。TUN模式目前该模式在实际应用中很少,主要是因为RS系统须是支持隧道的Linux系统,端口映射不支持,运维也很困难。该模式特征在于请求报文均经由Director,响应报文不能经由Director,相比DR的改进在于RIP、VIP、DIP为公网地址,Director能进行不同地域分发。转发流程如图2所示,客户端发送请求,Director内核收到请求首先判断数据包是否是集群服务。若是的话就封装IP(在报文头再封装一层IP报文),封装后源IP为DIP,目标IP为RIP。之后,封装后的报文由Director发送到RS,该过程种真正的IP信息被装进新的IP报文里了,所以称隧道传输。RS收到报文后会先解封装,发现里面的IP首部的目标IP为自己的lo接口VIP就会进行请求处理。处理完之后将响应由lo传给eth0网卡,再向外传(源IP:VIP,目标IP:CIP)。
图2:LVS Tunnel模式gogn'zuo'liu'cNAT模式NAT模式相比前面两种转发模式,优势在于该模式支持端口映射,而且RS可以是任意操作系统。但由下面的转发流程图我们可以看到,请求和响应报文均需要经由Director,这就使得Director极易成为高负载场景下的性能瓶颈。该模式的工作流程如下图所示:客户端发送请求到Director之后,,Director内核收到请求首先判断数据包是否是集群服务。是的话,则进行DNAT来修改数据包目标IP为RIP,转发到对应RS。RS接收处理请求后生成响应报文发回Director(源IP为RIP,目标IP为CIP)。Director通过SNAT修改数据包源IP为VIP,响应给客户端。
图3:LVS NAT模式gon'zuo'liu'cheng'tuFull-NAT模式由上述可知,三种模式各有其不足,在现在业务需求高以及流量饱和的背景下,网段的限制(DR/NAT模式)以及运维成本(Tunnel模式)会严重制约着LVS的应用和扩展,成为性能瓶颈。为解决上述问题,Full-NAT应运而生。主要实现原理如下:通过引入LVS集群内部IP(LIP),LVS核心模块IPVS通过CIP-VIP与LIP-RIP的相互转换,使LVS的Director和RS可以处在不同网段,进而解决跨网段问题,大幅度地提高了运维部署的便利性。Full-NAT的转发流程如下图所示:首先客户端的请求到Director内核中,被确定是集群服务。之后经由DNAT+SNAT,即Full-NAT,更改数据包源IP为LIP,目标IP为RIP。最后将报文发到对应RS。RS收到并处理请求后,生成响应报文发回Director(源IP为RIP,目标IP为LIP)。此处是内部路由Director,之后进行Full-NAT,将源IP修改为VIP,目标IP修改为CIP,最后响应给客户端。
图4:LVS FULL-NAT模式g'z'l'cTCP服务下模式实现实验:
DR转发模式实现:DR实验环境如下:
DR模式shi'yan'huan'jingDirector上通过脚本配置DR(记得首行加#! /bin/bash),流程如下:启动路由转发将Director打造成路由器,之后通过ipvsadm将RS添加到Director下属服务中,-t表示TCP服务。具体配置示例如下:
echo 1 > /proc/sys/net/ipv4/ip_forward # Director开启linux路由转发功能
ip addr add 192.168.182.100/32 dev eth0 #VIP绑定
IPVSADM='/sbin/ipvsadm' #通过ipvsadm设置下属RS
$IPVSADM -C #清除策略
$IPVSADM -A -t 192.168.182.100:80 -s wrr #加权轮询
$IPVSADM -a -t 192.168.182.100:80 -r 192.168.182.133:80 -m -w 5
$IPVSADM -a -t 192.168.182.100:80 -r 192.168.182.134:80 -m -w 8
同时,在每个RS上进行VIP绑定及地址解析协议ARP禁用,RS配置脚本如下:
#绑定VIP至loopback
ip addr add 192.168.182.100/32 dev lo0
#禁用VIP的ARP
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
Tunnel转发模式实现:TUN模式实验环境如下:
TUN模式实验环境Director上进行Tunnel配置方法如下:
#隧道配置
ifconfig tunl0 192.168.182.100 broadcast 192.168.182.100 netmask 255.255.255.0 up
route add -host 192.168.182.100 dev tunl0
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.182.100:80 -s rr #轮询
$IPVSADM -a -t 192.168.182.100:80 -r 192.168.182.103 -i #RS添加
$IPVSADM -a -t 192.168.182.100:80 -r 192.168.182.104 -i
此外,每个RS上也需要配置:
#隧道
同Director的隧道配置脚本,不重复赘述
#禁用ARP
同DR模式中禁用VIP的ARP部分,不重复赘述
NAT转发模式实现NAT模式实验环境如下:
NAT模式实验环境Director上用脚本来配置NAT,配置示例如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭 ICMP的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
ifconfig eth0:0 192.168.182.112 up #设置DIP
service iptables stop #关闭防火墙
IPVSADM='/sbin/ipvsadm' #通过ipvsadm工具设置下属RS
$IPVSADM -C #策略清除
$IPVSADM -A -t 192.168.182.100:80 -s wrr
$IPVSADM -a -t 192.168.182.100:80 -r 192.168.182.133:80 -m -w 4
$IPVSADM -a -t 192.168.182.100:80 -r 192.168.182.134:80 -m -w 6
修改每个RS的/etc/sysconfig/network-scripts/ifcfg-eth0文件设置DIP网关:
GATEWAY=192.168.182.112 #修改网关为DIP
Full-NAT转发模式实现Full-NAT模式实验环境如下:
Full-NAT模式实验环境在Director上进行策写入略,对应配置脚本如下:
echo 1 > /proc/sys/net/ipv4/ip_forward # Director开启路由转发功能:
ipvsadm -C #ipvsadm设置下属RS
ipvsadm -A -t 192.168.182.100:80 -s rr
ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.133:80 -b
ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.134:80 -b
ipvsadm -P -t 127.0.0.1:80 -z 127.0.0.1:80 #添加本地ip
术语列表:
DNAT:目标地址转换;NAT:地址转换;SNAT:源地址转换;Real Server, RS:真实提供服务的后端服务器;CIP:客户端IP地址;RIP:后端服务器IP地址;Src:请求源IP地址;Des:请求目标IP地址。