LVS四层负载均衡

xiaolv
9
2025-12-18

LVS 介绍

LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

LVS的优势和不足

1.优势

高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。

稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。

成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。

配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。

支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用

支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。

应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等

2.不足

工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

LVS 核心组件和专业术语

1.核心组件

LVS的管理工具和内核模块 ipvsadm/ipvs

ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;

ipvs:工作于内核上的netfilter INPUT钩子之上的程序,可根据用户定义的集群实现请求转发;

2.专业术语

VS:Virtual Server 虚拟服务

Director, Balancer 负载均衡器、分发器

RS:Real Server 后端请求处理服务器

CIP: Client IP 用户端IP

VIP:Director Virtual IP 负载均衡器虚拟IP

DIP:Director IP 负载均衡器IP

RIP:Real Server IP 后端请求处理服务器IP

LVS工作内核模型及工作模式

LVS工作内核模型

1、当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。

2、当内核发现请求数据包的目的地址是本机时,将数据包送往 INPUT 链。

3、LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。

4、如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。

5、最后经由POSTROUTING链发往后端服务器。

LVS负载均衡四种工作模式

LVS 的基本原理可以用一句话概述,通过修改 MAC 层、IP 层、TCP 层的数据包,实现一部分交换机和网关的功能,将流量转发至真正的服务器上。这三种数据包修改方式分别对应 LVS 提供的三种工作模式,接下来将详细介绍它们的工作原理。

NAT工作模式(网络地址转换模式)

1.LVS NAT 模式介绍

Virtual Server via NAT(VS-NAT):用地址转换实现虚拟服务器。分发器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。

外界看起来包是来自分发器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。

优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。

2.LVS NAT 模式工作流程

1、 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的 PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

3、IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP

4、POSTROUTING链通过选路,将数据包发送给Real Server

5、Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP

6、Director Server 把RS来到响应包,通过FORWORD 转发给client 在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

3.LVS NET 模式图解

DR 工作模式(直接路由模式)

1.LVS DR 模式介绍

Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。

2.LVS DR 模式工作原理

DR和REAL SERVER都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有REAL SERVER对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的 REAL SERVER,把目的MAC地址改为REAL SERVER的MAC并发给这台REAL SERVER。这时REAL SERVER收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DR要对二层包头进行改换,所以DR和REAL SERVER之间必须在一个广播域,也可以简单的理解为在同一台交换机上

3.LVS DR 模式工作流程

1、 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

3、 IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

4、 由于DS和RS在同一个网络中,所以是通过二层,数据链路层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。

5、 RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP

6、 响应报文最终送达至客户端

4.LVS DR 模式特点

1、 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS

2、 RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问

3、 RS跟Director Server必须在同一个物理网络中

4、 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

5、 不支持地址转换,也不支持端口映射

6、 RS可以是大多数常见的操作系统

7、 RS的网关绝不允许指向DIP(因为我们不允许他经过director)

8、 RS上的lo接口配置VIP的IP地址

5.LVS DR 模式工作流程图解

LVS TUN 工作模式(IP隧道模式)

1.LVS TUN 模式介绍

用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等.

TUN模式:采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍

2.LVS TUN 模式工作流程

1、 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

2、 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

3、 RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会再处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端注意:需要设置lo接口的VIP不能在共网上出现

3.LVS TUN 模式图解

4、LVS full-nat 工作模式

lvs-fullnat(双向转换)

通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发:

CIP --> DIP VIP --> RIP

架构特点:这是一种对nat模型的改进,是一个扩展,使得RS与Director可以处于不同网络。

(1)RIP,DIP可以使用私有地址;

(2)RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP;

(3)支持端口映射;

(4)RS的OS可以使用任意类型;

(5)请求报文经由Director,响应报文也经由Director

5、四者的区别

机器名称

IP配置

服务角色

备注

lvs-server

VIP:172.16.100.1 DIP:192.168.100.1

负载均衡器

开启路由功能(VIP桥接、DIP仅主机)

rs01

RIP:192.168.100.2

后端服务器

网关指向DIP(仅主机)

rs02

RIP:192.168.100.3

后端服务器

网关指向DIP(仅主机)

rs03

RIP:192.168.100.4

后端服务器

网关指向DIP(仅主机)

lvs-nat与lvs-fullnat:请求和响应报文都经由Director

  lvs-nat:RIP的网关要指向DIP

   lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

   lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发

   lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

四种工作模式的实现

环境说明

