这里是LVS集群项目的中文社区。欢迎大家在这里讨论和交流LVS集群的安装、使用、维护与开发,以及相关技术,帮助完善LVS的中文文档。也欢迎您在这里建立您的博客!

锁的处理和优化

在系统中虚拟服务规则的读和写需要锁来保证处理的一致性。在连接的Hash表中,同样需要锁来保证连接加入和删除的一致性。连接的Hash表是系统使用最频繁的资源,任何一个报文到达都需要查找连接Hash表。如果只有一个锁来管理连接Hash表的操作,锁的冲突率会很高。为此,我们引入有n个元素的锁数组,每个锁分别控制1/n的连接Hash表,增加锁的粒度,降低锁的冲突率。在两个CPU的SMP机器上,假设CPU操作Hash表的部位是随机分布的,则两个CPU同时操作同一区域的概率为1/n

请问章老师,我下面的安装方法,为什么在ip addr sh里在master和backup里都有VIP呢

系统:Centos4.2
软件:heartbeat heartbeat-ldirectord heartbeat-pils heartbeat-stonith ipvsadm arptables_jf

机器:3台,IP分布:
A(主调度器):192.168.3.2
B(辅调度器):192.168.3.3
VIP(虚拟IP):192.168.3.5
C(真实服务器):192.168.3.4
D(测试机器):192.168.3.6

注意以下是:LVS/DR模式

一、在C(真实服务器)上安装配置
1、安装:
因为是真实服务器,所以安装很简单,只要安装arptables_jf即可:
yum -y install arptables_jf

2、配置:
其实只要执行下面的lvs文件即可:
/etc/ha.d/resource.d/lvs stop

Forums:

ICMP处理

负载调度器需要实现虚拟服务的ICMP处理,这样进来的虚拟服务ICMP报文会被改写或者转发给正确的后端服务器,出去的ICMP报文也会被正确地改写和发送给客户。ICMP处理对于客户和服务器间的错误和控制通知是非常重要的。

ICMP消息可以发现在客户和服务器间的MTU(Maximum Transfer Unit)值。在客户的请求被VS/DR调度到一台服务器执行,服务器将执行结果直接返回给客户。例如响应报文的MTU为1500个字节,在服务器到客户的路径中有一段线路的MTU值为512个字节,这时路由器会向报文的源地址(即虚拟服务的地址)发送一个需要分段为512个字节的ICMP消息。该ICMP消息会到达调度器,调度器需要将ICMP消息中原报文的头取出,再在Hash表中找到相应的连接,然后将该ICMP消息转发给对应的服务器。这样,服务器就会将原有的报文分段成512个字节进行发送,客户得到服务的响应。

垃圾回收

为了将不再被使用的连接单元回收,我们在连接上设置一个定时器,当连接超时,将该连接回收。因为系统中有可能存在几百万个并发连接,若使用内核中的定时器,几百万个连接单元系统的定时器的列表中,系统每隔1/100秒进行单元的迁移和回收已超时的连接单元,这会占用很多系统的开销。

因为连接的回收并不需要很精确,我们可以让系统的定时器每隔1秒启动连接回收程序来回收那些超时的连接。为此,我们设计了一个慢定时器,连接的定时都是以1秒钟为单位。用三个时间大转盘,第一个转盘有1024个刻度,定时在1024秒钟之内的连接都挂接在第一个转盘的各个刻度上;第二个转盘有256个刻度,定时在[210, 218)区间的落在第二个转盘上;第三个转盘有256个刻度,定时在[218, 226)区间的落在第三个转盘上。

Hash表

在系统实现中,我们多处用到Hash表,如连接的查找和虚拟服务的查找。选择Hash表优先Tree等复杂数据结构的原因是Hash表的插入和删除的复杂度为O(1),而Tree的复杂度为O(log(n))。Hash表的查找复杂度为O(n/m),其中n为Hash表中对象的个数,m为Hash表的桶个数。当对象在Hash表中均匀分布和Hash表的桶个数与对象个数一样多时,Hash表的查找复杂度可以接近O(1)。

