LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。  

 

 LVS十种调度算法:

  静态(fixed method):

 rr, wrr, sh, dh

   rr: 轮叫(Round Robin) 调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

   wrr: 加权轮叫(Weighted Round Robin)调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

   sh: Source Hashing  源地址哈希,实现LVS持久性.基于client地址的来源区分。(用的很少)

   dh: Destination Hashing realserver中绑定两个ip,ld判断来者的ISP商,将其转到相应的IP


 动态(Dynamic method):

lc, wlc, sed, nq, lblc, lblcr

   lc: Least Connection 最少链接,调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。  Overhead=Active*256+Inactive 根据结果得出下一个

   wlc: Weighted 加权最少链接(Weighted Least Connections)默认算法,负载均衡最理想.在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。  Overhead=(Active*256+Inactive)/Weight

   sed: Shortest Expect Delay(最短期望延迟)是wlc改进版 Overhead=(Active+1)*256/Weight

基于wlc算法。这个必须举例来说:

       ABC三台机器分别权重123,连接数也分别是123.那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个.

     使用sed算法后会进行这样一个运算

       A:(1+1)/1

       B:(1+2)/2

       C:(1+3)/3    根据运算结果,把连接交给C

   nq: Never Queue无需队列,如果有台realserver的连接数=0就直接分配,不需要在进行sed运算.

   lblc: (dh+lc) Locality-based Least Connection 缓存服务器集群,基于本地的最小连接。把请求传递到负载小的服务器上.

   lblcr: Replicated and  Locality-based Least Connection (带复制功能基于本地的最小连接) 带复制调度的缓存服务器集群。某页面缓存在服务器A上,被访问次数极高,而其他缓存服务器负载较低,监视是否访问同一页面,如果是访问同一页面则把请求分到其他服务器.


LVS工作模式主要有4种:

 NAT 源地址转换模式

  请求过程: CIP请求至DIP,DIP转发至RIP由RIP响应通过DIP将源址转换成VIP交付至CIP 

  NAT模式下网络报文进出都要经过DIP处理,无论客户端请求还是服务器响应都必须经过DIP,DIP需要作为RIP的网关,如果后端RealServer过多,调度器很可能成为系统瓶颈

   要求:  

     1、RealServer应该使用私有IP地址

     2、RealServer的网关应该指向DIP

     3、RIP和DIP应该在同一个网段内

     4、进出的报文都得经过Directory,在高负载下Directory会成为系统性能瓶颈

     5、支持端口映射

     6、RealServer可以使用任意OS


 DR 直接路由模式

   请求过程: CIP请求至DIP,DIP转发修改数据帧,将目标MAC指向RIP,由RIP直接通过其它路由响应用户,不能用原路由出去。DR模式是性能最好的一种模式

  要求: 

     1、RealServer可以使用私有地址

     2、RealServer的网关一定不能指向DIP

     3、RealServer和Director要在同一物理网络内;DIP和RIP应该在同一网段

     4、入站报文经过Directory,出站则由RealServer直接响应Client

     5、不能做端口映射

     6、RealServer可以为大多数常见OS


 TUNNEL 基于IP隧道模式

  请求过程: CIP请求至RIP,需要封装额外源DIP、目标RIP报文.由RIP直接通过其它路由响应用户,不能用原路由出去。

  要求:

     1、RIP、DIP不能是私有地址

     2、RealServer的网关不能指向DIP

     3、入站报文经过Directory,出站则由RealServer直接响应Client

     4、不支持端口映射

     5、支持IP tunneling的OS才能用于RealServer


 FullNAT 源、目标地址转换模式 属于淘宝研发

  主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN的问题。采用这种方式,DIP和RIP的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性


 调度器类型: Director, Dispatcher, Load Balancer

   Client IP       客户端请求IP         此处简称为CIP

   Directory       LVS集群调度器        此处简称为DIP

   RealServer      LVS集群后端主机       此处简称为RIP

   Virtual Host IP   LVS集群虚拟主机IP     此处简称为VIP

 

 LVS DR 模型实现过程:

   实验环境:相同物理网络    不同物理网络需将RIP网关指向不同路由

      环境:DIP 172.18.20.126    VIP 172.18.20.128

         RIP1 172.18.20.124   RIP2 172.18.20.125

        前提: RIP已经启用http服务,打开DIP主机端口转发功能

RIP1配置:
[root@Demo1~]#service httpd start          启动httpd服务,或者设置为自动启动
[root@Demo1~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore  
        定义lo网卡arp通告响应级别 1表示仅响应通过本地接口
[root@Demo1~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 定义所有网卡arp通告响应级别
[root@Demo1~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  定义lo网卡arp通告限制级别     
  0是默认级别,通告所有网卡MAC信息  1是不把地址通告给非本地网络 2是只通告属于本地网络
[root@Demo1~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  定义所有网卡arp通告限制
[root@Demo1~]#ifconfig lo:0 172.18.20.128 broadcast 172.18.20.128 netmask 255.255.255.255 up
        将arp响应配置在本地回环接口别名上,配置广播地址、子网掩码,只响应VIP请求        
[root@Demo1~]#route add -host 172.18.20.1 dev lo:0    添加一条主机路由在别名网卡上
RIP2配置:
[root@Demo1~]#service httpd start          启动httpd服务,或者设置为自动启动
[root@Demo2~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore  
        定义lo网卡arp通告响应级别 1表示仅响应通过本地接口
[root@Demo2~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 定义所有网卡arp通告响应级别
[root@Demo2~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  定义lo网卡arp通告限制级别     
  0是默认级别,通告所有网卡MAC信息  1是不把地址通告给非本地网络 2是只通告属于本地网络
[root@Demo2~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 定义所有网卡arp通告限制
[root@Demo2~]#ifconfig lo:0 172.18.20.128 broadcast 172.18.20.128 netmask 255.255.255.255 up
        将arp响应配置在本地回环接口别名上,配置广播地址、子网掩码,只响应VIP请求     
[root@Demo2~]#route add -host 172.18.20.1 dev lo:0    添加一条主机路由在别名网卡上
DIP配置:
[root@Demo3~]#echo 1 > /proc/sys/net/ipv4/ip_forward     打开DIP主机端口转发功能
[root@Demo3~]#ifconfig eth0:0 172.18.20.128 broadcast 172.18.20.128 netmask 255.255.255.255 up
        将arp响应配置在eth0别名上,配置广播地址、子网掩码,只响应VIP请求
[root@Demo3~]#route add -host 172.18.20.1 dev eth0:0   添加一条主机路由在别名网卡上
[root@Demo3~]#ipvsadm -A -t 172.18.20.128:80 -s wlc     创建http集群,指定集群算法
[root@Demo3~]#ipvsadm -a -t 172.18.20.128:80 -r 172.18.20.124 -g -w 1 为集群添加RIP1,指定模型及权重
[root@Demo3~]#ipvsadm -a -t 172.18.20.128:80 -r 172.18.20.125 -g -w 2 为集群添加RIP2,指定模型及权重

LVS集群之DR模型_Real

LVS集群之DR模型_LVS_02



一般DR模型使用较多,至此LVS集群DR模型完成,如有错误请大家指教!