网络
 网络A:192.168.13.0/24  (模拟公网)
 网络B:172.16.1.0/24    (模拟内网)
 ​
 机器配置:
 1. Director:双网卡(NAT模式必需),单网卡也可演示DR/TUN
    - eth0: 192.168.13.230 (VIP所在网络)
    - eth1: 172.16.1.10 (仅NAT模式使用)
 ​
 2. Real Server 1 (RS1):Web服务器
    - eth0: 172.16.1.11 (NAT) 或 192.168.13.231 (DR/TUN)
 ​
 3. Real Server 2 (RS2):Web服务器  
    - eth0: 172.16.1.12 (NAT) 或 192.168.13.232 (DR/TUN)
 ​
节点
 # 1. 安装必要工具
 apt-get update && apt-get install -y ipvsadm keepalived net-tools curl
 # 或 CentOS
 yum install -y ipvsadm keepalived net-tools curl
 ​
 # 2. 关闭防火墙和SELinux(实验环境)
 systemctl stop firewalld
 systemctl disable firewalld
 setenforce 0
 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
 ​
 # 3. 在RS上安装Web服务
 apt-get install -y nginx
 # 或
 yum install -y nginx
 echo "RS1" > /usr/share/nginx/html/index.html  # RS1
 echo "RS2" > /usr/share/nginx/html/index.html  # RS2
 systemctl start nginx
ipvsadm命令

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

命令选项

 -A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
 -t #表示为tcp服务
 -u #表示为udp服务
 -s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
 例:ipvsadm -A -t 192.168.1.2:80 -s wrr
 ​
 -a --add-server  #在服务器表中添加一条新的真实主机记录
 -t --tcp-service #说明虚拟服务器提供tcp服务
 -u --udp-service #说明虚拟服务器提供udp服务
 -r --real-server #真实服务器地址
 -m --masquerading #指定LVS工作模式为NAT模式
 -w --weight #真实服务器的权值
 -g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
 -i --ip #指定LVS的工作模式为隧道模式
 -p #会话保持时间,定义流量被转到同一个realserver的会话存留时间
 例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1
 ​
 -E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
 -D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
 -C -clear #清除内核虚拟服务器表中的所有记录。
 -R -restore #恢复虚拟服务器规则
 -S -save #保存虚拟服务器规则,输出为-R 选项可读的格式
 -e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
 -d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
 -L|-l –list #显示内核虚拟服务器表
 ​
 --numeric, -n:#以数字形式输出地址和端口号
 --exact: #扩展信息,精确值 
 --connection,-c: #当前IPVS连接输出
 --stats: #统计信息
 --rate : #输出速率信息
 ​
 参数也可以从/proc/net/ip_vs*映射文件中查看
 -Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)

NAT工作模式

Director服务器网络配置
 # /etc/netplan/50-cloud-init.yaml
 network:
   version: 2
   renderer: networkd
   ethernets:
     eth0:  # 外网接口
       dhcp4: no
       addresses:
         - 192.168.13.230/24
       routes:
         - to: default
           via: 192.168.13.1  # 外网网关
       nameservers:
         addresses: [8.8.8.8, 8.8.4.4]
     eth1:  # 内网接口
       dhcp4: no
       addresses:
         - 172.16.1.10/24

应用配置并验证:

 netplan apply
 ip a show  # 确认IP地址是否正确绑定
 ip route show  # 检查默认路由是否指向外网网关

在 Director服务器上启用IP转发,这是LVS-NET模式正常工作的前提:

 echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
 sysctl -p  # 应用配置

Real Server网络配置

Real Server只需配置内网接口,网关指向Director服务器的内网IP:

 # RS1 网络配置/etc/netplan/50-cloud-init.yaml
 network:
   version: 2
   renderer: networkd
   ethernets:
     eth0:  # 内网接口
       dhcp4: no
       addresses:
         - 172.16.1.11/24
       routes:
         - to: default
           via: 172.16.1.10  # 必须配置默认路由为Director服务器内网ip
       nameservers:
         addresses: [8.8.8.8, 8.8.4.4]
         
 # RS2 网络配置相似

应用配置并验证:

 netplan apply
 ip a show  # 确认IP地址是否正确绑定
 ip route show  # 检查默认路由是否指向Director

安装ipvsadm工具并配置转发策略

安装必要软件包

 apt update
 apt install ipvsadm keepalived

配置虚拟服务

 # 创建虚拟服务记录
 ipvsadm -A -t 172.16.1.100:80 -s rr  # VIP为172.16.1.100,端口80,轮询调度算法
 ​
 # 添加Real Server
 ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.11:80 -m  # 模式设置为m(NET模式)

