LVS(Linux virtual Server)

简介

​ Linux虚拟服务器。

原理

​ 在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如下所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器。

LVS的三种工作模式

基于NAT的LVS模式负载均衡

​ Nat(网络地址转换),使用两块网卡,一块网卡与内部网络通过交换机连接,另一块做为外网ip与外网连通。

​ 数据访问方向:用户通过互联网,访问LVS的外网ip,发送请求到VIP,LVS收到请求,通过算法调度后面的web服务器,转发请求到web服务器,web服务器收到请求后,返回数据到LVS,LVS将源IP、源端口,修改为VIP和自身的端口,修改完成后将响应数据包,再发送给用户。

基于TUN的LVS负载均衡

​ LVS调度器与服务器建立真实连接,LVS调度器将数据封装,通过隧道发送给服务器,服务器收到请求的数据包后,将数据直接通过公网发送响应包给用户。

​ 如果后台服务器数量大于10台,通过NAT返回响应包,LVS调度器将会成为整个集群的瓶颈,而TUN模式下的LVS,则减少了LVS的工作量。

基于DR的LVS负载均衡

​ NAT和TUN的结合,LVS依然是通过NAT的方式将数据请求包发送到真实的服务器,然后与服务器共享VIP地址,服务器将响应包的源地址设为VIP地址,通过route的方式将响应数据包直接返回给用户。

三种模式对比

LVS负载均衡调度算法

轮询调度

​ 依次循环的方式请求调度到不同的服务器。实现简单,

加权轮询调度

​ 根据服务器的性能,添加权值,权值越大,处理的请求越大。

最小连接调度

​ 把新的连接请求分配到当前连接数最小(处理请求最少)的服务器。

加权最小连接调度

​ 各个服务器相应的权值表示其处理性能。

基于局部的最少连接

​ 针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。

带复制的基于局部性的最少连接

​ 针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。

目标地址散列调度

​ 根据请求的目标IP地址,作为散列键,从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

源地址散列调度

​ 根据请求的源IP地址,作为散列键,从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

最短的期望的延迟

​ 基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。

ipvsadm

语法
	 ipvsadm -A|E -t|u|f <集群服务地址> [-s <调度算法>] [-p <超时时间>] [-M <掩码>] [-b <标志>]
	 ipvsadm -D -t|u|f <集群服务地址>
     ipvsadm -C
     ipvsadm -R
     ipvsadm -S [-n]
     ipvsadm -a|e -t|u|f <集群服务地址> -r <真实服务器地址> [选项]
     ipvsadm -d -t|u|f <集群服务地址> -r <真实服务器地址>
     ipvsadm -L|l [options]
     ipvsadm -Z [-t|u|f <集群服务地址>]
     ipvsadm --set <超时时间>
     ipvsadm --start-daemon <主或备> [--mcast-interface <组播接口>] [--syncid <SID>]
     ipvsadm --stop-daemon <主或备>
     ipvsadm -h
子命令
     --add-service     -A        添加一个集群服务,需要使用选项
     --edit-service    -E        编辑一个集群服务,需要使用选项
     --delete-service  -D        删除指定集群服务,需要使用选项
     --clear           -C        删除所有集群服务,包括真实服务器转发策略规则
     --restore         -R        从标准输入中恢复策略规则
     --save            -S        保存策略规则到标准输出
     --add-server      -a        添加一个真实服务器,需要使用选项
     --edit-server     -e        编辑一个真实服务器,需要使用选项
     --delete-server   -d        删除一个真实服务器,需要使用选项
     --list            -L|-l     查看集群服务列表,包括真实服务器转发策略规则
     --zero            -Z        计数器清零。清除连接数、包转发等数量统计信息
     --set <超时时间>            设置TCP、TCPFIN(TCP关闭连接状态)、UDP连接超时时间,用于
                                 会话保持。一般情况下TCP和UDP超时时间保持默认就好,TCPFIN
                                 可以根据情况设定,指定它则用户请求连接关闭,该连接则会变
                                 为非活跃(InActive)空闲等待状态,在空闲等待时间内,如果
                                 来自同一源IP的请求,则还会转发给后端的同一台真实服务器上
     --start-daemon              开启连接同步守护进程。在选项后面指定自己是Master(主)还
                                 是backup(备),主负载调度器会同步所有策略及连接状态到备
                                 负载调度器,当主故障,备可以接替其工作
     --stop-daemon               停止连接同步守护进程
     --help            -h        显示帮助信息