大多数程序员并不知道,负载均衡器LVS是个啥?( 二 )


调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求 。这样可以保证处理能力强的服务器处理更多的访问流量 。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值 。
最少链接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上 。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载 。
加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载 。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值 。
基于局部性的最少链接(Locality-Based Least Connections)
"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统 。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器 。
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统 。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射 。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器 。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度 。
目标地址散列(Destination Hashing)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空 。
源地址散列(Source Hashing)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空 。
3.2 内核Layer-7交换机KTCPVS
在基于IP负载调度技术中,当一个TCP连接的初始SYN报文到达时,调度器就选择一台服务器,将报文转发给它 。此后通过查发报文的IP和TCP报文头地 址,保证此连接的后继报文被转发到该服务器 。这样,IPVS无法检查到请求的内容再选择服务器,这就要求后端服务器组提供相同的服务,不管请求被发送到哪 一台服务器,返回结果都是一样的 。但是,在有些应用中后端服务器功能不一,有的提供html文档,有的提供图片,有的提供CGI,这就需要基于内容的调度 (Content-Based Scheduling) 。
由于用户空间TCP Gateway的开销太大,我们提出在操作系统的内核中实现Layer-7交换方法,来避免用户空间与核心空间的切换和内存复制的开销 。在Linux操作系统的内核中,我们实现了Layer-7交换,称之为KTCPVS(Kernel TCP Virtual Server) 。目前,KTCPVS已经能对HTTP请求进行基于内容的调度,但它还不很成熟,在其调度算法和各种协议的功能支持等方面,有大量的工作需要做 。
虽然应用层交换处理复杂,它的伸缩性有限,但应用层交换带来以下好处:

  • 相同页面的请求被发送到同一服务器,可以提高单台服务器的Cache命中率 。
  • 一些研究[5]表明WEB访问流中存在局部性 。Layer-7交换可以充分利用访问的局部性,将相同类型的请求发送到同一台服务器,使得每台服务器收到的请求具有更好的相似性,可进一步提高单台服务器的Cache命中率 。
  • 后端服务器可运行不同类型的服务,如文档服务,图片服务,CGI服务和数据库服务等 。
2. LVS集群的特点LVS集群的特点可以归结如下:
功能
【大多数程序员并不知道,负载均衡器LVS是个啥?】


推荐阅读