LVS三种模式的区别及负载均衡算法

LVS简介

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统,由章文嵩博士在1998年5月成立,在linux2.6+后将lvs自动加入了kernel模块,咱们看下lvs在咱们平常的服务器架构所在的位置:html

正向代理

只用于代理内部网络对Internet的链接请求,客户机必须指定代理服务器,并将原本要直接发送到Web服务器上的http请求发送到代理服务器中,正向代理指的是客户端代理,是由用户控制并知晓的代理方式,如我不能访问fb,而后使用了某国外服务器做为跳板机,最后成功访问了就是正向代理。前端

反向代理

指以代理服务器来接受Internet上的链接请求,而后将请求转发给内部网络上的服务器;并将从服务器上获得的结果返回给Internet上请求链接的客户端,此时代理服务器对外就表现为一个服务器,反向代理指的是服务端代理,在大型网站背后并非只有一台机器提供服务,好比我访问微博,微博的某一个反向代理服务器将我解析到内部服务器的一台机器,而后这台机器给我提供微博的消息(固然实际状况比这个复杂的多),这些对于用户都是不可见的,咱们只会感受只有一台机器与我交互。mysql

负载均衡

(Load Balance)让负载均衡,固然这是一个简单的归纳,我在微信里看的架构师之路写的一篇如何实现负载均衡的文章就不错,我有10台机器都提供web服务,那么我如何均衡的利用这10台机器呢,让这10台机器保证高性能、高可用、高并发就是负载均衡要考虑和要作的事情。linux

实现负载均衡通常可使用顺序、比重、流量、服务类别等进行分配,负载均衡的部署方式也分为路由和服务直接返回模式,实现负载均衡的主要几个方式:nginx

  • http重定向web

    下载网站用的较多,其实也算一种负载均衡,工做在应用层的业务代码中算法

  • DNS负载均衡sql

    DNS负载提供域名到IP解析的过程,咱们实例查看百度的域名解析实际上是一对多的,这时候DNS服务器也就充当了负载均衡,不少域名运营商提供的智能dns以及多线解析都是利用了DNS负载均衡的技术,开源的BIND就可提供电信联通多线解析等强大的技术。数据库

  • 反向代理负载均衡后端

  • IP负载均衡

  • 直接路由

  • IP隧道

  • F5硬件负载均衡

四层负载和七层负载

所谓四层就是基于IP+端口的负载均衡,主要表明有lvs。

七层负载也称内容交换,就是基于URL等应用层信息的负载均衡,主要表明有nginx。

LVS工做原理

LVS 的 IP 负载均衡技术是经过 IPVS 模块来实现的,IPVS 是 LVS集群系统的核心软件,它的主要做用是:安装在 Director Server 上,同时在 Director Server上虚拟出一个IP 地址,用户必须经过这个虚拟的 IP 地址访问服务器。这个虚拟 IP 通常称为 LVS 的VIP,即 Virtual IP。访问的请求首先通过 VIP 到达负载调度器,而后由负载调度器从Real Server 列表中选取一个服务节点响应用户的请求。 在用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的 Real Server 节点,而 Real Server节点如何返回数据给用户,是 IPVS 实现的重点技术。

ipvs : 工做于内核空间,主要用于使用户定义的策略生效

ipvsadm : 工做于用户空间,主要用于用户定义和管理集群服务的工具

上图所示,ipvs工做于内核空间的INPUT链上,当收到用户请求某集群服务时,通过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文经过ipvsadm定义的集群服务策略的路径改成FORWORD链,将报文转发至后端真实提供服务的主机。

LVS工做模式

VS/DR模式

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改成本身DIP的MAC地址,目标MAC改成了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是本身,就会将次报文接收下来,处理完请求报文后,将响应报文经过lo接口送给eth0网卡直接发送给客户端。

注意:

须要设置lo接口的VIP不能响应本地网络内的arp请求。

总结:

一、经过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。

二、请求的报文通过调度器,而 RS 响应处理后的报文无需通过调度器 LB,所以并发访问量大时使用效率很高(和 NAT 模式比)

三、由于 DR 模式是经过 MAC 地址改写机制实现转发,所以全部 RS 节点和调度器 LB 只能在一个局域网里面

四、RS 主机须要绑定 VIP 地址在 LO 接口(掩码32 位)上,而且须要配置 ARP 抑制。

五、RS 节点的默认网关不须要配置成 LB,而是直接配置为上级路由的网关,能让 RS 直接出网就能够。

六、因为 DR 模式的调度器仅作 MAC 地址的改写,因此调度器 LB 就不能改写目标端口,那么 RS 服务器就得使用和 VIP 相同的端口提供服务。

七、直接对外的业务好比WEB等,RS 的IP最好是使用公网IP。对外的服务,好比数据库等最好使用内网IP。

优势

和TUN(隧道模式)同样,负载均衡器也只是分发请求,应答包经过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不须要隧道结构,所以可使用大多数操做系统作为物理服务器。

DR模式的效率很高,可是配置稍微复杂一点,所以对于访问量不是特别大的公司能够用haproxy/nginx取代。日1000-2000W PV或者并发请求1万一下均可以考虑用haproxy/nginx。

缺点

全部 RS 节点和调度器 LB 只能在一个局域网里面。

