Lvs+Keepalived原理篇

1.Lvs原理简介
LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用 户请求结果返回给用户。

1.当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。
2.当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。
3.LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包 将被放行至用户空间。
4.如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
5.最后经由POSTROUTING链发往后端服务器。

Lvs的包转发模型
Lvs-NAT模型原理:通过网络地址转换,调度器重写报文的目标地址,根据预先设定的调度算法将请求分配给后端的真实服务器,真是服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

Lvs-NAT模式的工作过程:
1.客户端向负载均衡器发送请求,源地址是CIP目的地址是VIP
2.当负载均衡器收到用户的请求时,发现请求的时负载均衡器里面存在的规则,那么它将客户端请求报文的地址改为后端服务器的地址RIP并根据算法发送出去
3.realserver看见报文的目标地址是自己会响应该请求,并将响应报文返回给LVS,源地址RIP目的地址CIP将响应报文返回给LVS
4.LVS将报文的源地址修改为本机VIP,源地址VIP目的地址CIP发送给客户端

DR模型: LVS-DR通过改写请求报文的MAC地址进行转发,将请求发送到真实服务器,而真实服务器将响应直接返回给客户端

1.客户端向LVS的VIP发送请求,源IP和目的IP分别为CIP和VIP,源MAC地址和目的MAC分别为CMAC和DMAC
2.当LVS收到请求后通过调度选出一个realserver来响应请求将源请求中的MAC地址该为自己的MAC地址目的地址改为realserver的MAC地址,此时源MAC和目的MAC分别为DMAC和RMAC,然后将报文送往交换机,交换机收报文后根据目的MAC地址将请求转发至后端Realserver
3.Realserver发现请求报文中的MAC地址是自己就会将报文接收并处理,处理完请求报文后将响应报文通过lo接口送给eth0网卡直接发送给客户端。 注意:需要设置lo接口的VIP不能响应本地网络内的arp请求。

Lvs-TUN模型:TUN模型的工作原理与DR类似,只不过Lvs-TUN是在原有的报文中再添加一个IP首部,而不是去改写报文中的MAC地址

1.客户端向LVS的VIP发送请求,源IP和目的IP分别为CIP和VIP,过程1
2.当LVS收到客户端请求报文后,通过调度选出Realserver来响应请求,在原有的报文中添加一个报文首部源IP是DIP,目的IP是realserver的RIP,过程2
3.Realserver发现报文中的目的IP是自己,拆掉最外层的IP首部后发现里面还有一层IP首部目标是自己lo接口上的VIP,接收并处理将处理结果用过lo接口送给eth0网卡后向外传递

LVS-FULLNAT模式:
以上三种LVS-NAT、LVS-TUN、LVS-DR三种模式各有优劣,由于LVS-TUN模型中,所有的IP都是公网IP也就意味着Realserver有可能被直接访问到这种模式虽然解决了LVS异地调度的问题,相对来说不够安全那么,如果想要隐藏后端的Realserver且后建自由的Realserver集群的话,就要用到LVS-FULLNAT模式。
LVS-FULLNAT模式的原理是:
1.在客户端向LVS发送请求,源地址IP为CIP,目的地址IP为VIP
2.LVS收到用户的请求时,通过指定的调度算法选出后端的某一台Realserver然后重写请求报文中的的源IP和目的IP,将源IP修改为LVS的DIP,将目的IP修改为挑选出来的Realserver的RIP
2.当Realserver响应客户端请求时,源地址IP为RIP,目的地址为LVS的DIP
3.LVS在转发后端Realserver的响应报文之前,将源地址重写为VIP,将目的地址重写为CIP,然后转发至客户端

Keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于HEARTBEAT,用来防止单点故障,它时以VRRP协议为基础实现的,VRRP全称Virtual Router Redundancy Protocol 即虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面由一个master和多个backup,master上面有一个对外提供服务的VIP(该路由器所在局域网内其他机器默认路由为该IP),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,这样就可以保证路由器的高可用了。
Keepalived主要有三个模块,分别是Core,Check和VrRRP。其中Core模块为keepalived的核心组成部分,负责进程的启动维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是用来实现VRRP协议的。

LVS的调度算法分为静态和动态两类
静态算法(四种):只根据算法进行调度而不考虑后端服务器的实际链接情况和负载情况
1.RR:轮叫调度(Round Robin)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等的对待每一台服务器,而不管服务器上实际的连接数和系统负载
2.WRR:加权轮叫(Weight RR)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理里能来调度访问请求,这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动询问真实服务器的负载情况,并动态的调整其权值。
3.DH:目标地址散列调度(Destination Hash)
根据请求的IP地址,作为散列键(hashkey)从静态分配的散列表中找出对应的服务器若该服务器是可用的且未过载将请求发送到该服务器否则返回空。
4.SH:源地址hash(Source hash)
源地址散列调度算法根据请求的源IP地址,作为散列键从静态分配的列表中找出对应的服务器,若该服务器是可用的且未过载将请求发送到该服务器,否则返回空。

动态算法(6种):前端的调度器会根据后端真实服务器的实际连接情况来分配请求。
1.LC:最少链接
调度器通过“最少链接”调度算法动态的将网络请求调度到已建立的连接数最少的服务器上,如果集群系统的真实服务器具有相近的系统性能,采用最少链接调度算法可以较好的负载均衡。
2.WLC:加权最少链接
在集群系统中服务器性能差别较大的情况下,调度其采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动链接负载。调度器可以自动询问真实服务器的负载情况,并动态的调整其权值。
3.SED:最短延迟调度
在WLC基础上改进,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的接收下次请求,+1的目的是为了考虑加权的时候,非活动链接过多缺陷,当权值过大的时候,会导致空先服务器无法线接状态。
4.NQ:永不排队/最少队列调度
无需队列,如果有台服务器的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空闲,不考虑非活动链接采用NQ,SED要考虑活动状态链接。
5.LBLC:基于局部性的最少链接
基于局部性的最少链接调度算法是针对IP地址的负载均衡,目前主要用于Cache集群系统,该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器没有过载经请求发送到该服务器,若该服务器不存在或者该服务器超载且有服务器处于一半的工作负载,则用最少链接的原则选出一个可用的服务器,将请求发到该服务器。
6.LBLCR:带复制的基于局部最少链接
带复制的基于局部最少链接调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache系统,它与LBLC算法的不同之处是他要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护一个目标IP到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP对应的服务器,按最少链接原则从服务器组中选择一台服务器,若服务器没有过载,将请求发到该服务器,若服务器过载按最少链接原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器同时当该服务器组有一段时间没有被修改,将最忙的服务器从该组中剔除以降低复制程度。
 

你可能感兴趣的:(LVS,keepalived)