负载均衡
负载均衡(LB, Load Balance): 增加高并发处理能力,有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着眼点。
负载均衡的主要方式有:
- http 重定向
- DNS 负载均衡
- 反向代理负载均衡
- IP 负载均衡
- 数据链路层负载均衡
- F5 硬件负载均衡
负载均衡产品分类
负载均衡技术类型:基于 4 层负载均衡技术、基于 7 层负载均衡技术
负载均衡实现方式:硬件负载均衡设备、软件负载均衡
硬件负载均衡产品:F5、深信服、Radware、Citrix、Netscaler
软件负载均衡产品:LVS(Linux Virtual Server)、Haproxy、Nginx、Ats(Apache traffic server)
四层负载均衡(基于IP+端口的负载均衡)
所谓四层负载均衡,也就是主要通过报文中的目标ip地址和端口,再加上负载均衡设备设置的服务器选择方式(分发策略,轮询),决定最终选择的内部服务器。
实现四层负载均衡的有:
- F5: 硬件负载均衡器,功能很好,但是成本很高。
- LVS: 重量级的四层负载均衡软件
- haproxy: 模拟四层、七层转发,较灵活
七层的负载均衡(基于虚拟的URL或主机IP的负载均衡)
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
实现七层负载均衡的软件有:
- haproxy: 天生负载均衡技能,全面支持四层,七层代理,会话保持,标记,路径转移;
- nginx: 只在 http 协议和 mail 协议上功能比较好,性能与haproxy差不多;
- apache: 功能较差
- MySQL proxy: 功能尚可
四层负载与七层负载的区别
- | 四层负载 | 七层负载 |
---|---|---|
基于 | IP + Port | Url 或者主机 IP 等 |
类似于 | 路由器 | 代理服务器 |
复杂度 | 低 | 高 |
性能 | 高,无需解析内容 | 中,需要算法识别 URL 和 HTTP head 等信息 |
安全性 | 低 | 高 |
额外功能 | 无 | 会话保持,图片压缩,等 |
总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。
LVS
LVS 介绍
LVS 是 Linux Virtual Server
的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。 现在 LVS 已经是 Linux 标准内核的一部分,因此性能较高。
LVS 软件的作用: 通过 LVS 提供的负载均衡技术实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS 的优势与不足
优势
- 高并发连接: LVS基于内核工作,有超强的承载能力和并发处理能力。单台 LVS 负载均衡器,可支持上万并发连接。
- 稳定性强: 是工作在网络4层之上,仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
- 成本低廉: 硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
- 配置简单: LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
- 支持多种算法: 支持多种论调算法,可根据业务场景灵活调配进行使用
- 支持多种工作模型: 可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
- 应用范围广: 因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括 http、数据库、DNS、ftp服务等等.
不足
工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。
LVS 核心组件和专业术语
核心组件
LVS 的管理工具和内核模块: ipvsadm/ipvs
- ipvsadm: 用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
- ipvs: 工作于内核上的程序,可根据用户定义的集群实现请求转发;
专业术语
术语 | 名词解释 |
---|---|
VS: Virtual Server | 虚拟服务 |
Director,Balance | 负载均衡器,分发器 |
RS: Real Server | 后端处理请求的服务器 |
CIP: Client IP | 用户端 IP |
VIP: Director Virtual IP | 负载均衡器虚拟 IP |
DIP: Director IP | 负载均衡器真实 IP |
RIP: Real Server IP | 后端处理请求的服务器 IP |
LVS 工作内核模型以及工作模式
- 当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。
- 当内核发现请求数据包的目的地址是本机时,将数据包送往 INPUT 链。
- LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
- 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
- 最后经由POSTROUTING链发往后端服务器。
LVS 负载均衡的四种工作模式
- LVS-NAT: 网络地址转换模式,进站和出站的数据流量都要经过分发器(IP负载均衡,它修改的是 IP 地址)
- LVS-DR: 直连路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为它修改的是目的 MAC 地址)
- LVS-TUN: 隧道模式,只有进站的数据流量经过分发器,可以跨越局域网工作;特点是安全,缺点是麻烦;
- LVS-full-nat: 双向转换,通过请求报文的源地址为 DIP,目标为 RIP 来实现转发;
NAT 模式(LVS-NAT)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,转发至此RS来处理, RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的VIP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
优点: 集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。节省公网地址
缺点: 扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
DR 模式(LVS-DR)
原理:负载均衡器和RS都使用同一个IP对外服务。但只有负载均衡器对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给负载均衡器,而负载均衡器收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户端。
优点: 和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与LVS-TUN相比,LVS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点: 要求负载均衡器的网卡必须与物理网卡在一个物理段上。
TUN 模式(LVS-TUN,不常用)
原理: 互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
优点: 负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理海量的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点: 隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
FULL-NAT 模式(双向转换,不常用)
原理: 客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot 对请求报文做full-nat,在包从 DIR 转到 RS 的过程中,源地址从客户端IP被替换成了 LVS 的内网IP。内网IP之间可以通过多个交换机跨VLAN通信。当RS处理完接受到的包,返回时,会将这个包返回给 DIR 的内网IP,这一步也不受限于 VLAN。DIR 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从DIR内网IP改为客户端的 IP。
Full-NAT主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN 的问题。采用这种方式,DIR和RS的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性。
LVS ipvsadm 命令的使用
安装lvs管理软件
使用一下命令安装 ipvsadm
1
yum install -y ipvsadm
- 程序包:ipvsadm(LVS管理工具)
- 主程序:/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
- 配置文件:/etc/sysconfig/ipvsadm-config
命令选项
以下是 ipvsadm 的命令选项说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33-A, --add-server : 在服务器列表中新添加一条新的虚拟服务器记录
-t : 表示为 tcp 服务
-u : 表示为 udp 服务
-s, --scheduler : 使用的调度算法,rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed |
# 例如: ipvsadm -A -t 192.168.200.14: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 的工作模式为直连路由模式(DR),也是 LVS 默认的模式
-i, --ip : 指定 LVS 的工作模式为隧道模式(TUN)
-p : 会话保持时间,定义流量被转到同一个 real server 的会话存留时间
# 例如:ipvsadm -a -t 192.168.200.14:80 -r 192.168.200.15:80 -m -w 1
-E, --edit-service : 编辑内核虚拟服务器表中的一条虚拟服务器记录
-D, --delete-service : 删除内核虚拟服务器表中的一条虚拟服务器记录
-C, --clear : 清空内核虚拟服务器表中的所有记录
-R, --restore : 恢复虚拟服务器规则
-S, --save : 保存虚拟服务器规则到标准输出,输出为 -R 选项可读的格式
-e, --edit-service : 编辑一条虚拟服务器记录中的某条真实服务器记录
-d, --delete-server : 删除一条虚拟服务器记录中的某条真实服务器记录
-L, -l, --list : 显示内核虚拟服务器表
-n, --numeric : 以数字形式输出地址和端口号
--exact : 扩展信息,精确值
-c, --connection : 当前 IPVS 的连接输出
--stats : 统计信息
--rate : 输出速率信息
-Z, --zero : 虚拟服务表计数器清零(清空当前的连接数量等)参数也可以从 /proc/net/ip_vs* 映射文件中查看
LVS 实战(NAT模式)
环境说明
以下是本次实验环境所用虚拟机,后端 RS 服务器处于一个独立的内网,无法访问外网,centos7-2 服务器上安装有两块网卡,一块连接内网,与后端 RS 服务器处于同一网段,一块连接公网,可以直接访问公网
服务器 | IP 地址 | 角色 | 软件 | 描述 |
---|---|---|---|---|
centos7-1 | 192.168.1.13 | client | elinks | 模拟客户端访问服务 |
centos7-2 | 192.168.1.14 | LVS | ipvsadm | 公网地址 |
centos7-2 | 192.168.15.128 | LVS | - | 内部地址,对接后端 Real Server |
centos7-3 | 192.168.15.129 | RS1 | nginx | 后端真实的 web 服务器 |
centos7-4 | 192.168.15.130 | RS2 | nginx | 后端真实的 web 服务器 |
配置 LVS-NAT 模式步骤
配置 RS 服务器
预先在两台 web 服务器上安装 nginx 服务, 并配置页面显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 安装 nginx
yum install -y nginx
# 启动 nginx 并配置 nginx 开机启动
systemctl enable --now nginx
# 配置 web 页面显示,centos7-3 上面执行一下命令
echo web-1 > /usr/share/nginx/html/index.html
# centos7-4 上面执行一下命令
echo web-2 > /usr/share/nginx/html/index.html
# 测试显示是否正常
# curl http://localhost
web-1
# curl http://localhost
web-2完成以上设置后,将 centos7-3 以及 centos7-4 两台服务器的网卡切换为 vmnet2 仅主机模式
两台 realserver 服务器都需要添加路由
1
route add -net 192.168.1.0/24 gw 192.168.15.128
- -net: 外部网络,这里写的时网段
- gw: 出去的网关,这里是负载均衡器的内网地址,表示所有的流量从 192.168.15.128 这个网卡出去
配置 LVS 服务器
先按照以上环境配置,在 centos7-2 服务器上配置两块网卡,一块设置桥接模式,一块连接到 vmnet2 仅主机模式,保持与 centos7-3 以及 centos7-4 在同一个局域网,网络可以互通;
配置内核参数,开启路由转发功能
1
2
3
4
5echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 或者执行以下命令
echo 1 > /proc/sys/net/ipv4/ip_forward安装 ipvsadm 软件
1
yum install -y ipvsadm
添加 ipvs 规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 新增一个虚拟服务器规则表
ipvsadm -A -t 192.168.1.14:80 -s rr
# 将 web 服务器添加到虚拟服务器表中
ipvsadm -a -t 192.168.1.14:80 -r 192.168.15.129:80 -m
ipvsadm -a -t 192.168.1.14:80 -r 192.168.15.130:80 -m
# 查看规则
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.14:80 rr
-> 192.168.15.129:80 Masq 1 0 0
-> 192.168.15.130:80 Masq 1 0 0保存规则到文件,配置 ipvsadm 开机启动
1
2
3
4
5
6
7
8# ipvsadm -S > /etc/sysconfig/ipvsadm-config
# 查看保存的文件
# cat !$
cat /etc/sysconfig/ipvsadm-config
-A -t centos7-02:http -s rr
-a -t centos7-02:http -r 192.168.15.129:http -m -w 1
-a -t centos7-02:http -r 192.168.15.130:http -m -w 1
使用客户端测试 LVS 服务器是否正常
登录 centos7-1 服务器,使用 elinks 命令访问 192.168.1.14 服务器
1
2
3
4
5
6
7
8# elinks --dump http://192.168.1.14
web-2
# elinks --dump http://192.168.1.14
web-1
# elinks --dump http://192.168.1.14
web-2
# elinks --dump http://192.168.1.14
web-1在 LVS 服务器查看状态
1
2
3
4
5
6
7
8
9
10
11
12
13# ipvsadm -Lnc # 查看连接信息
IPVS connection entries
pro expire state source virtual destination
TCP 00:01 TIME_WAIT 192.168.1.13:43942 192.168.1.14:80 192.168.15.129:80
TCP 00:00 TIME_WAIT 192.168.1.13:43940 192.168.1.14:80 192.168.15.130:80
# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.1.14:80 4 24 16 1864 1824
-> 192.168.15.129:80 2 12 8 932 912
-> 192.168.15.130:80 2 12 8 932 912
LVS 实战(DR模式)
环境配置
LVS DR 模式的环境下,LVS 服务器与后端的 RealServer 服务器 IP 地址要处于同一个网段,然后 VIP 必须是同一个网段中未被使用的一个IP 地址,这里使用 192.168.200.17
作为 VIP
服务器 | IP 地址 | 角色 | 软件 | 描述 |
---|---|---|---|---|
centos7-1 | 192.168.200.13 | client | elinks | 模拟客户端访问服务 |
centos7-2 | 192.168.200.14 | LVS | ipvsadm | 负载均衡服务器 |
- | 192.168.200.17 | VIP | - | 同网段的一个未使用的IP地址 |
centos7-3 | 192.168.200.15 | RS1 | nginx | 后端真实的 web 服务器 |
centos7-4 | 192.168.200.16.130 | RS2 | nginx | 后端真实的 web 服务器 |
配置 LVS-DR 模式步骤
Director 分发器配置
配置 VIP,注意 VIP 要与 RIP 配置在同一个网卡上,这里是使用 ens33 的子接口 ens33:0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29# 配置 VIP 到 ens33:0 接口上
ifconfig ens33:0 192.168.200.17 broadcast 192.168.200.255 netmask 255.255.255.0 up
# 添加主机路由信息
route add -host 192.168.200.17 dev ens33:0
# 查看配置好的 IP 以及路由信息
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:35:4c:8e brd ff:ff:ff:ff:ff:ff
inet 192.168.200.14/24 brd 192.168.200.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.200.17/24 brd 192.168.200.255 scope global secondary ens33:0
valid_lft forever preferred_lft forever
inet6 fe80::fe7:5bc2:6628:7a1a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.200.2 0.0.0.0 UG 100 0 0 ens33
192.168.200.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.200.17 0.0.0.0 255.255.255.255 UH 0 0 0 ens33配置服务器内核参数,设置路由转发,以及禁用路由重定向功能
1
2
3
4
5
6
7
8
9
10
11
12# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# sysctl -p
net.ipv4.ip_forward = 1 # 开启路由转发功能
net.ipv4.conf.all.send_redirects = 0 # 禁止转发重定向报文,因为一转发的话IP会变
net.ipv4.conf.ens33.send_redirects = 0 # 禁止 ens33 转发重定向报文
net.ipv4.conf.default.send_redirects = 0 # 禁止转发默认重定向报文安装 ipvsadm 软件,添加 ipvs 转发规则
1
2
3
4
5
6
7# 安装 ipvsadm
yum install -y ipvsadm
# 添加规则
ipvsadm -A -t 192.168.200.17:80 -s rr
ipvsadm -a -t 192.168.200.17:80 -r 192.168.200.15:80 -g
ipvsadm -a -t 192.168.200.17:80 -r 192.168.200.16:80 -g
RS 服务器配置
首先在两个机器上安装 nginx 以及配置首页内容
1
2
3
4
5
6
7
8# 安装 nginx
yum install -y nginx
# 配置首页,DR 模式由于缓存的问题,所以可以两个 web 服务器配置一样的首页内容
echo web > /usr/share/nginx/html/index.html
# 启动 nginx 并配置开机启动
systemctl enable --now nginx配置 VIP,这里将 VIP 配置到 回环网卡 lo 上,并且子网掩码要设置为 32(由于IP冲突,所以需要配置 32 子网用于欺骗系统)
1
2# 配置虚拟 IP
ifconfig lo:0 192.168.200.17/32 broadcast 192.168.200.255 up配置服务器内核
1 | echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # 忽略 arp 广播 |
因为 realServer 的 VIP 已经被 LVS 服务器使用了,接着就是同一个网段中拥有链各个 VIP,客户端在网关发送 ARP 广播需要找 VIP 时需要让 RealServer 不接受响应,解决方法就是配置上面两个参数
使用客户机测试
使用以下命令测试访问 VIP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# elinks --dump http://192.168.200.17
web
# elinks --dump http://192.168.200.17
web
# elinks --dump http://192.168.200.17
web
# elinks --dump http://192.168.200.17
web
# elinks --dump http://192.168.200.17
web
# elinks --dump http://192.168.200.17
web
# elinks --dump http://192.168.200.17
web
# elinks --dump http://192.168.200.17
web在 LVS 服务器上使用以下命令查看连接信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP 00:50 FIN_WAIT 192.168.200.13:50870 192.168.200.17:80 192.168.200.16:80
TCP 00:51 FIN_WAIT 192.168.200.13:50878 192.168.200.17:80 192.168.200.16:80
TCP 00:52 FIN_WAIT 192.168.200.13:50882 192.168.200.17:80 192.168.200.16:80
TCP 00:48 FIN_WAIT 192.168.200.13:50858 192.168.200.17:80 192.168.200.16:80
TCP 00:51 FIN_WAIT 192.168.200.13:50874 192.168.200.17:80 192.168.200.16:80
TCP 00:49 FIN_WAIT 192.168.200.13:50860 192.168.200.17:80 192.168.200.15:80
TCP 00:50 FIN_WAIT 192.168.200.13:50868 192.168.200.17:80 192.168.200.15:80
TCP 00:52 FIN_WAIT 192.168.200.13:50884 192.168.200.17:80 192.168.200.15:80
TCP 00:51 FIN_WAIT 192.168.200.13:50876 192.168.200.17:80 192.168.200.15:80
TCP 00:50 FIN_WAIT 192.168.200.13:50864 192.168.200.17:80 192.168.200.15:80
TCP 00:50 FIN_WAIT 192.168.200.13:50866 192.168.200.17:80 192.168.200.16:80
TCP 00:52 FIN_WAIT 192.168.200.13:50886 192.168.200.17:80 192.168.200.16:80
TCP 00:52 FIN_WAIT 192.168.200.13:50888 192.168.200.17:80 192.168.200.15:80
TCP 00:49 FIN_WAIT 192.168.200.13:50862 192.168.200.17:80 192.168.200.16:80
TCP 00:51 FIN_WAIT 192.168.200.13:50872 192.168.200.17:80 192.168.200.15:80
TCP 00:52 FIN_WAIT 192.168.200.13:50880 192.168.200.17:80 192.168.200.15:80通过以上信息可以看出,客户端 一直访问的是 VIP,但是目标主机是正常分发到不同的 web 服务器上了。
负载均衡算法
常用的负载均衡算法有 :
RR: 轮询调度(Round-Robin),最简单的调度算法,LB按照顺序将请求依次转发给后端的RS,并没有考量后端RS的状态(处理速度以及响应时间)。大部分情况下,RS的性能状态都是各不一致的,这种算法显然无法满足合理利用资源的要求。
WRR: 带权重的轮询调度(Weighted Round-Robin),在轮询算法的基础上加上权重设置,权重越高的RS被分配到的请求越多。适用于按照服务器性能高低,配置不同的权重,以达到合理的资源利用。
LC: 最小连接调度(Least-Connection),把新的请求分配给连接数最少的RS。连接数少说明服务器空闲。
WLC: 带权重的最小连接调度(Weight Least-Connection),在最小连接算法的基础上加上权重设置,这样可以人为地控制请求分配。
DH: 目标地址散列调度(Destination Hashing),也是针对请求报文目标IP地址的负载均衡调度,但它是一种静态映射算法,通过一个散列(hash)函数将一个目标IP地址映射到一台服务器。DH算法先根据请求的目标IP地址,作为散列键(hash key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
SH: 源地址散列调度(Source Hashing),该算法正好与DH调度算法相反,它根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。算法流程与目标地址散列调度算法基本相似,只不过将请求的目标IP地址换成请求的源IP地址。
LBLC: 基于局部性的最小连接调度(Locality-Based Least Connection),针对请求报文目标IP地址的负载均衡调度。目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。
算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率,提升整个集群系统的处理能力。
LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最小连接”的原则选出一个可用的服务器,将请求发送到该服务器。LBLCR: 带复制的基于局部性最小连接调度(Locality-Based Least Connections with Replication),也是针对请求报文目标IP地址的负载均衡调度,与LBLC算法不同之处:LBLC维护一个目标IP到一台服务器的映射,而LBLCR则需要维护一个目标IP到一组服务器的映射。
LBLCR调度算法先根据请求的目标IP地址找到对应的服务器组,按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载,则将请求发送到该服务器;若服务器超载,则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务组中,将请求发送给这台服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。