【前言】还记得CDN(内容分发网络)吗?在前面的Squid实现代理服务器时,曾经提到过这个名词。如果不记得了,我们来看张示图吧!

134914878.png

 在这种CDN架构下,为了实现服务器的负载均衡,会在real-server端采用LB群集技术,为了实现服务器的高可用性,会在服务器的前端设置筛选器(Director/Dispatcher),通过不同的调度算法实现对服务器的调度,使服务器性能和状态达到最佳状态.常用的Director分为硬件的F5,软件的LVS,当然Squid和Nginx也是可以的。虽然基于硬件的F5处理速度要优于软件,但是由于价格较为昂贵,所以及使用的性价比来说,我们国人开发的LVS还是很受亲睐的!下面我们来深入了解一下LVS.

【LVS常用调度算法】

静态调度:没有考虑服务器端负载、状态等因素,只考虑到算法本身.当服务器不在线或则已经达到负载上限时,则不会相应用户的请求.

RR(Round-robin)轮训调度算法:根据真实服务器的数目进行依次调度,然后进行循环的一种简单的算法.

②WRR(Weighted Round-robin)加权轮训调度算法:相比于RR调度算法,会在它的基础上给不同的服务器加上一个权值,权值的大小,根据实际情况而定,相比于RR算法使得服务器的效率有所提升.

③DH(Destination hashing)目标Hash:某些特定的服务,需要用该调度算法,来实现对于用户访问的目的的记忆,实现用户一段时间的访问同一个目的,不会出现数据的丢失和错乱.此算法应用于应用服务器为缓存服务器的场合,该算法尽可能的把相同的请求或同一用户的请求转发到同一缓存服务器上,可以提高命中率.

④SH(Source hashing)来源Hash:需要对访问的来源路径进行记忆,使得访问的来回走的是同一条路径.该算法类似于DH算法,但将请求的源地址作为基准,尽可能把关于同一用户请求转发相同的服务器.

动态调度:根据服务器的状态信息动态调度,实现服务器的高可用性,来动态的分配用户的请求,只有当所有的服务器都不在线或则都达到最大负载时,才会拒绝客户端的请求.

①LC(Least-connection)最少连接数算法:该算法会时刻洞察服务器状态信息.一般会关注两个参数值:active(当前活跃的连接数)、inactive(当前终止的连接数).通过算法计算active*256+inactive计算出给个服务器的overhead值,进行比较,选择值较小的进行链接,给次新的请求,都会计算服务器的overhead值,进行比较分析.

②WLC(Weighted Least-connection)加权的最少连接数算法:相比于普通的LC算法,就是给每个服务器根据它的性能的优劣分别给以权值,性能较好的增大权值.通过计算(active*256+inactive)/权值,然后进行比较,然后选取值较小的,将请求发给它.这种算法也是LVS的默认算法.

③SED(Shortest Expected delay)最少的期望延迟:同样也是根据连接数来计算,但是忽略了非活动的连接数.(active+1)*256/权值.

这种算法是为了避免应用服务器能力强而不会最先获得客户端的请求相应权.

④NQ(Nerver Queue)永不排队:判断标准与SED相同,但是在其基础上如果有空闲的应用服务器则优先分配.这种算法是为了在有限的客户端请求的情况下,权重小的应用服务器无法获得客户端请求的相应权,而过于空闲.

⑤LBLC(Locality-based Least-connection)本地的最少连接:和DH算法类似,根据请求的目标地址找出该地址最近使用的服务器,若该服务器是可用的且没有超载,则将请求发送给该服务器,若服务器不在线或则已经超载,则用最少连接数算法选出一个可用的服务器将请求发送,主要用于Cache群集系统.

⑥LBLCR(Locality-based Least-connection with Replication scheduler)带复制的基于局部的最少连接:和LBLC算法类似,但它维护的是一组服务器而不是一个服务器,该算法根据请求的目的地址找出该目标IP地址对应的服务器组,按照最少链接数的原则从整个集群系统中选出一台服务器将请求转发到该服务器,同时,当该服务器组中有段时间没有被修改,将最忙的服务器从该组中删除,以降低复制程度,主要用于Cache集群系统.

【LVS基本模型】

LVS-NAT(Net Address Translation):网络地址转换

134949804.png

特点:

①RealServer和Director必须处于同一IP段.

②这种模型最多支持的Real节点数目10个.

③由于要对数据包的4次处理,所以效率不是很好.

④由于Real节点与Client多数不在一个IP段,所以RealServer要有网关参数,网关指向Dip.

LVS-DR(Direct Routing):直接路由模型

135034808.png

特点:

①RealServer和Director必须处于同一IP段.

②这种模型最多支持的Real节点数目100个.

③由于要对数据包只经过了3次处理,所以效率很好.

④由于Real节点最后直接将请求返回给Client,所以RealServer没有必要网关参数.

LVS-TUN(IP Tunneling):ip隧道模型

135107135.png

特点:

①RealServer和Director没有必要处于同一IP段.

②这种模型使用专用隧道,可以穿越Internet网络,可以解决RealServer和Director的异地问题.

③由于使用的是专线,处理效率很高.

【LVS之NAT模型应用举例】

一:实验拓扑规划

135136963.png

二:详细配置

Node1:

Step1:地址参数配置

135209449.png

Step2:搭建Web环境

mkdir  /mnt/cdrom

mount  /dev/cdrom   /mnt/cdrom

配置本地yum源

135228265.png

yum安装Httpd,并启动服务

yum  install  httpd

service  httpd  start

Step3:编辑Web node1测试页面.

cd  /var/www/html

vim   index.html

135244770.png

Node2:

Step1:地址参数配置

135322357.png

Step2:搭建Web环境

mkdir  /mnt/cdrom

mount  /dev/cdrom   /mnt/cdrom

配置本地yum源

135338163.png

yum安装Httpd,并启动服务

yum  install  httpd

service  httpd  start

Step3:编辑Web node1测试页面.

cd  /var/www/html

vim   index.html

135402280.png

Director:

Step1:地址参数配置

135436336.png

Step2:搭建LVS环境

mkdir  /mnt/cdrom

mount  /dev/cdrom   /mnt/cdrom

配置本地yum源

135501751.png

yum安装ipvsadm.

yum  install  ipvsadm

Step3:编辑添加ipvadm的规则条目,采用RR轮训调度算法

135516831.png

Step4:打开系统的路由转发功能.

135531521.png

135556850.png

Step5:保存规则条目,并启动ipvsadm服务.

service  ipvsadm  save

service  ipvsadm  start

135607764.png

三:测试分析

客户端访问测试

1.http:192.168.10.2

135623824.png

2.http:192.168.10.3

135640827.png

3.http:192.168.1.1并刷新测试RR算法

135654790.png

135704838.png

135717271.png

四:总结

注意:

①在Director上要开启ipv4.ip_forward数据包转发功能.

②RealServer的网关一定要指向Dip.

③启动ipvsadm服务前,先执行service ipvsadm save.