Linux Virtual Server LVS Load Balancing

简介:
Linux虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的*软件.利用KVS可以实现高可用的、可伸缩缩的Web, Mail, Cache和Medial等网络股务..井在此基 础上开发支持庞大用户数的,可伸缩的,高可用的电子商务应用。LVS1998年发展到现在,已经变得比较成熟,目前广泛应用在各种网络服务和电了商务应用中.

LVS具有很好的伸缩缩性、可靠性和管埋性,通过LVS要实现的最终目标是:利用linux 操作系统和LVS集群软件实现一个高可用、高性能,低成本的服务器应用集群。

LVS集群的组成
利用LVS架设的服务器群系统由3个部分组成:最前端的是负栽均衡层(这里用 Lo ad Balancer表示),中间是服务器集群层(用Server Array表示).
LVS体系结构如下图所示:
Linux Virtual Server  LVS Load Balancing

下面对LVS的各个组成部分进行详细介绍
负栽均衡层:位于整个集群系统的最前端,由一台或多台负栽调度器(Dircctm Server)组成.LVS核心模块IPVS就安装在director Server上,而director的主要作用类似于一个路由器,它含有为完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给服务器群组层的应用服务器(real Server)。同时,在director server上还要安装队real server的监控模块Ldirectord,此模块用于监测各个real server 服务的健康状况。在real server 不可同时可以讲其从LVS路由表中剔除,在恢复时重新加入。
服务器群组层:由一组实际运行应用服务的机器组成,real Server可以是Web服务器、Mail服务器、FTP服务器、DNS服务器、视颊服务器中的一个或多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接:实际的应用中, Director Server也可以同时兼任Real Server的角色
共字存储层是为所有Real Server提供共亨存储空问和内容一致性的存储区域,一般由磁盘阵列设备组成。为了提俱内容的一致性,一般可以通过NFS网络义件系统共 亨数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件 系统,例如Red Hat的GFS文件系统,Oracle提供的OCFS2文件系统等。
从整个LVS结构可以看出,Director Server是整个LVS的核心。目前,用干Director Server 的操作系统只有Linux和FreeBSD, Linux 2.6内核完全内置了LVS的各个模块,不用任何 设置就可以支持LVS功能。
对丁 Real.Server,几乎所有的系统平台,如 Linux、.. Windows、Solaris、AIX、BSD 系列等都能很好地支持它


LVS集群的特点

1. IP 负载均衡与负载调度
1负栽均衡技术有很多实现方案,有基于DNS.域名轮流解析的方法,有基于客户端调度访问的方法,还有基于应用层系统负栽的调度方法,还有基于p地址的调度方法。在这些负栽 调度算法中,执行效率最卨的是IP负栽均衡技术。
LVS的IP负栽均衡技术是通过IPVS模块来实现的。IPVS是LVS集群系统的核心软件, 它的主要作用是:安装在Director Server上,同时在Director Server ..上虚拟出一个IP地址, 用户必须通过这个虚拟的IP地址访问服务器,这个虚拟IP —般称为LVS的VIP,即Virtual IP  访问的请求首先经过VIP到达负栽调度器,然后由负栽调度器从Real Server列表中选取 一个服务节点响应用户的请求。
在用户的清求到达负栽调度器后,调度器如何将请求发送到提供服务的Real Server节 点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术。IPVS实现负栽均 衡的方式有3种.分别是NAT、TUN和DR。下面进行详细介绍。


IPVS/NAT :即 Virtual Server via Network Address Translation,也就是网络地址翻译技术实现虚拟服务器。当用户请求到达调度器时,调度器将请求报文的目标地址(即 虚拟IP地址)改写成选定的Real Server地址,同时将报文的目标端口也改成选定的 Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server将数据返回给用户时,需要再次经过负栽调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负栽调度过程。可以看出,在NAT方式下,用户请求和响应报文都必须经过Director Server地址重写, 当用户请求越来越多时,调度器的处理能力将成为瓶颈. 如下图所示:IPVS/NAT 架构图


Linux Virtual Server  LVS Load Balancing


VS/TUN :即Virtual Server via IP Tunneling,也就是通过IP隧道技术实现虚拟服务器。这种方式的连接调度度和管理与VS/NAT方式一样,只是报文转发方法不同。在 VS/TUN方式中,调度器采用IP隧道技术将用户清求转发到某个Real Server,而这 个Real Server 将直接响应用户的请求,不再经过前端调度器。此外,对Real Server 的地域位置没有要求,可以和Director Server位于同一个网段,也可以在独立的一个 网络中。因此,在TUN方式中,调度器将只处理用户的报文请求,从而使集群系统 的吞吐量大大提高。如下图所示VS/TUN 架构图:

Linux Virtual Server  LVS Load Balancing

