LVS负载均衡教程

来源:互联网 发布:花木兰锐雯淘宝多少钱 编辑:程序博客网 时间:2024/06/05 18:33

概括介绍Lvs负载均衡的基础知识


lvs的开源特点引来众多的使用者,而其中的负载均衡的支持功能又是一个强有力的优势。那么我们现在就来对lvs负载均衡的基础知识做一个简要的概括性介绍。之前我们也有细化介绍了相关内容,还希望读者们能关注我们的专题栏目。

一、lvs负载均衡转发模式及调度算法

1、负载均衡转发模式包括直接路由模式DR、网络地址转换模式NAT以及隧道模式TUN三种。在一般的互联网应用环境,选择直接路由模式是比较有利的,原因有:

(1)DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量-引用自http://www.linuxvirtualserver.org/zh/lvs3.html。从原理上可以知道,DR模式下,负载均衡器的输出和输出流量应该是基本一致的,图1证实了这个事实。

负载均衡器流量图

图1 负载均衡器流量图

(2)排错方便迅速。如果通过vip访问不到服务,则可以直接通过访问真实服务器的方式直接定位问题的所在。

(3)当负载均衡器都停止工作时,DR模式易于应急处理。通过修改dns的A记录,把先前主机名对应的vip改成真实服务器的ip地址,使服务迅速恢复起来,从而赢得时间处理负载均衡器的故障。

2、负载均衡器的调度算法

Lvs负载均衡器的调度算法有8种,详情请访问http://www.linuxvirtualserver.org/zh/lvs4.html。一般的互联网应用,多采用轮叫调度rr(Round-RobinScheduling)及加权最小连接调度wlc(WeightedLeast-ConnectionScheduling)。

二、lvs负载均衡环境安全问题

前面我们讲过,在负载均衡器上,为了获得更好的转发性能,尽量不要使用主机防火墙。那么,这怎样保证系统的安全呢?个人觉得,还是采购硬件防火墙放在负载均衡器的前面比较可靠。如果资金充裕,购买具备防ddos的硬件防火墙则更胜一筹。

三、同义词

网上有些词语有不同的说法,为了便于理解,这里给出相同意义的一些说法。

1、负载均衡器与Director为同义词。

2、真实服务器realserver与poolserver是同义词。

3、ip负载均衡技术与负载均衡模式是同义词。

四、关于负载均衡器后面真实服务器的数量

有人曾经问我:"sina是不是做了负载均衡?是不是一个负载均衡器背后放几百个服务器?"。理论上,放几百个服务器没有问题(章文嵩博士给出的数值是100),技术上也可能实现。但这不是一个好的策略。最佳的策略可能是:根据访问情况对大的应用进行分割,弄成一个个小的集群。具体到一个网站,可以把访问量大的频道独立出来,一个频道或几个频道组成一个lvs负载均衡集群。

五、话题讨论

近来nginx很受追捧,于是就有人使用了图2的架构来实现负载均衡。这种3层结构的负载均衡相对于两层的负载均衡架构,谁优谁劣?欢迎讨论。

三层结构负载均衡

图2 三层结构负载均衡



初学必看的lvs负载均衡教程



在之前,我们有介绍过关于LVS的负载均衡配置问题,很多初学的朋友总觉得看的不是很明白。那么现在我们再来从新总结一下,首先我们来认识一下配置中需要知道的术语,然后再学习配置过程。那么,关于LVS的系统基础内容我们就不多赘述了,主要针对负载均衡方面的内容做一个重点的介绍。

简单术语:

Director:前端负载均衡器,运行lvs,目前只能为Linux,针对FreeBSD刚刚出来,性能不知道如何。可以针对web、ftp、cache、mms甚至mysql等服务做loadbalance。

RealServer:后段需要负载均衡的服务器,可以为各类系统,Linux、Solaris、Aix、BSD、Windows都可,甚至Director本身也可以作为RealServer使用。

lvs Linux Virtual Server,Linux下的负载均衡器,不多作介绍了,跟DNS轮询以及一些商业产品的比较等不做论述,具体看看LVS网站,支持LVS-NAT、 LVS-DR、LVS-TUNL三种不同的方式,nat用的不是很多,这里简单介绍一下DR、TUNL方式。

