Linux服务器集群系统(四)[6]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:

  集合S中的加权最大连接服务器。Now为当前系统时间,lastmod表示集合的最近
  修改时间,T为对集合进行调整的设定时间。
  
  if (ServerSet[dest_ip] is NULL) then {
   n = WLC(S);
   if (n is NULL) then return NULL;
   add n into ServerSet[dest_ip];
  } else {
   n = WLC(ServerSet[dest_ip]);
   if ((n is NULL) OR
     (n is dead) OR
     (C(n) > W(n) AND
      there is a node m with C(m) < W(m)/2))) then {
   n = WLC(S);
   if (n is NULL) then return NULL;
   add n into ServerSet[dest_ip];
   } else
   if (|ServerSet[dest_ip]| > 1 AND
     Now - ServerSet[dest_ip].lastmod > T) then {
   m = WGC(ServerSet[dest_ip]);
   remove m from ServerSet[dest_ip];
   }
  }
  ServerSet[dest_ip].lastuse = Now;
  if (ServerSet[dest_ip] changed) then
   ServerSet[dest_ip].lastmod = Now;
  return n;
  
  
  
  
  此外,对关联变量ServerSet[dest_ip]也要进行周期性的垃圾回收(Garbage Collection),将过期的目标IP地址到服务器关联项进行回收。过期的关联项是指哪些当前时间(实现时采用系统时钟节拍数jiffies)减去最近使用时间(lastuse)超过设定过期时间的关联项,系统缺省的设定过期时间为24小时。
  
  2.7. 目标地址散列调度
  
  目标地址散列调度(Destination Hashing Scheduling)算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器
  
  目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。该算法的流程如下:
  
  目标地址散列调度算法流程
  假设有一组服务器S = {S0, S1, ..., Sn-1},W(Si)表示服务器Si的权值,
  C(Si)表示服务器Si的当前连接数。ServerNode[]是一个有256个桶(Bucket)的
  Hash表,一般来说服务器的数目会运小于256,当然表的大小也是可以调整的。
  算法的初始化是将所有服务器顺序、循环地放置到ServerNode表中。若服务器
  连接数目大于2倍的权值,则表示服务器已超载。
  
  n = ServerNode[hashkey(dest_ip)];
  if ((n is dead) OR
   (W(n) == 0) OR
    (C(n) > 2*W(n))) then
   return NULL;
  return n;
  
  
  
  
  在实现时,我们采用素数乘法Hash函数,通过乘以素数使得散列键值尽可能地达到较均匀的分布。所采用的素数乘法Hash函数如下:
  
  素数乘法Hash函数
  static inline unsigned hashkey(unsigned int dest_ip)
  {
    return (dest_ip* 2654435761UL) & HASH_TAB_MASK;
  }
  其中,2654435761UL是2到2^32 (4294967296)间接近于黄金分割的素数,
   (sqrt(5) - 1) / 2 = 0.618033989
   2654435761 / 4294967296 = 0.618033987
  
  
  
  
  2.8. 源地址散列调度
  
  源地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一一叙述。
  
  在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
  
  3. 动态反馈负载均衡算法
  

本文关键:Linux服务器集群系统(四)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top