VS/DR:即Virtual Server via Direct Routing,也就是用直接路由技术实现虚拟服务器。 这种方式的连按调度和管理与前两种一样,但它的报文转发方法又有所不同,VS/DR 通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户.免去了VS/TUN中的IP隧道开销,这种方式是3种负莪调度方式中 性能最好的,但是要求Director Server与Real Server必须由一块网卡连在同一物理网段上。

如下图所示:VS/DR 架构图

Linux Virtual Server  LVS Load Balancing

(2)负我调度算法

前面介绍过,负载调度器是根据各个服务器的负栽情况,动态地选择一台Real Server响 应用户请求。那么动态选择是如何实现呢?其实就是通过这里要说的负栽调度算法。根据不同的网络眼务需求和眼务器配IPVS实现T8种负栽调度算法。这里详细讲述最常用的4 种调度算法。

轮叫调度 < Round Robin)。
“轮叫”调度也叫1:1调度,调度器通过“轮叫”调度算法将外部用户请求按顺序1:1地分配到集群中每个RealServer 上.这种算法平等地对待毎一台Real Server, 而不管服务器上. 实际的负栽状况和连接状态.

加权轮叫调度(Weighted Round Robin)。
“加权轮叫”调度算法根据Real Server的不同处理能力来调度访问请求。可以对每台 Real Server设置不同的调度权值,对性能相对较好的Real Server可以设置较高的权值,而对 处理能力较弱的Real Server,可以设罝较低的权值,这样保证了处理能力强的服务器处理更多的访问流董,充分合理地利用J了服务器资源。同时,调度器还可以自动査询Real Server的 负栽情况,并动态地调整其权值。

最少连接调度(Least Connections)
“最少连接”调度箅法动态地将网络请求调度到已建立的连接数朵少的服务器上.如果集群系统的真实眼务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。算法:lc:least connection  overhead=active*256+inactive overhead最小值胜出;


加权最少连接调度(Weighted Least Connections)。
“加权最少连接调度”是“最少连接调度”的超集。每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态地设置相应的权值,默认权值为1。加权最小连接调 度在分新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。算法: overhead=active*256+inactive/weight   overhead最小值胜出;


sed:shorttest expect delay  最小期望延迟(改进的wlc) 算法:overhead=(active+1)*256/weight,案例:假如DFG三台机器分别权重123,连接数也分别是123.那么如果使用WLC算法的话一个新请求进入时它可能会分给DFG中的任意一个。使用sed算法后会进行这样一个运算:

D(1+1)/1

F(1+2)/2

G(1+3)/3


nq:nerver queue        增强改进的sed算法.如果有台real Server的连接数=0直接分配,不需要再进行sed运算


其他4种调度算法分別为:基于局部性的最少连接(Locality-Based Least Connections), 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)、目标地址散列(Destination Hashing)和源地址散列(Source Hashing)。



应用实例:

1、IPVS/NAT

NAT配置方式很简单;

# grep  -E -i "ipvs|IP_VS" /boot/config-2.6.32-431.el6.x86_64
# 查看linux内核是否支持ipvs


设置VIP主机:

ipvsadm -A -t 220.20.20.1:80 -s wlc
ipvsadm -A -t 220.20.20.1:21 -s wrr
ipvsadm -a -t 220.20.20.1:80 -r 172.16.0.2:80 -m
ipvsadm -a -t 220.20.20.1:80 -r 172.16.0.3:8000 -m -w 2
ipvsadm -a -t 220.20.20.1:21 -r 172.16.0.2:21 -m
# -A --add-service 增加虚拟服务器。
# -t --tcp-service service-address 指定此虚拟服务器提供的是tcp的服务[vip:port]
# -r --real-server server-address 指定真实服务器的IP地址[real server:port
# -m  用于指定LVS的工作模式为NAT模式;
# -w --weight 指定集群节点的权重,权重值越大,表示此服务器的责任越大

2、IPVS/DR

Director:

# ifconfig eth0:0 220.20.20.1 netmask 255.255.255.255 broadcast 220.20.20.1 up
# route add -host 220.20.20.1 dev eth0:0
ipvsadm -A -t 220.20.20.1:80 -s rr
ipvsadm -a -t 220.20.20.1:80 -r 192.168.10.9 -g
ipvsadm -a -t 220.20.20.1:80 -r 192.168.10.10 -g
ipvsadm -L -n


real server 配置:

# 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
# ifconfig lo:0 220.20.20.1 netmask 255.255.255.255 broadcast 220.20.20.1 up
# route add -host 220.20.20.1 dev lo:0


arp_ignore 和 arp_announce 内核参数设置,详情请参考:http://chrome.blog.51cto.com/7933682/1395605




本文出自 “Linux High Availabi” 博客,请务必保留此出处http://chrome.blog.51cto.com/7933682/1395604

Linux Virtual Server LVS Load Balancing,布布扣,bubuko.com

Linux Virtual Server LVS Load Balancing

上一篇:何处下载CentOS的Linux内核的源代码?


下一篇:Linux PC和ARM版的QT环境设置