DR方式适合所有的RealServer同一网段下,即接在同一个交换机上。TUNL方式就RealServer可以任意了,完全可以跨地域、空间,只要系统支持Tunnel就成(Win2k3好像已经不支持了)。

方便以后扩充的话直接Tunl方式即可;

Director系统为RHEL3+ClusterSuite;

RealServer系统为Rhel3+noarp补丁。

Director设置:

需要在Director设置的就是/etc/sysconfig/ha/lvs.cf,以及安装ClusterSuite后启动pulse服务(Redhat的lvs服务,当然也可以手动),下面是一个简单的lvs设置(没有设置director HA),man lvs.cf看看详细设置,RHEL3里已经有了详细的手册。

203.x.x.a为Director公网ip地址

203.x.x.b为需要Loadbance的域名的Ip地址

203.x.x.c 为第一个RealServer

203.x.x.d为第二个RealServer

#cat /etc/sysconfig/ha/lvs.cf
serial_no=45
primary=203.x.x.a
service=lvs
rsh_command=ssh
backup_active=0
backup=0.0.0.0
heartbeat=1
heartbeat_port=539
keepalive=10
deadtime=20
network=direct(Tunl方式改为tunnel)
nat_nmask=255.255.255.255
reservation_conflict_action=preempt
debug_level=NONE
virtual www.test.com {
active=1
address=203.x.x.b eth0:0
vip_nmask=255.255.255.255
port=80
send="GET/HTTP/1.0\r\n\r\n"
expect="HTTP"
load_monitor=uptime
scheduler=wlc
protocol=tcp
timeout=10
reentry=15
quiesce_server=0
server r1 {
address=203.x.x.c
active=1
weight=1
}
server r2 {
address=203.x.x.d
active=1
weight=1
}
}

上面的设置是对某个域名的web访问进行负载均衡,Director使用ssh定时收集RealServer上的负载,然后决定Loadbalance的分配,分配方式为WLC方式,然后启动pulse服务,看看/var/log/message里有没有什么配置错误,RHEL3里设置已经非常方便、简单。

RealServer配置:

RS系统为Rhel3,针对DR、Tunl需要不同的设置,但关键的是arp问题,这里使用的noarp module,当然Rhel3里也提供了arptables来配合lvs(效果可能不是很好),这里介绍一下noarp。

noarp编译不做介绍了,configure install后,insmod noarp把noarp加入内核,然后需要执行:
 
noarpctl add 203.x.x.b 203.x.x.a
  
这是把所有对203.x.x.b的arp请求转向203.x.x.a(Director),然后建立虚拟ip以完成路由,DR的话需要建立网卡,放在eth0或者lo都行:
 
ifconfig eth0:1 203.x.x.b netmask 255.255.255.255 up
 
Tunl方式的话需要启动tunl虚拟网卡:
 
ifconfig tunl0 203.x.x.b netmask 255.255.255.255 up
 
同样在RealServer2上同样的设置,在两个RealServer上启动apache,Director上检测一下连接:

ipvsadm -Ln
 
看看当前的负载分配,lvs的稳定性不用置疑,Rhas2.1、Rhel3里的LVS在我这里4年使用里极其稳定,访问量从当时的几百人在线到现在的接近10K,只需要根据负载增加后段的RealServer即可,但Rhas2.1的LVS对Tunl支持的不好,建议使用Rhel3进行tunl方式的 Loadbalance。

几句题外话:

lvs这两年里已经很稳定了,应用也已经很多了,maillist已经很活跃了,一些问题完全可以在maillist里找到答案。

上面只是lvs一个简单的应用,其它的复杂应用完全可以到lvs主页、maillist等查找。

lvs负载均衡的机制优势和配置方式的汇总


前面我们介绍了相关的LVS转发机制的三种方式,现在我们来归纳一下这三种机制的优点,看看他们在负载平衡中的使用有什么优势。之后,再为大家介绍一下关于这些机制的四种配置方法和架构方式。通过本文,您可以选择一个较为适合您的方式进行配置。

三种转发机制的优缺点

◆Virtual Server via NAT

VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在LVS主机上,服务器组可以用私有的IP地址。缺点是它的扩充能力有限,当服务器结点数目升到20时,LVS主机本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应封包都需要通过负载平衡LVS主机。在 Pentium 166主机上测得重写封包的平均延时为60us,假设TCP封包的平均长度为536 Bytes,则LVS主机的最大吞吐量为8.93 MBytes/s。再假设每台服务器的吞吐量为600KBytes/s,这样一个LVS主机可以带动16台服务器。

◆Virtual Server via IP Tunneling

在VS/TUN 的集群系统中,负载平衡LVS主机只将请求分配到不同的实际服务器,实际服务器将应答的资料直接返回给用户。这样,负载平衡LVS主机就可以处理巨量的请求,而不会成为系统的瓶颈。即使负载平衡LVS主机只有100Mbps的全双工网卡,虚拟服务器的最大吞吐量可以达到几Gbps。所以,VS/TUN可以极大地增加负载平衡LVS主机分配的服务器数量,它可以用来构建高性能超级服务器。VS/TUN技术对服务器的要求是所有的服务器必须支持"IP Tunneling"或者"IP Encapsulation"协议。目前,VS/TUN 的后端服务器主要运行Linux操作系统。因为"IP Tunneling"正成为各个操作系统的标准协议,所以VS/TUN也会适用运行其它操作系统的后端服务器。

◆Virtual Server via Direct Routing

同VS/TUN 一样,VS/DRLVS主机只处理客户到服务器端的连接,响应资料可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。同 VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载平衡LVS主机与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备或者设备别名不作 ARP 响应。

四种分配方法(Load-balancing Methods)

不同的分配方法建构LVS主机成四种不同的排程

负载平衡排程是以连接为单位的。在HTTP协议(nowait)中,每个对象从WEB服务器上获取都需要建立一个TCP连接,同一用户的不同请求会被分配到不同的服务器上,所以这种连接的分配完全避免了用户连结的突发性引起的负载不平衡。目前有以下4种排程算法:

轮流排程 Round-Robin Scheduling (RRS)

轮流排程算法是假设所有服务器处理性能均相同,依次将请求分配不同的服务器,算法简单,但不适用于服务器组中处理性能不一致的情况。

加权轮流排程 Weighted Round-Robin Scheduling (WRRS)

为此使用加权轮流排程算法,用相应的加权值表示服务器的处理性能,将请求数目按加权值的比例分配到各服务器。加权值高的服务器先收到连接,加权值高的服务器比加权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。

最小连结数排程 Least-Connection Scheduling (LCS)

最小连结数排程是需要记录各个服务器已建立TCP连接的数目,把新的连接请求发送当前连接数最小的服务器。当各个服务器有相同的处理性能时,最小连结数排程能把负载变化大的请求平均分布到各个服务器上,所有处理时间比较长的请求不可能被发送到同一台服务器上。

加权最小连接数排程 Weighted Least-Connection Scheduling (WLCS)

但是,当各个服务器的处理能力不同时,该算法并不理想,因为TCP连接处理请求后会进入TIME_WAIT状态,TCP的TIME_WAIT 一般为2分钟,此时连接还占用服务器的资源,所以会出现这样情形,性能高的服务器已处理所收到的连接,连接处于TIME_WAIT状态,而性能低的服务器既要忙于处理所收到的连接,还要收到新的连接请求。加权最小连接分配是最小连接分配的超集,各个服务器用相应的权值表示其处理性能。假设每台服务器的权值为Wi(i=1..n),TCP连接数目为 Ti(i=1..n),依次选Ti/Wi为最小者的服务器为下一个分配到服务的服务器。

四种分配方法(Load-balancing Methods)

Round robin (RRS)

将工作平均的分配到服务器 (用于实际服务主机性能一致)

Least-connections (LCS)

向较少连接的服务器分配较多的工作(IPVS 表存储了所有的活动的连接。用于实际服务主机性能一致。)

Weighted round robin (WRRS)

向较大容量的服务器分配较多的工作。可以根据负载信息动态的向上或向下调整。 (用于实际服务主机性能不一致时)

Weighted least-connections (WLC)

考虑它们的容量向较少连接的服务器分配较多的工作。容量通过用户指定的砝码来说明,可以根据装载信息动态的向上或向下调整。(用于实际服务主机性能不一致时)



0 0
原创粉丝点击