因为连接的Hash表要容纳几百万个并发连接,并且连接的Hash表是系统使用最频繁的部分,任何一个报文到达都需要查找连接Hash表,所以如何选择一个高效的连接Hash函数直接影响到系统的性能。连接Hash函数的选择要考虑到两个因素,一个是尽可能地降低Hash表的冲突率,另一个是Hash函数的计算不是很复杂。

如何在LVS中使用SSL

章老师你好:
有关web SSL测试中的问题向您请教。
我们测试中使用的是BRITESTREAM公司的BN1200 SSL硬件卸载卡。这块卡就是一块网卡,但是将ssl加解密全部完成,转交给系统的是明文。
nat模式下 DR使用一块SSL卸载卡(对用户),一块普通网卡(对real server),real server使用普通网 卡,测试ok。
What I haven't tested yet is failover between multiple load balancers.LVS contains a module that synchronizes TCP connection state information between the primary load balancer and a backup load balancer, so if the first one fails for any reason the second one will know most of the connection state. However, this is impossible to do with SSL because we cannot share the Secret connection information between chips. We will have to test and find out how thataffects the client-server connection state.

Forums:

IP虚拟服务器的实现和性能测试

本章主要讲述IP负载均衡技术和连接调度算法在Linux内核中的实现,称之为IP虚拟服务器(IP Virtual Server,简写为IPVS),再叙述了实现中所遇到关键问题的解决方法和优化。最后,对IPVS软件进行性能测试,并列举该软件的应用情况。

权值计算

当服务器投入集群系统中使用时,系统管理员对服务器都设定一个初始权值DEFAULT_WEIGHTi,在内核的IPVS调度中也先使用这个权值。然后,随着服务器负载的变化,对权值进行调整。为了避免权值变成一个很大的值,我们对权值的范围作一个限制[DEFAULT_WEIGHTi, SCALE*DEFAULT_WEIGHTi],SCALE是可以调整的,它的缺省值为10。

Monitor Daemon周期性地运行,若DEFAULT_WEIGHTi不为零,则查询该服务器的各负载参数,并计算出综合负载值AGGREGATE_LOADi。我们引入以下权值计算公式,根据服务器的综合负载值调整其权值。

连接调度

当客户通过TCP连接访问网络访问时,服务所需的时间和所要消耗的计算资源是千差万别的,它依赖于很多因素。例如,它依赖于请求的服务类型、当前网络带宽的情况、以及当前服务器资源利用的情况。一些负载比较重的请求需要进行计算密集的查询、数据库访问、很长响应数据流;而负载比较轻的请求往往只需要读一个HTML页面或者进行很简单的计算。

请求处理时间的千差万别可能会导致服务器利用的倾斜(Skew),即服务器间的负载不平衡。例如,有一个WEB页面有A、B、C和D文件,其中D是大图像文件,浏览器需要建立四个连接来取这些文件。当多个用户通过浏览器同时访问该页面时,最极端的情况是所有D文件的请求被发到同一台服务器。所以说,有可能存在这样情况,有些服务器已经超负荷运行,而其他服务器基本是闲置着。同时,有些服务器已经忙不过来,有很长的请求队列,还不断地收到新的请求。反过来说,这会导致客户长时间的等待,觉得系统的服务质量差。

想问一下章老师,对heartbeat,ldirectord有没比较深入的研究,附上我的搭建和测试过程及所遇到的问题

我目前正在搭建一个web负载均衡系统,环境如下.
硬件:4台机,两个做热备,两个做应用,一个做数据库(除了执备,其余二台均为虚拟机,备份机兼做应用服务器)
软件,heartbeat 2.02,ldirectord,lvs
系统环境,rhel4+php442+mysql41

断断续续做了有近一个月.
现在可以说整个系统是已基本搭建起来了,正在作一些稳定和性能方面的测试.

其中也遇到挺多的问题,也有些还不太明白和没解决到的.我会继续整理出来.在此也希望章老师能指点一下.先谢谢了.

在lvs的测试中,调度算法为rr/wrr

Forums:

页面

Subscribe to LVS中文站点 RSS
randomness