VS/TUN模式

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改成DIP,目标地址改成RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,而后发现里面还有一层IP首部的目标地址是本身lo接口上的VIP,因此会处理次请求报文,并将响应报文经过lo接口送给eth0网卡直接发送给客户端。

注意:

须要设置lo接口的VIP不能在共网上出现。

总结:

1.TUNNEL 模式必须在全部的 realserver 机器上面绑定 VIP 的 IP 地址

2.TUNNEL 模式的 vip ------>realserver 的包通讯经过 TUNNEL 模式,不论是内网和外网都能通讯,因此不须要 lvs vip 跟 realserver 在同一个网段内

3.TUNNEL 模式 realserver 会把 packet 直接发给 client 不会给 lvs 了

4.TUNNEL 模式走的隧道模式,因此运维起来比较难,因此通常不用。

优势

负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。因此,减小了负载均衡器的大量数据流动,负载均衡器再也不是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器可以为不少RS进行分发。并且跑在公网上就能进行不一样地域的分发。

缺点:

隧道模式的RS节点须要合法IP,这种方式须要全部的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

VS/NAT模式

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改成了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,因为报文的目标地址是本身,因此会响应该请求,并将响应报文返还给LVS。

④.而后lvs将此报文的源地址修改成本机并发送给客户端。

注意:

在NAT模式中,Real Server的网关必须指向LVS,不然报文没法送达客户端

特色:

一、NAT 技术将请求的报文和响应的报文都须要经过 LB 进行地址改写,所以网站访问量比较大的时候 LB 负载均衡调度器有比较大的瓶颈,通常要求最多之能 10-20 台节点

二、只须要在 LB 上配置一个公网 IP 地址就能够了。

三、每台内部的 realserver 服务器的网关地址必须是调度器 LB 的内网地址。

四、NAT 模式支持对 IP 地址和端口进行转换。即用户请求的端口和真实服务器的端口能够不一致。

优势:

集群中的物理服务器可使用任何支持TCP/IP操做系统,只有负载均衡器须要一个合法的IP地址。

缺点

扩展性有限。当服务器节点(普通PC服务器)增加过多时,负载均衡器将成为整个系统的瓶颈,由于全部的请求包和应答包的流向都通过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

FULLNAT模式

不管是 DR 仍是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,不然 LVS 没法做为 RS 的网关。

这引起的两个问题是:

一、同一个 VLAN 的限制致使运维不方便,跨 VLAN 的 RS 没法接入。

二、LVS 的水平扩展受到制约。当 RS 水平扩容时,总有一天其上的单点 LVS 会成为瓶颈。

Full-NAT 由此而生,解决的是 LVS 和 RS 跨 VLAN 的问题,而跨 VLAN 问题解决后,LVS 和 RS 再也不存在 VLAN 上的从属关系,能够作到多个 LVS 对应多个 RS,解决水平扩容的问题。

Full-NAT 相比 NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另外一种转换,转换过程以下:

在包从 LVS 转到 RS 的过程当中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。

内网 IP 之间能够经过多个交换机跨 VLAN 通讯。

当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。

LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改成客户端的 IP。

Full-NAT 主要的思想是把网关和其下机器的通讯,改成了普通的网络通讯,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将再也不有任何限制,大大提升了运维部署的便利性。

总结

1.FULL NAT 模式也不须要 LBIP 和 realserver ip 在同一个网段; full nat 跟 nat 相比的优势是:保证 RS 回包必定可以回到 LVS;由于源地址就是 LVS--> 不肯定

2.full nat 由于要更新 sorce ip 因此性能正常比 nat 模式降低 10%

三种工做模式比较

工做模式 VS/NAT VS/TUN VS/DR
Real server(节点服务器) Config dr gw Tunneling Non-arp device/tie vip
Server Network Private LAN/WAN LAN
Server number(节点数量) Low 10-20 High 100 High 100
Real server gateway Load balance Own router Own router
优势 地址和端口转换 Wan环境加密数据 性能最高
缺点 效率低 须要隧道支持 不能跨域LAN

LVS调度算法

在内核中的链接调度算法上,IPVS已实现了如下八种调度算法:

  • 轮叫调度(Round-Robin Scheduling)
  • 加权轮叫调度(Weighted Round-Robin Scheduling)
  • 最小链接调度(Least-Connection Scheduling)
  • 加权最小链接调度(Weighted Least-Connection Scheduling)
  • 基于局部性的最少连接(Locality-Based Least Connections Scheduling)
  • 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication Scheduling)
  • 目标地址散列调度(Destination Hashing Scheduling)
  • 源地址散列调度(Source Hashing Scheduling)

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

通常应用场景 经常使用调度算法
通常的网络服务,如 http,mail,mysql 基本轮训、加权最小链接、加权轮训
防火墙集群 源地址散列调度SH和目标地址散列调度DH
web cache和DB cache 局部最小、带复制的局部最小

LVS支持SSL

测试http和https耗时
curl -w "tcp: %{time_connect}, ssl: %{time_appconnect}\n" -so /dev/null https://www.alipay.com

SSL是在TCP三次握手后又进行SSL握手,SSL通常使用的加密算法是RSA加密算法,比较耗费CPU计算,SSL加速卡能够解决CPU消耗高的问题。

Keepalived和Haproxy

参考文章

相关文章
相关标签/搜索