LVS的DR模式和持久连接

LVS的DR模式和持久连接

                                                                                                                                                                                                                                                             

     集群的定义和分类      

     一、集群的定义      

  • 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。

     二、集群的分类      

     1、Scale ON(向上扩展)      

  • 物理扩展,提高硬件参数

  • 缺点:硬件的参数增长比例所带来的性能提升,不是线性的,价格往往高于硬件参数的倍数,并且CPU数量越多,仲裁机制消耗的资源就越大。

     2、Scale Out 向外扩展 数量扩展      

  • 增加服务器数量

  • 优点:在不影响业务的情况下,可以实现动态的在线扩容,每台服务器的费用可以成正比的转化为性能。

  •          High Availability()        

  • 保证服务永久在线可用的集群,通过健康检测机制,大幅度的增强服务的可用性,HA集群中一个资源只能被一个节点占用,节点数通常为奇数。

  • 可用性衡量标准=在线时间/(在线时间+故障处理时间)

  •          Load Balancing(负载均衡集群)        

  • 那用户的请求均摊到多台服务器上的机制叫做负载均衡,主要是增加处理能力。

  • 调度算法:论调(Round Robin)、加权(WRR)等……

     硬件        
 

  • F5 BIG IP

  • Citrix Netscaler

  • A10 AX系列

     软件      

  • 四层 不能处理应用层协议,工作性能好,支持的功能特性有限 LVS

  • 七层 可以过滤和修改应用层协议,性能略差于四层设备 Nginx、Haproxy

  •          High Performance        

  • 科学集群是并行计算的基础。通常,科学集群涉及为集群开发的并行应用程序,以解决复杂的科学问题。科学集群对外就好像一个超级计算机,这种超级计算机内部由十至上万个独立处理器组成,并且在公共消息传递层上进行通信以运行并行应用程序。

     

     LVS简介和基本使用        
 

     一、LVS简介      

  • LVS工作在内核空间的TCP/IP协议栈上,        LVS监控在INPUT链上,当用户请求的是集群服务(套接字),ipvs钩子函数会根据定义的规则修改请求并送至POSTROUTING链上,        LVS和iptbles不能同时使用。        

  • ipvsadm是工作在用户空间的规则编写的命令行工具

  • ipvs是工作在内核空间INPUT链上的钩子函数

     注意:调度器的实现基于套接字(IP+port),所以一个调度器可以调度多个不同类型的服务            但通常调度能力有限,通常都为一种服务实现集群调度功能。      

             二、ipvsadm的用法            

     ipvsadm管理集群服务      

添加 -A - t|u|f  service-address [-s scheduler]默认调度算法是wlc
        -t  TCP 协议的集群
        -u  UDP 协议的集群
            service-address IP:PORT
        -f  FireWallMark    LVS持久连接
            service-address MarkNumber修改 -E删除 -D - t|u|f service-address

 

ipvsadm管理集群服务中的realserver  

添加 -a   - t|u|f service-address -r server-address -[g|i|m] [-w weight]
        在NAT模型中server-address可以是 IP:PORT
        -g:DR   默认就是DR模型
        -m:NAT
        -i:TUN修改 -e
删除 -d - t|u|f service-address -r server-address

 

ipvsadm查看  

ipvsadm查看
         - L|l      显示规则
         -n         不反解析IP地址和端口,数字格式显示主机地址和端口号         --status   统计数据
         --rate     速率
         --timeout  显示tcp、tcpfin和udp的会话超时时长
         --sort     显示当前的ipvs连接状况
         -c         查看连接数

 

删除所有集群服务  

-C          清空ipvs所有规则

 

保存ipvs规则  

-S  > /path/file   保存规则
service ipvsadm save

 

载入ipvs规则  

