LVS 原理(调度算法、四种模式的实现、四层负载均衡和七层 的区别)

38 篇文章 0 订阅

1.总览

  • LVS 的调度算法
  • LVS 的 四种模式的实现
  • 四层负载均衡和七层 的区别


2.LVS 调度算法

总共八种方法, 最脑残暴力的就是直接平均轮叫。
  1.  轮叫调度
    调度器通过外部请求的顺序轮流的分配到集群中的真实服务器上,对每台服务器都是均等的。但是这样调度器不会考虑服务器上实际的连接数和系统负载,导致服务器处理请求慢,系统负载增大。
  2.  加权轮叫
    调度器通过一个算法根据真实服务器的不同处理能力来分配访问请求,这样可以保证服务器的处理能力。
  3. 最少连接
    调度器将访问请求自动的分配到已建立连接最少的服务器上,如果在集群中每台服务器的性能差不多的话,则这种算法可以较好的均衡负载。
  4. 加权最少连接
    主要用于集群中服务器性能差异大的情况下,调度器可以优化负载性能,具有较高权值的服务器可以将承受较大的活动连接。
  5. 基于局部性的最少连接
    主要是针对目标IP地址的负载均衡,将请求的目标IP地址找到离其最近的服务器进行使用,如果服务器不存在或者满载的话,就会继续寻找下一个服务器。
  6. 带复制的基于局部性的最少连接
    主要是针对目标IP地址的负载均衡,根据请求的目标IP地址找出该地址所对应的服务器,如果服务器不存在或者满载的话,就会继续寻找下一个服务器。当服务器有一段时间没有被修改,则会从最忙的服务器组中删除。
  7. 目标地址散列
    根据请求的目标IP地址从静态分配的散列表中超出对应的服务器,如果找到可用的服务器且没有满载,则返回空。
  8. 源地址散列
    根据请求的源IP地址从静态分配的散列表中超出对应的服务器,如果找到可用的服务器且没有满载,则返回空。

3.LVS 的 四种模式的实现


LVS 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之上,传输层上有我们熟悉的 TCP/UDP,LVS 支持 TCP/UDP 的负载均衡。
LVS 的转发主要通过修改 IP 地址(NAT 模式,分为源地址修改 SNAT 和目标地址修改 DNAT)、修改目标 MAC(DR 模式)来实现。

那么为什么 LVS 是在第四层做负载均衡?
首先 LVS 不像 HAProxy 等七层软负载面向的是 HTTP 包,所以七层负载可以做的 URL 解析等工作,LVS 无法完成。其次,某次用户访问是与服务端建立连接后交换数据包实现的,如果在第三层网络层做负载均衡,那么将失去「连接」的语义。软负载面向的对象应该是一个已经建立连接的用户,而不是一个孤零零的 IP 包。后面会看到,实际上 LVS 的机器代替真实的服务器与用户通过 TCP 三次握手建立了连接,所以 LVS 是需要关心「连接」级别的状态的。

LVS 的工作模式主要有 4 种:
  • DR
  • NAT
  • TUNNEL
  • Full-NAT
这里挑选常用的 DR、NAT、Full-NAT 来简单介绍一下。


3.1.DR


请求由 LVS 接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过 LVS。
DR 模式下需要 LVS 和绑定同一个 VIP(RS 通过将 VIP 绑定在 loopback 实现)。
一个请求过来时,LVS 只需要将网络帧的 MAC 地址修改为某一台 RS 的 MAC,该包就会被转发到相应的 RS 处理,注意此时的源 IP 和目标 IP 都没变,LVS 只是做了一下移花接木。
RS 收到 LVS 转发来的包,链路层发现 MAC 是自己的,到上面的网络层,发现 IP 也是自己的,于是这个包被合法地接受,RS 感知不到前面有 LVS 的存在。
而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回即可,不再经过 LVS。
DR 模式是性能最好的一种模式。


3.2 NAT


NAT(Network Address Translation)是一种外网和内网地址映射的技术。
NAT 模式下,网络报的进出都要经过 LVS 的处理。LVS 需要作为 RS 的网关。
当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。
RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。
这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。客户端无法感知到后端 RS 的存在。

3.3 Full-NAT

无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关。
这引发的两个问题是:
1、同一个 VLAN 的限制导致运维不方便,跨 VLAN 的 RS 无法接入。
2、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 上将不再有任何限制,大大提高了运维部署的便利性。

 

4.四层负载均衡和七层 的区别



4.1. 四层负责均衡:

是通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器与请求客户端建立TCP连接,然后发送Client请求的数据。


由上图可知:在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据。
 

4.2. 七层负载均衡设备

也称内容交换,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的服务器。
由上图可知,其实七层负载均衡服务器起了一个代理服务器的作用,我们知道建立一次TCP连接要三次握手;而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用。


4.3. 七层的负责均衡设备的优点:

  (1) 使整个网络更“智能化”,能把对图片类的请求转发到图片服务器,对文字的请求转发到文字服务器
  (2) 可以有效防止 SYN Flood攻击,是网站更安全

4.4. 七层负载均衡设备的缺点:

  因为七层负载均衡设备其实是一个代理服务器,则对此设备的要求也很高。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值