LVS负载均衡

  1. LVS入门
  2. LVS集群
  3. LVS vs Nginx

1 LVS入门

  1. LVS简介
  2. LVS基本概念
  3. LVS调度算法
1.1 LVS简介
  • LVS是基于TCP/IP做的路由转发
  • 稳定性和效率性都很高
  • 工作于linux内核中
1.2 LVS基本概念
  • DS (Director Server):前端负载均衡器服务器
  • RS (Real Server):后端真实的工作服务器
  • VIP:直接面向外部用户请求,作为用户请求的目标IP地址
  • DIP (Director Server IP):主要用于和内部主机通讯的IP地址
  • RIP (Real Server IP):后端服务器IP地址
  • CIP (Client IP):访问客户端的IP地址
1.2.1 内核Layer-7交换机 KTCPVS

由于用户空间TCP Gateway的开销太大,我们提出在操作系统的内核中实现Layer-7交换方法,来避免用户空间与核心空间的切换和内存复制的开销。在Linux操作系统的内核中,我们实现了Layer-7交换,称之为KTCPVS(Kernel TCP Virtual Server)。

  • 虽然应用层交换处理复杂,它的伸缩性有限,但应用层交换带来以下好处:
    • 相同页面的请求被发送到同一服务器,可以提高单台服务器的Cache命中率。
    • Layer-7交换机可以充分利用访问的局部性,将相同类型的请求发送到同一台服务器,使得每台服务器收到的请求具有更好的相似性,可进一步提高单台服务器的Cache命中率。
    • 后端服务器可运行不同类型的服务,如文档服务、图片服务、CGI服务和数据库服务等。
1.3 LVS调度算法
  • 轮询
  • 加权轮询
  • 最少连接
  • 加权最少连接
  • 基于局部性的最少连接
  • 带复制的基于局部性最少连接
  • 目标地址散列
  • 源地址散列

2 LVS集群

  1. LVS集群特点
  2. 三种集群模式
2.1 LVS集群特点

LVS属于4层负载均衡,Nginx属于7层负载均衡,Haproxy既可以认为是4层,也可以做7层使用。

LVS是可以分发除80外的其它端口的,比如MySQL,而Nginx仅仅支持HTTP/HTTPS/MAIL;Haproxy也支持MySQL这种的。

相比较来说,LVS这种4层的更稳定,能承受更多的请求,而Nginx这种7层的更加灵活,能实现更多个性化需求。

功能

  1. 有实现三种IP负载均衡技术和八种调度算法的IPVS软件。
  2. 在IPVS内部实现上,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相关的ICMP消息。
  3. 虚拟服务的设置数目没有限制,每个虚拟服务有自己的服务器集。
  4. 它支持持久的虚拟服务(如HTTP Cookie和HTTPS等需要该功能的支持),并提供详尽的统计数据,如连接的处理速率和报文的流量等。
  5. 针对大规模拒绝服务(DoS)攻击,实现了三种防卫策略。
  6. 有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。
  7. 有相关的集群管理软件对资源进行监测,能及时将故障屏蔽,实现系统的高可用性。
  8. 主、从调度器能周期性地进行状态同步,从而实现更高的可用性。

性能
LVS服务器集群系统具有良好的伸缩性,可支持几百万个并发连接。配置100M网卡,采用VS/TUN或VS/DR调度技术,集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s。

可靠性
LVS服务器集群软件已经在很多大型的、关键的站点得到很好的应用。所以它的可靠性在真实应用得到很好的证实。有很多调度器运行一年多,未作一次重启。

软件许可证
LVS集群软件是按GPL许可证发行的自由软件,这意味着你可以得到软件的源代码,有权对其进行修改,但必须保证你的修改也是以GPL方式发行。

2.2 三种集群模式
2.2.1 LVS NAT模式

VS/NAT(Network Address Translation):通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载均衡调度过程。

  • 这种模式借助iptables的nat表来实现。
  • 用户的请求到分发器后,通过预设的iptables规则,把请求数据包转发到后端的RS上去。
  • RS需要设定网关为分发器的内网IP
  • 用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈。
  • 在nat模式中,只需要分发器有公网IP即可,所以比较节省公网IP资源。
2.2.2 LVS IP Tunnel模式

VS/TUN(Tunneling):调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将相应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

  • 这种模式需要有一个公共的IP配置在分发器和所有的RS上,我们把它叫做VIP。
  • 客户端请求的目标IP为VIP,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为RS的IP,这样数据包就到了RS上。
  • RS接收数据包后,会还原数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以它会认为是它自己。
2.2.3 LVS DR模式

VS/DR(Virtual server via direct routing):通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。

  • 这种模式,也需要有一个公共的IP配置在分发器和所有RS上,也就是VIP。
  • 和IP Tunnel不同的是,它会把数据包的MAC地址修改为RS的MAC地址。
  • RS接收数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以它会认为是它自己。

3 LVS vs Nginx

负载均衡4层负载均衡7层负载均衡
技术原理IP+TCP端口URL应用层(内容交换)
典型代表LVSNginx、Haproxy、MySQL Proxy
优点和缺点不理解mysql/ftp/http等应用协议,满足不了特点需求,比如动静分离,缓存自定义等但是配置简单,效率也很高对负载均衡设备要求很高,处理七层能力一般低于四层模式的部署方式,但有点比较智能化,比如动静分离,根据不同请求定义图片、缓存,可以对客户端请求和服务器相应进行自定义修改,极大提升了应用系统在网络层的灵活性
安全性SYNFlood攻击,有的软四层应用则会转发到后端服务器,有的则可以防止攻击,这个和设备有一定关系一般可以在七层进行拦截,不影响后台服务器正常运营,可以设置多种策略,过滤特定报文
应用对应TCP应用,比如C/S开发的ERP应用HTTP协议,应用主要是网站或内部信息平台等B/S开发的系统
案例接受客户的syn请求,通过上述方式选择后端指定服务器,并对报文中目标ip地址进行修改,改为后端服务器ip,tcp连接是直接建立,而负载均衡类似路由器作用如果要根据真正的应用层内容在选择服务器,则先代理最终服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容报文,然后根据该报文中特定字段,加上负载均衡设备的服务器选择方式,决定最终选择的内部服务器,此时充当了代理服务器。

参考文章

网易云课堂《Java高级开发工程师》

结语

个人对于LVS负载均衡的了解,还停留在入门阶段,后期有进一步的学习,再将对应成果分享上来。
本人所有博客仅用于学习记录,不做任何商业用途,如涉及侵权,还请联系删除,感谢阅读,欢迎留言,一起进步~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值