-R  < /path/somefile

 

                       LVS工作模型和调度算法                    

                                                                 

  •          NAT        

     064256156.jpg      

  • 用户请求到达INPUT链由ivps的匹配规则并修改就客户端的目标IP为集群服务中的Realserver地址,        DNAT的动态扩展,同样支持端口映射,向外提供的服务和内部服务端口可以不一致,        Realserver的网关指向DIP。

  • 缺点:由于Director为后端realserver网关,因此能够调度的Realserver有限,10个就已经差强人意了。

  •          DR        

             064403347.jpg              

  • 集群节点跟Director必须在同一物理网络中,因为它靠mac地址转发数据包,ARP广播包不允许跨路由

  • RIP可以不用是私有地址,实现便捷的远程原理

  • Director只负责入站请求,响应报文由Realserver直接发网客户端,请求报文很小,所以DR模式的LVS能带动100台Realserver

  • 集群节点一定不能使用Director当做其默认网关

  • 不支持端口映射

  • 大多数的操作系统都可以用在Realserver,要求必须能隐藏VIP

  •          TUN        

                       064437159.jpg                    

  • 集群节点可以跨越Intelnet

  • RIP必须是公网地址

  • Director仅负责入站请求,响应报文则由Realserver直接发网客户端

  • Realserver网关不能指向Director

  • 只有支持隧道功能的OS才能用于Realserver

  • 不支持端口映射

                                                                                   二、LVS的调度算法                                                                        

     1、静态调度方法(director不考虑realserver已建立的活动链接和非活动链接状况)      

     rr 轮询      

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

     wrr 加权轮询      

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

     sh 源地址哈希      

  • 源地址hash,对请求的客户端IP进行hash计算,内部维持着一张hash表,        它的主要功能用户实现session affinity,会话绑定,        它在一定程度上破坏了负载均衡效果,但是为了现实应用的需求这种功能是必要的,        如果每个realserver通过session sharing的集群机制共享session,就可以不适用source hash这种功能。

     dh 目标地址哈希      

  • “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

     2、      动态调度方法      

     lc 最少连接数      

  • 调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载,        active*256+inactive。

     wlc 加权最少连接数      

  • 在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

     sed 最短期望延迟      

  • wlc的改进版,权重大的服务器事先被挑中,(active+1)*256/weight,权重大的服务器有很多的时候,权重小的服务器可能一个都没有。

     nqnever queue 永不排队      

  • 无需队列,如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算。

     lblc 基于本地的最少连接      

  •          它的主要目的跟dh一样,只是dh并不考虑从但前cache          server的连接数          ,lblc考虑而已。尽管要保证命中的提高,并同样的请求发网通一个cache server但也要考虑轮询新的连接用一个相对空闲的cache server来响应。        

     lblcr 基于本地的带复制功能的最少连接      

  • “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡, 目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器 组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台 服务器,将该服务器加入。

                                                                                                                                         

                                                                 DR模型的实现                                                          
 

                                                                                                       一、实现原理                                                                                          

                                                                                                       070222206.png                                                                                          

  1.          客户端发出请求报文至路由网关,路由网关eth1发出ARP解析请求, 请求数据包目标IP(192.168.1.200)的MAC地址是多少,所有realserver均收到APR请求,此时为了让解析的MAC为 Director的MAC,需要对所有realserver做出设置如下:        

    ######所有realserver配置信息sysctl -w net.ipv4.conf.eth0.arp_announce=2
    sysctl -w net.ipv4.conf.all.arp_announce=2
    sysctl -w net.ipv4.conf.eth0.arp_ignore=1
    sysctl -w net.ipv4.conf.all.arp_ignore=1#######解释说明arp_ignore      接收到别人请求后的响应级别
                0   只要本机配置有相应地址就给予相应
                1   仅在请求目标地址配置在请求到达的接口上的时候,才给予相应
    arp_annonce     主动向外通告过自己IP地址和MAC地址对应关系的通告级别
                0   将本机任何接口上的任何地址向外通过
                1   试图仅向目标网络通告与其网络匹配的地址信息
                2   仅向目标网络通告与其网络匹配的地址信息是

       

  2.          客户端成功解析VIP的MAC地址为Director的MAC,将报文转发至调度器。        

  3.          Director根据调度算法和规则选择为 Realserver_one,并发出APR解析请求得到RIP对应的MAC地址,并重新封装数据报文的帧首部,将源MAC地址改为自己,目标MAC地址 改为解析到的RIP的MAC地址,并发送报文至Realserver_one。        

  4.          Realserver_one收到Director发来的报文处理并相应此请求报文,响应报文的源IP地址,必须是请求报文的目标IP(VIP)地址,需要对realserver做如下设置:        

    ifconfiglo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255route add -host 192.168.1.200 dev lo:0

       

  5.          此后整个传输过程数据包源IP为VIP,目标IP位CIP,数据报文沿着路由器转发至客户端,完成整个请求和相应过程。        

                                                                                                       二、配置过程                                                                                          

Director配置  

