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

集群技术在不同领域应用的关键要素以及不同

由 feelfree 在 周五, 2006-03-17 11:52 提交
集群技术的思想可以在不同领域予以应用,但是针对不同应用需要有特定的策略才行,策略是不同的,但是在确定策略时所考虑的关键要素是相同的。需要有一个关键要素范围列表。

不知 wensong 能否提供这方面的建议或者参考?

由 wensong 在 周六, 2006-03-18 10:47 提交
我想集群的中心思想是“分而治之”(Divide and Conquer),将一个任务分成若干个子任务,来处理任务或者提高任务的处理速度。

在“分而治之”时,最需要考虑是任务之间的相关性

LVS集群的应用

Linux虚拟服务器项目(Linux Virtual Server Project)的网址是http://www.LinuxVirtualServer.org/, LVS中的IPVS第一个版本源程序于1998年5月在网上发布。至今,本项目受到不少关注,LVS系统已被用于很多重负载的站点,就我们所知该系统已在美、中、英、德、澳等国的近百个站点上正式使用。

我们没有上百台机器和高速的网络来测试LVS的终极性能,所以举LVS的应用实例来说明LVS的高性能和稳定性。我们所知的一些大型LVS应用实例如下:

性能测试

在美国VA Linux公司的高级工程师告诉我,他们在实验室中用一个IPVS调度器(VS/DR方式)和58台WEB服务器组成一个WEB集群,想测试在真实网络服务负载下IPVS调度器的性能,但是他们没有测试IPVS调度器的性能,当58台WEB服务器都已经满负荷运行时,IPVS调度器还处于很低的利用率(小于0.2)。他们认为系统的瓶颈可能在网卡的速度和报文的转发速度,估计要到几百台服务器时,IPVS调度器会成为整个系统的瓶颈。

我们没有足够的物理设备来测试在真实网络服务负载下IPVS调度器的性能,况且在更高的硬件配置下(如两块1Gbps网卡和SMP机器),调度器肯定会有更高的性能。为了更好地估计在VS/DR和VS/TUN方式下IPVS调度器的性能,我们专门写一个测试程序testlvs,程序不断地生成SYN的报文发送给调度器上的虚拟服务,调度器会生成一个连接并将SYN报文转发给后端服务器,我们设置后端服务器在路由时将这些SYN报文丢掉,在后端服务器的网卡上我们可以获得进来的报文速率,从而估计出调度器的报文处理速率。

集群技术在不同领域应用的关键要素以及不同

集群技术的思想可以在不同领域予以应用,但是针对不同应用需要有特定的策略才行,策略是不同的,但是在确定策略时所考虑的关键要素是相同的。需要有一个关键要素范围列表。

不知 wensong 能否提供这方面的建议或者参考?

手册没有删除功能,我已经将此手册内容转移至个人BLOG,但是无法删除此项手册。

调度器间的状态同步

尽管IPVS虚拟服务器软件已被证明相当鲁棒,但调度器有可能因为其他原因而失效,如机器的硬件故障和网络线路故障等。所以,我们引入一个从调度器作为主调度器的备份,当主调度器失效时,从调度器将接管VIP等地址进行负载均衡调度。在现在的解决方案中,当主调度器失效时,调度器上所有已建立连接的状态信息将丢失,已有的连接会中断,客户需要向重新连接,从调度器才会将新连接调度到各个服务器上。这对客户会造成一定的不便。为此,我们考虑一种高效机制将主调度器的状态信息及时地复制到从调度器,当从调度器接管时,绝大部分已建立的连接会持续下去。

防卫策略

IPVS调度器本身可以利用Linux内核报文过滤功能设置成一个防火墙,只许可虚拟服务的报文进入,丢掉其他报文。调度器的脆弱之处在于它需要记录每个连接的状态,每个连接需要占用128个字节,一些恶意攻击可能使得调度器生成越来越多的并发连接,直到所有的内存耗尽,系统出现拒绝服务(Denial of Service)。但是,一般SYN-Flooding攻击调度器是非常困难的,假设系统有128Mbytes可用内存,则系统可以容纳一百万个并发连接,每个处理接受SYN连接的超时(Timeout)为60秒,SYN-Flooding主机需要生成16,666 Packets/Second的流量,这往往需要分布式SYN-Flooding工具,由许多个SYN-Flooding主机同时来攻击调度器。

数据统计

在IPVS虚拟服务使用情况的统计上,我们实现了如下计数器:

  • 调度器所处理报文的总数
  • 调度器所处理连接的总数
  • 调度器中所有并发连接的数目
  • 每个虚拟服务处理连接的总数
  • 每个服务器所有并发连接的数目

在单位时间内,我们可以根据调度器所处理报文总数之差得出调度器的报文处理速率,根据调度器所处理连接总数之差得出调度器的连接处理速率。同样,我们可以算出每个虚拟服务的连接处理速率。

本地结点

本地结点(Local Node)功能是让调度器本身也能处理请求,在调度时就相当一个本地结点一样,在实现时就是根据配置将部分连接转交给在用户空间的服务进程,由服务进程处理完请求将结果返回给客户。该功能的用处如下:

当集群中服务器结点较少时,如只有三、四个结点,调度器在调度它们时,大部分的CPU资源是闲置着,可以利用本地结点功能让调度器也能处理一部分请求,来提高系统资源的利用率。

在分布式服务器中,我们可以利用IPVS调度的本地结点功能,在每台服务器上加载IPVS调度模块,在一般情况下,利用本地结点功能服务器处理到达的请求,当管理程序发现服务器超载时,管理程序将其他服务器加入调度序列中,将部分请求调度到其他负载较轻的服务器上执行。

集群技术在3G移动通信核心网设备中的应用

现在正在研究集群技术在3G移动通信核心网设备中的应用,主要是为了通过分布式处理来实现高伸缩性和可扩展性,希望能在此对相关技术进行学习探讨。

连接的相关性

到现在为止,我们假设每个连接都相互独立的,所以每个连接被分配到一个服务器,跟过去和现在的分配没有任何关系。但是,有时由于功能或者性能方面的原因,一些来自同一用户的不同连接必须被分配到同一台服务器上。

FTP是一个因为功能设计导致连接相关性的例子。在FTP使用中,客户需要建立一个控制连接与服务器交互命令,建立其他数据连接来传输大量的数据。在主动的FTP模式下,客户通知FTP服务器它所监听的端口,服务器主动地建立到客户的数据连接,服务器的端口一般为20。IPVS调度器可以检查报文的内容,可以获得客户通知FTP服务器它所监听的端口,然后在调度器的连接Hash表中建立一个相应的连接,这样服务器主动建立的连接可以经过调度器。但是,在被动的FTP模式下,服务器告诉客户它所监听的数据端口,服务器被动地等待客户的连接。在VS/TUN或VS/DR下,IPVS调度器是在从客户到服务器的半连接上,服务器将响应报文直接发给客户,IPVS调度器不可能获得服务器告诉客户它所监听的数据端口。

页面

Subscribe to LVS中文站点 RSS