Lvs指的是linux virtual server,用于实现负载均衡

LVS结构:

  • 负载调度器(load balance)
  • 服务器池(server pool)
  • 共享存储(shared storage)

负载方式

  1. 地址转化(NAT)

NAT模式下的服务器节点使用的是私有IP,均衡器是集群的唯一出入口,网络结构呈现为一种类似防火墙的私有网络结构,服务器结点无法和客户端直接通信,所有数据都需要经过均衡器进行处理(分发/路由/NAT)

  1. 客户端将访问vip报文发送给LVS服务器;
  2. LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给后端真实服务器;
  3. 后端服务器在处理完之后要将响应的报文返回给客户端,但是却不在同一网段;
  4. LVS根据自己的追踪技术将后端真实服务响应客户端的报文原地址改为自己的ip地址(SNAT),发送给客户端。

lvs - 图1

  1. IP隧道(IP Tunneling)

VS/TUN模式采用开放的网络结构,负载均衡器仅仅处理进入集群的请求数据包,而返回的数据包不经过负载均衡器,服务器节点拥有合法的公网IP地址,可将应答包直接返回给客户端。负载均衡器和服务器节点的连接可以是同一LAN上,也可以跨越WAN在不同的网段上。
负载均衡器通过IPIP协议将客户端的请求包封装为新的IP包,发给服务器节点。服务器节点收到均衡器发来的IPIP数据包后,将包解开,根据包内的客户端源地址将处理结果,直接返回给客户端

  1. 直接路由(DR)

DR模式下服务器节点的应答数据不经过均衡器,而是直接返回给客户端。服务器节点也必须拥有合法IP地址。而且,负载均衡器和服务器节点必须位于同一个网段。
负载均衡器接收到客户端请求数据包之后,选择合适的服务器节点,将请求包的MAC地址改写为目的服务器节点的MAC地址,再将此包广播到服务器节点所在网段。每个服务器节点都设定一个虚拟的网络设备,这个设备绑定了和均衡器一样的VIP,只是该设备并不响应对VIP的arp解析,不会和均衡器的VIP产生地址冲突。负载均衡器收到符合自身的MAC的IP包后,经过处理后直接将应答数据返回给客户

  1. FULLNAT

LVS的NAT服务提供了DNAT的功能,只要把经过了LVS服务的包在出LVS主机的时候,再做SNAT处理,就能够实现fullnat了。
lvs - 图2

轮询算法

  • 轮询 rr
  • 加权轮询 wrr
  • 最少链接 LC
  • 加权最少链接 WLC
  • 基于局部性的最少连接 LBLC (针对请求报文的目标ip地址的负载均衡调度,将相同目标ip地址请求的调度到同一台机器)
  • 源地址散列调度sh
  • 目标地址散列调度dh

    ipvsadm

    ```bash

    添加一个虚拟服务192.168.1.100:80,使用轮询算法

    $ ipvsadm -A -t 192.168.1.100:80 -s rr

    修改虚拟服务的算法为加权轮询

    $ ipvsadm -E -t 192.168.1.100:80 -s wrr

    删除虚拟服务

    $ ipvsadm -D -t 192.168.1.100:80

添加一个真实服务器192.168.1.123,使用DR模式,权重2

$ ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2

修改真实服务器的权重

$ ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5

删除真实服务器

$ ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123

查看当前配置的虚拟服务和各个RS的权重

$ ipvsadm -Ln

查看当前ipvs模块中记录的连接(可用于观察转发情况)

$ ipvsadm -lnc

查看ipvs模块的转发情况统计

$ ipvsadm -Ln —stats | —rate ``` LVS模式控制:

  • -g :DR
  • -m :NAT
  • -i :TUN

    负载均衡

  1. 将大量的并发处理转发给后端多个节点处理,减少工作响应时间;
  2. 单个繁重的工作转发给后端多个节点处理,处理完再返回给负载均衡中心,再返回给用户。

负载均衡分类

  1. 二层负载均衡(mac):一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应.
  2. 三层负载均衡(ip):外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应.
  3. 四层负载均衡(tcp):使用”ip+port”接收请求,再转发到对应的机器。.

实现四层负载均衡: f5, lvs , nginx ,haproxy

  1. 七层负载均衡(http):根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。

在四层负载均衡的基础上,再考虑应用层的特征

实现七层负载均衡的软件:apache,Mysql proxy,nginx,haproxy

总的来说,一般是lvs做4层负载;nginx做7层负载(也能做4层负载, 通过stream模块);haproxy比较灵活,4层和7层负载均衡都能做

四层与七层区别

七层基于http协议,四层基于tcp协议报文

两者主要区别在于利用的报文所在的层面是不同的

七层应用负载的好处 可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性

很多在后台,例如Nginx或者Apache上部署的功能可以前移到负载均衡设备上,

四层负载均衡主要是较为灵活,可以作为多种软件的负载均衡器。

负载均衡类型

  1. LB负载均衡集群

LVS(四层),Nginx/Tengine(七层),Haproxy(4/7层)

LB集群主要以提高并发能力为根本

  1. HA高可用集群

keepalived,RHCS,heartbeat,Pacemaker,rose,PowerHA

HA集群主要解决提高服务在线时间为根本

  1. HPC高性能计算

HPC集群主要解决大任务计算的问题

  1. Storage Cluster

GlusterFS

Ceph

主要提供高性能,可靠,大容量的分布式存储