route add -host 192.168.1.200 dev eth0:0      ipvsadm -A -t 192.168.1.200:80 -s wlcipvsadm -a -t 192.168.1.200:80 -r 192.168.1.10 -g -w 2ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.20 -g -w 1

 

realserver端配置  

sysctl -w net.ipv4.conf.eth0.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
ifconfiglo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255
route add -host 192.168.1.200 dev lo:0

 

                                                                                                                                     、健康检测机制                                                                                                              

     使用ldirectord来实现对realserver的健康状态检测      

  • 为了从主Director将LVS负载均衡资源故障转移到备用 Director,并从集群中自动移除节点,我们需要使用ldirectord程序,这个程序在启动时自动建立IPVS表,然后监视集群节点的健康情况, 在发现失效节点时将其自动从IPVS表中移除,本文没有使用这种方法,而是简单的通过脚本的方式来实现。

                                                                                                                                                                                                                                                                         使用脚本来实现对realserver的健康状态检测                                                                                                                                                                                                                                                

#!/bin/bash#VIP=192.168.1.200
CPORT=80
BACKUP=127.0.0.1
STATUS=("1""1")
RS=("192.168.1.10""192.168.1.20")
RW=("2""1")
RPORT=80
TYPE=gwhile:; doletCOUNT=0
add() {
   ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
   [ $? -eq0 ] && return0 || return1
}
del() {
   ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
   [ $? -eq0 ] && return0 || return1
}
forI in${RS[*]}; do
   ifcurl --connect-timeout 1 http://$I &> /dev/null; then
      if[ ${STATUS[$COUNT]} -eq0 ]; then
         add $I ${RW[$COUNT]}
     [ $? -eq0 ] && STATUS[$COUNT]=1      fi
   else
      if[ ${STATUS[$COUNT]} -eq1 ]; then
         del $I
     [ $? -eq0 ] && STATUS[COUNT]=0  
      fi
   fi
   letCOUNT++donesleep5done

 

                                                                                                                                                     注意:各节点之间的时间偏差不应该超过1秒,NTP时间服务器来同步时间。                                                                                                                                    

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

                                                                                                                                                                                                                                                                         LVS的持久连接                                                                                                                                                                                                                                                

                                                                                                                             一、持久连接的实现机制                                                                                                              

  • 无论使用什么算法,LVS持久连接都能实现在一点时间内,将来自于同一个客户端请求派发至此前选定的realserver,DH调度算法本身依赖于TCP会话超时时间等其他计时器,而持久连接依赖于持久连接模板,        每个新的连接请求,无论客户端的连接状态无论是否断开,只要客户端曾经访问过,LVS就会在持久连接模板中记录信息,        持久连接模板(内存缓冲区):记录每一个客户端及分配的realserver的映射关系。

     PPC              持久端口连接        基于端口              
 

  • 来自于同一个客户端对同一个服务的请求,始终定向至此前选定的realserver。        

ipvsadm -A -t 192.168.1.200:23 -s rr-p 3600ipvsadm -a -t 192.168.1.200:23 -r 192.168.1.10 -g -w 2ipvsadm -a -t 192.168.1.200:23 -r 192.168.1.20 -g -w 1

 

             PCC 持久客户端连接        基于所有端口              
 

  • 来自于同一个客户端对所有服务的请求,始终定向至此前选定的realserver

ipvsadm -A -t 192.168.1.200:0 -s rr -p 600ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.10 -g -w 2ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.20 -g -w 1

 

     PNMPP 持久防火墙标记连接        
 

  • 来自于同一客户端对指定服务的请求,始终定向至此算定的realserver基于指定的端口,它可以        将两个毫不相干的端口定义为一个集群服务,        例如:合并http telnet为同一个集群服务。

######PNMPP是通过路由前给数据包打标记来实现的iptables -t mangle -A PREROUTING -d 192.168.1.200 -eth0 -p tcp --dport 80 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -d 192.168.1.200 -eth0 -p tcp --dport 23 -j MARK --set-mark 3
ipvsadm -A -f 3 -s rr -p 600
ipvsadm -a -f 3 -r 192.168.1.10 -g -w 2
ipvsadm -a -f 3 -r 192.168.1.20 -g -w 2

 

     注意:以上三种持久连接均使用了"-p"                        选项                          ,它保证了持久性,默认为300秒                    

     警告:Director没有定义用户请求的集群服务,将试图自己响应客户端请求。      


你可能感兴趣的:(LVS的DR模式和持久连接)