保存IPVS配置

 ipvsadm-save > /etc/ipvsadm.conf  # 保存当前规则到配置文件

验证配置

 ipvsadm -Ln  # 查看当前负载均衡规则

配置IPVS服务持久化:为确保系统重启后IPVS规则自动加载,需创建自定义systemd服务单元:

 vim /etc/systemd/system/ipvsadm.service

服务单元内容:

 [Unit]
 Description=IPVS Adm Service
 After=network.target
 ​
 [Service]
 ExecStart=/usr/sbin/ipvsadm-restore < /etc/ipvsadm.conf
 ExecStop=/usr/sbin/ipvsadm -C
 RemainAfterExit=yes
 ​
 [Install]
 WantedBy=multi-user.target

启用并启动服务

 systemctl enable ipvsadm
 systemctl start ipvsadm

验证配置

访问 curl http://www.xlyw.com/ 轮询策略生效

DR 工作模式

环境

vip:192.168.13.200

ds:192.168.13.230/24

web01:192.168.13.231/24

web02:192.168.23.232/24

1. 安装 ipvsadm
 apt update
 apt install -y ipvsadm
2. 网络配置
 network:
   version: 2
   renderer: networkd
   ethernets:
     eth0:
       addresses:
         - 192.168.13.230/24
         - 192.168.13.200/24 # vip
       routes:
         - to: default
           via: 192.168.13.1    # 替换为你的网关
       nameservers:
         addresses: [8.8.8.8, 114.114.114.114]

3. 开启ip转发
 # 开启IP转发(持久化)
 sudo tee /etc/sysctl.d/99-lvs.conf << 'EOF'
 net.ipv4.ip_forward = 1
 net.ipv4.conf.all.send_redirects = 0
 net.ipv4.conf.default.send_redirects = 0
 net.ipv4.conf.eth0.send_redirects = 0  # 替换ens33为你的外网接口名
 EOF
 ​
 # 应用配置
 sudo sysctl -p /etc/sysctl.d/99-lvs.conf
4. 创建 LVS 虚拟服务(DR 模式)
 # 清空旧规则
 ipvsadm -C
 ​
 # 添加虚拟服务(VIP: 192.168.13.200:80,轮询)
 ipvsadm -A -t 192.168.13.200:80 -s rr
 ​
 # 添加真实服务器(DR 模式用 -g)
 ipvsadm -a -t 192.168.13.200:80 -r 192.168.13.231:80 -g
 ​
 # 查看规则
 ipvsadm -Ln
 ​
 # 保存规则
 ipvsadm-save > /etc/ipvsadm.conf
5. 设置开机自动加载 LVS 规则
 echo '#!/bin/bash
 ipvsadm-restore < /etc/ipvsadm.conf' | tee /etc/network/if-up.d/lvs-dr
 chmod +x /etc/network/if-up.d/lvs-dr
Real Server 配置
1. 绑定 VIP 到 loopback 接口(持久化)

Ubuntu 24.04 默认使用 Netplan + networkdNetworkManager

Netplan 对 lo 接口的多 IP 支持有限,推荐用 systemd-networkd 配置片段补充 VIP。

 # /etc/netplan/50-cloud-init.yaml
 network:
   version: 2
   renderer: networkd
   ethernets:
     eth0:
       addresses:
         - 192.168.13.231/24
       routes:
         - to: default
           via: 192.168.13.1    # 替换为你的网关
       nameservers:
         addresses: [8.8.8.8, 114.114.114.114]
 # 创建 loopback 子接口配置
 mkdir -p /etc/systemd/network
 ​
 cat <<EOF | tee /etc/systemd/network/lo-vip.network
 [Match]
 Name=lo
 ​
 [Network]
 Address=192.168.13.200/32
 EOF
 ​
 # 重启 systemd-networkd
 systemctl restart systemd-networkd

注意:

  1. 使用 /32 是为了将 VIP 作为一个“主机路由”绑定到本地回环(lo)接口,而不参与任何子网广播、ARP 或路由决策。

  1. lo绑定的vip不能和director服务器的真实ip相同

此时,执行ip a可以看到:

2. 抑制 VIP 的 ARP 响应(关键!)

防止 RS 与 Director 同时响应 VIP 的 ARP 请求,造成冲突。

 # 永久生效
 echo "net.ipv4.conf.all.arp_ignore = 1
 net.ipv4.conf.all.arp_announce = 2
 net.ipv4.conf.lo.arp_ignore = 1
 net.ipv4.conf.lo.arp_announce = 2" | tee -a /etc/sysctl.conf
 ​
 sysctl -p

