LVS(一)

来源:互联网 发布:阿根廷04男篮名单 数据 编辑:程序博客网 时间:2024/06/06 07:36

一、前言
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。

集群分三种:

  • LB: 负载均衡集群,Load Banlancing
  • HA: 高可用集群,High Availability
  • HP: 高性能集群,High Performancing

LB集群的实现:

  • 硬件:F5 …
  • 软件:
    • lvs
    • haproxy
    • nginx
    • ats(apache traffic server)
    • perlbal

这篇文章主要介绍LB集群中的LVS。

二、什么是LVS
随着网站规模扩大,对用硬件和软件方法实现高可伸缩、高可用网络服务的需求不断增长,这种需求可以归结以下几点:

  • 可伸缩性(Scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。
  • 高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。
  • 可管理性(Manageability),整个系统可能在物理上很大,但应该容易管理。
  • 价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的

针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器(Virtual Server)。由于这种负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server,LVS)。

以上内容来自 LVS中文文档


LVS是工作于内核中的组件,根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台真实主机中。

lvs有两个层次,一个工作在用户空间中,能够让用户管理集群,添加规则等操作,一个工作在内核中,真正的工作组件

  • ipvsadm: 用户空间的命令,用于管理集群服务
  • ipvs:工作内核中netfilter INPUT钩子上

一般的,在CentOS上内核都已经将LVS规则编译到内核中了,使用grep命令查看:

# grep -i -A 10 'IPVS' /boot/config-3.10.0-514.el7.x86_64

图1

三、LVS类型

在介绍LVS类型之前,要先介绍一下在LVS中的一些专业术语:

图2

  • Client IP: CIP,客户端IP
  • Director:部署LVS的服务器,至少有两块网卡,一块与外网连接,一块与内网连接
  • Directory Virtual IP: VIP,与外网连接的网卡IP
  • Director IP: DIP,与内网连接的IP
  • Real Server IP: RIP,内网中的真正响应用户请求的服务器的IP

LVS实现了这三种IP负载均衡技术:

  1. lvs-nat:
    多目标的DNAT(iptables): 它通过修改请求报文的目标IP地址(同时会修改目标端口)至挑选出某RS的RIP地址实现转发
    (1) RS应该和DIP应该使用私网地址,且RS的网关要指向DIP
    (2) 请求和响应报文都要经由director转发,但是极高负载的场景中,director可能会成为系统瓶颈
    (3) 支持端口映射
    (4) RS可以使用任意OS
    (5) RS的RIP和Director的IP必须在同一IP网络中

  2. lvs-dr:direct routing(最重要,大规模场景中应用上的)
    它通过修改请求报文的目标MAC地址进行转发
    Director:必须绑定VIP以及DIP
    RS:必须绑定RIP,VIP
    (1) 保证前端路由器将目标IP为VIP的请求报文发送给director
      解决方案:
        静态绑定
        arptables
        修改RS主机内核的参数
    2) RS的RIP可以使用私有地址,但也可以使用公网地址
    (3) RS跟Director必须在同一物理网络中
    (4) 请求报文经由Director调度,但响应报文一定不经由Director
    (5) 不支持端口映射
    (6) RS可以大多数OS
    (7) RS的网关不能指向DIP

  3. lvs-tun: director与real server可以不在同一个地方
    不修改请求报文的IP首部,而是通过在原有的IP首部之外,再封装一个ip首部
    (1) RIP, DIP, VIP全是公网地址
    (2) RS的网关不能指向DIP
    (3) 请求报文必须经由Director调度,但响应报文必须不能经由Director
    (4) 不支持端口映射
    (5) RS的OS必须支持隧道功能

根据不同的网络情况以及服务器的配置情况,LVS设计了九种不同的调度算法:

图三

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

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

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

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

  5. LBLC( Locality-Based Least Connections ) 基于局部性的最少链接
    “基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务 器,将请求发送到该服务器。

  6. LBLCR( Locality-Based Least Connections with Replication ) 带复制的基于局部性最少链接
    “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

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

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

  9. SED( Shortest Expected Delay ) 最短期望延迟

以上算法解释来自于 LVS中文文档

–END–

原创粉丝点击