浅淡负载均衡集群之LVS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅淡负载均衡集群之LVS相关的知识,希望对你有一定的参考价值。

集群基础

1.服务器硬件性能不足,策略:

1.scale on 向上扩展 加大cpu 内存等硬件-----------这种方式不可能无限扩展,而且到一定程度,性能可能会下降
2.scale out 向外扩展 ------------------多台服务器对外提供服务-------------------》-目前使用的方法

cluster
1.LB 负载均衡 提高并发处理能力
2.HA 高可用集群 提升服务可用性

在线时间/(在线时间+故障处理时间)
99% 99.9% 99.99% 99.999%
3.HP(HPC)高性能集群 high performance
并行处理集群
分布式文件系统
将大任务 切割为小任务的机制

平常工作场景,用的最多的还是负载均衡及高可用集群,一般两者结合使用。
负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。
1.单台计算机无法承受大规模的并发访问或数据流量了,此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,
减少用户等待时间提升用户体验
2.7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。

一般负载均衡使用较多的就是LVS(四层代理,工作在OSI7层模型中的网络层和传输层,可以对IP地址及端口作分流策略)及nginx(7层代理,工作OSI7层模型中的应用层,可以对请求内容作分流策略)。
这里介绍lvs,我公司也用的是lvs负载均衡。
LVS(linux virtual server)

  1. LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1.ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

    1. ipvsadm(命令行集群管理工具,需要单独安装):另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)
      现在我们使用的linux发行版,内核基本都是2.6的,内核中都已集成ipvs模块,ipvs在内核空间处理应用程序层发过来的请求。
      简单来讲lvs就是一个调度器,通过一定的算法,将用户发来的请求分发给后端的服务器(真正处理请求的server)进行处理。
  2. LVS工作原理

    1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间

      1. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链

      2. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
    2. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器
  3. LVS相关术语

    1. DS:Director Server。指的是前端负载均衡器节点。
    2. RS:Real Server。后端真实的工作服务器。
    3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
    4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
    5. RIP:Real Server IP,后端服务器的IP地址。
    6. CIP:Client IP,访问客户端的IP地址。
  4. LVS类型
    NAT:地址转换-------------------进行IP地址修改
    DR:直接路由---------------------------MAC地址修改为后端的RS的mac地址
    TUN:隧道------------------------------------把原有报文重新封装一层IP首部(内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)
    client ip----->VIP---DIP--------->real server

5 . LVS/NAT原理和特点
(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
NAT特点
NAT:集群节点跟director必须在同一个IP网络中
RIP通常是私有地址,仅用于各集群间的通信
director位于client和real server之间,并负责处理进出的所有通信
real server必须将网关指向DIP
支持端口映射
real server可以使用任意OS
较大规模中,director容易成为系统瓶颈(因为处理后的响应都要经过director)

6 . LVS/DR原理和特点
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端
DR特点
DR------》直接路由 通过修改数据包目的mac地址,注意RS的 arp抑制问题
集群节点跟director必须在同一个物理网络中
real server可以使用公网地址,实现便捷的远程管理
director仅负责处理入站请求,响应报文直接由real server发给客户端,不经过director。
real server不能将网关指向DIP
不支持端口映射
可以处理更多的用户请求
7 . LVS/Tun原理和特点
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端
TUN特点
集群节点可以跨越internet
real server IP必须是公网地址
director仅处理入站请求,响应报文由real server直接发往客户端
不支持端口映射
企业中常用的还是DR直接路由

  1. 调度方法

    可以man ipvsadm查看相关算法
    1.轮叫调度 rr

这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,
该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,
调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,
非常均衡地分发下去。

  1. 加权轮叫 wrr

这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,
那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充,
LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,
服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,
处理的请求越多。

  1. 最少链接 lc

这个算法会根据后端 RS 的连接数来决定把请求分发给谁,
比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1

  1. 加权最少链接 wlc

这个算法比 lc 多了一个权重的概念。

  1. 基于局部性的最少连接调度算法 lblc

这个算法是请求数据包的目标 IP 地址的一种调度算法,
该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,
如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,
否则会继续选择其它可行的服务器

  1. 复杂的基于局部性最少的连接算法 lblcr

记录的不是要给目标 IP 与一台服务器之间的连接记录,
它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

  1. 目标地址散列调度算法 dh

该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,
出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

  1. 源地址散列调度算法 sh
    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

  2. 最少队列调度 nq
    无需队列,如果有台RS的连接数为0就直接分配过去
    我司采用的即是最后一种调度算法

以上是关于浅淡负载均衡集群之LVS的主要内容,如果未能解决你的问题,请参考以下文章

linux集群系列 --- LVS之负载均衡集群DR实例

负载均衡之LVS集群

Linux集群之高可用负载均衡lvs+keepalived

集群负载均衡之lvs和keepalived

linux之集群LVS

lvs负载均衡实践之lvs-nat