验证测试

TUN工作模式

环境

vip:192.168.13.200

ds:192.168.13.230/24

web01:192.168.13.231/24

web02:192.168.23.232/24

Director服务器配置
1. 安装 ipvsadm
 apt update
 apt install -y ipvsadm
2. 加载ipip内核模块
 echo "ipip" | sudo tee /etc/modules-load.d/ipip.conf
 modprobe ipip
2. 网络配置
 network:
   version: 2
   renderer: networkd
   ethernets:
     eth0:
       addresses:
         - 192.168.13.230/24
         - 192.168.13.200/24 # vip
       routes:
         - to: default
           via: 192.168.13.1    # 替换为你的网关
       nameservers:
         addresses: [8.8.8.8, 114.114.114.114]

3. 开启ip转发
 # 开启IP转发(持久化)
 tee /etc/sysctl.d/99-lvs.conf << 'EOF'
 net.ipv4.ip_forward = 1
 net.ipv4.conf.all.send_redirects = 0
 net.ipv4.conf.default.send_redirects = 0
 net.ipv4.conf.eth0.send_redirects = 0  # 替换eth0为你的外网接口名
 EOF
 ​
 # 应用配置
 sysctl -p /etc/sysctl.d/99-lvs.conf
4. 创建 LVS 虚拟服务(DR 模式)
 # 清空旧规则
 ipvsadm -C
 ​
 # 添加虚拟服务(VIP: 192.168.13.200:80,轮询)
 ipvsadm -A -t 192.168.13.200:80 -s rr
 ​
 # 添加 Real Server(TUN 模式用 -i)
 ipvsadm -a -t 192.168.13.200:80 -r 192.168.13.231:80 -i
 ​
 # 保存规则(持久化)
 ipvsadm-save > /etc/ipvsadm.conf
5. 设置开机自动加载 LVS 规则
 echo '#!/bin/bash
 ipvsadm-restore < /etc/ipvsadm.conf' | sudo tee /etc/network/if-up.d/lvs-tun
 chmod +x /etc/network/if-up.d/lvs-tun
Real Server 配置
1. 加载 IPIP 模块(持久化)
 echo "ipip" | sudo tee /etc/modules-load.d/ipip.conf
 modprobe ipip
2. 配置 Netplan
 # /etc/netplan/50-cloud-init.yaml
 network:
   version: 2
   renderer: networkd
   ethernets:
     eth0:
       addresses:
         - 192.168.13.231/24
       routes:
         - to: default
           via: 192.168.13.1    # 替换为你的网关
       nameservers:
         addresses: [8.8.8.8, 114.114.114.114]
3. 启用 tunl0 接口并绑定 VIP(持久化)

Ubuntu 默认不启用 tunl0,需通过 systemd-networkd 启用:

 # 创建 systemd unit 文件
 vim /etc/systemd/system/tunl0.service
 [Unit]
 Description=Setup tunl0 for LVS TUN mode
 After=network.target
 ​
 [Service]
 Type=oneshot
 ExecStart=/bin/sh -c "ip tunnel add tunl0 mode ipip && ip link set tunl0 up && ip addr add 192.168.13.200/32 dev tunl0"
 RemainAfterExit=yes
 ​
 [Install]
 WantedBy=multi-user.target
 ​
 ​
 # 启用服务
 systemctl daemon-reexec
 systemctl enable --now tunl0.service
4. 配置 ARP 抑制(关键!)

防止 RS 对 VIP 响应 ARP(虽然 VIP 在 tunl0,但安全起见仍建议设置):

 cat <<EOF | sudo tee /etc/sysctl.d/90-lvs-tun.conf
 net.ipv4.conf.all.arp_ignore = 1
 net.ipv4.conf.all.arp_announce = 2
 EOF
 ​
 sysctl --system

验证测试

lvs的调度算法

LVS的调度算法分为静态与动态两类。

静态算法(4种)

只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况

1、RR:轮询调度(Round Robin)

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

2、WRR:加权轮询(Weight RR)

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

3、DH:目标地址散列调度(Destination Hash )

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

4、SH:源地址 hash(Source Hash)

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

动态算法(6种)

前端的调度器会根据后端真实服务器的实际连接情况来分配请求

1、LC:最少链接(Least Connections)

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

2、WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)

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

3、SED:最短期望延迟调度(Shortest Expected Delay )

  在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。

4、NQ:永不排队/最少队列调度(Never Queue Scheduling NQ)

  无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。

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地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

动物装饰