上一主题: HALB-会话识别且基于 HA 代理的 HTTP 负载均衡器

下一主题: PS8-可扩展的端口交换机

L3LB-TCP/UDP 负载均衡器

最新版本:2.0.2-1

L3LB-TCP/UDP 负载均衡器

概览

目录

系统

类别

交换机

用户卷

no

最小 内存

96M

操作系统

Linux

约束

no

功能概述

L3LB 是一个交换机,用于将传入 TCP/UDP 会话分发给相同或不同类型的服务器。 TCP 负载均衡功能基于 HAProxy TCP/HTTP 负载均衡软件包;UDP 负载均衡基于 Netfilter。

L3LB 使用多种不同的算法对传入流量进行负载均衡。 对于 TCP 流量,L3LB 将执行简单的循环负载均衡,以均衡后端服务器的负载。 对于 TCP,L3LB 还支持持久性会话,通过使用请求源 IP 地址作为密钥,将客户端绑定到特定的后端服务器。 对于 UDP 流量,L3LB 使用循环算法(这是适用于 UDP 流量的唯一算法)。

L3LB 不断地监控所有后端服务器的运行状态。 当处于 TCP 模式时,L3LB 执行的运行状态检查包括一个简单的 TCP 连接检查。 当 L3LB 使用参数化运行状况检查方法检测到服务器故障时,会将流量切换到备用服务器。 如果出现故障的服务器最终得到恢复,L3LB 可以将流量切换回到已恢复的服务器。 对于 UDP 模式,将使用 ICMP PING 来验证后端服务器的可用性。

L3LB 在其 ctl 终端上公开 Web 服务接口。 用户可通过该接口以编程方式启用/禁用输出终端 out1-out8,以及检索所有终端的状态。 当出现某种后端故障(例如:在数据库或存储组件中发生这种故障),应用自身可以自动禁用流向特定服务器集的流量时,此接口将十分有用。 在此情况下,L3LB 自身无法检测这种故障;因此,应该由应用检测故障并禁用相应的后端服务器集。

在设计上,L3LB 的速度极快,占用的资源很少。 在常规条件下,L3LB 对每个会话消耗大约 25 KB 内存,对 40000 个同时会话消耗 1 GB 内存,每秒可处理高达 6000 个请求。

边界

资源

资源

最小值

最大值

默认值

CPU

0.1

16

0.4

内存

96 MB

32 GB

96 MB

带宽

1 Mbps

2 Gbps

250 Mbps

为 L3LB 分配内存量不会提高吞吐量或响应时间。 L3LB 是与 CPU/带宽绑定的组件。

终端

name

dir

协议

说明

in

in

Any

通用输入。 已发送到 in 终端的 TCP 请求将使用循环选项或基于源的会话信息定向到某一个输出。

ctl

in

HTTP

用于启用/禁用输出以及检索输出终端状态的控制终端。

out1-out8

out

Any

均衡的输出。 可将这些输出中的任一输出和所有输出保持未连接状态;流量只会分发到已连接且已启用的输出。 默认情况下会启用所有终端。

mon

out

CCE

用于发送性能和资源使用统计信息。

属性

常规属性

name

类型

说明

mode

字符串

指定运行模式。 有效值是:
tcp_roundrobin-以循环方式在所有已连接并已启用的后端服务器上分发传入的 TCP 会话。
tcp_source-使用 TCP 请求的源 IP 地址将会话绑定到特定的后端服务器。
udp_roundrobin-L3LB 在 UDP 负载均衡模式下运行。
默认值:tcp_roundrobin。

ports

字符串

L3LB 转发到后端服务器的端口和端口范围的空格或逗号分隔列表。 端口范围指定为 lower_port:higher_port,以短划线 (-) 或冒号作为分隔符。 示例:80,81,90-99 110:120 140 141。 未指定的端口上收到的流量将被丢弃。
默认值:80

max_connections

整数

L3LB 可以处理的最大并发活动连接数。 在达到此数目时,仍会接受新连接,但是其处理会延迟,直到另一个连接关闭。 组件启动时,L3LB 会基于可用内存自动确定最大连接数,将其与该属性的值进行比较并使用最小值。 如果该属性为 0,则使用计算的值。 可用内存和该属性的显式设置都不会对均衡器的吞吐量或其最大请求率造成直接影响-仅当后端服务器在为每个请求(例如:数据库搜索)执行冗长操作,导致许多请求同时处于打开状态时,设置较小的值(或分配极少的内存)才会影响响应。 该属性仅对 tcp_roundrobin 和 tcp_source 运行模式有效。
默认值:0

backup_outputs

字符串

被视为备份服务器的输出 (out1-out8) 的空格或逗号分隔列表。 不支持输出范围 (out1-out3)。 仅当所有后端服务器都不可用时,流量才会定向到备份服务器。 这些备份服务器的用途是通知客户端出现问题或者重定向客户端,而不是在后端服务器不可用或超时的情况下引发错误。 示例:out1,out2,out3。 如果为空,则不使用备份服务器。
默认值:""(不使用备份服务器)。

运行状况检查属性

与 ports 属性中指定的第一个端口建立的简单 TCP 连接用于 tcp_roundrobin 和 tcp_source 运行模式。 ICMP ping 始终在 udp_roundrobin 运行模式下使用。

name

类型

说明

healthcheck_interval

Int

执行运行状况检查的时间间隔;指定以秒为单位。 如果该属性为 0,则不执行运行状况检查。
默认值:20

超时属性

这些属性仅对 tcp_roundrobin 和 tcp_source 运行模式有效。

name

类型

说明

client_timeout

Int

建立连接后等待客户端发出请求所用的超时(秒)。
默认值:150。

server_timeout

Int

在建立连接后等待后端服务器回复所用的超时(秒)。
默认值:150。

conn_timeout

Int

在 L3LB 内通过其终端之一建立任何 TCP 连接(包括运行状况检查)所用的超时(秒)。 请注意,当 L3LB 的网络负载过重时,如果该设置值很小,运行状况检查可能无法正确超时(在这种情况下,L3LB 将开始禁用可能会导致意外应用操作的输出)。 建议不要将该属性设置为小于 20 秒的值。
默认值:20。

Web 服务接口属性

name

类型

说明

ctl_port

Int

用于通过 ctl 终端访问 Web 服务控制界面的端口。
默认值:80。

自定义计数器

L3LB 组件通过 mon 终端报告下列自定义计数器。

下列计数器属于 L3LB 计数器组。 X 可以使用 1 - 8 范围内的值。

计数器名称

说明

outX_status

输出终端 outX 的状态:0-已启用并已启动,1-已启用并已关闭,100-已断开连接。

outX_queue

终端 outX 的排队请求数。 处于 udp_roundrobin 模式时不报告该计数器。

outX_queue_max

终端 outX 的同时排队请求的历史最大值。 处于 udp_roundrobin 模式时不报告该计数器。

outX_sessions

终端 outX 的活动会话数。

outX_sessions_max

终端 outX 的同时活动会话的最大数目。

outX_sessions_total

终端 outX 的已完成会话数。 处于 udp_roundrobin 模式时不报告该计数器。

outX_errors

终端 outX 的失败运行状况检查数。

queue

out1-out8 的当前累积队列长度。 处于 udp_roundrobin 模式时不报告该计数器。

queue_max

out1-out8 的同时排队请求累积数的历史最大值。 处于 udp_roundrobin 模式时不报告该计数器。

sessions_active

out1-out8 的活动会话累积数。

sessions_max

out1-out8 活动会话累积数的历史最大值。

sessions_total

out1-out8 的已完成会话累积数。 处于 udp_roundrobin 模式时不报告该计数器。

错误

out1-out8 的失败运行状况检查累积数总计。

性能

请求速率

L3LB 每秒路由的事务数不少于 6000 个(请求/响应对),此速率受文档大小和可用网络带宽的限制。

数据吞吐量

L3LB 以不低于 15 MB/秒的速率路由

并发连接数

L3LB 支持不少于 2000 个并发未决请求。 (未决请求是来自客户端的开放 TCP 连接,其中有一个或多个未完成的 TCP 会话正在进行中)。 最大并发连接数取决于可用内存,可高达 40000 个。 经过测试,L3LB 支持的同时活动传输数超过 15000 个。

错误消息

在组件启动失败的情况下,系统日志可能记录以下错误消息:

错误消息

说明

错误: 无法确定组件内存配置,请联系 CA Technologies 支持。

L3LB 无法检测可用内存量,请联系 CA 支持。

错误: 无法创建 HAProxy 配置文件,请联系 CA Technologies 支持。

L3LB 无法创建 HAProxy 配置文件(可能是因为磁盘空间不足),请联系 CA 支持。

错误: 无法确定可用 CPU 数,请联系 CA Technologies 支持。

L3LB 无法检测可用 CPU 的数量,请联系 CA 支持。

错误: 指定的运行模式无效

指定了无效的模式,模式应该是 tcp_roundrobin、tcp_source 或 udp_roundrobin

错误: ctl_port 值必须介于 1 和 65535 之间。

ctl_port 值必须大于 1 并小于 65535。

错误: 无法启动 L3LB,有关详细信息,请参阅 /var/log/appliance/log 日志文件。

在启动 L3LB 时发生系统错误,请联系 CA 支持。

错误: 无法初始化控制 Web 服务接口,请联系 CA Technologies 支持。

在初始化 ctl 终端上公开的控制 Web 服务接口时发生系统错误,请联系 CA 支持。

错误: 无法初始化统计信息报告,请联系 CA Technologies 支持。

在初始化统计信息报告时发生系统错误,请联系 CA 支持。

错误: 无法初始化用户接口终端,请联系 CA Technologies 支持。

在初始化 ui 终端上公开的图形用户界面时发生系统错误,请联系 CA 支持。

输出终端的程序化控制

概览

控制 Web 服务接口在 ctl 终端(配置的端口)上公开,可用于启用和禁用输出终端 (out1-out8) 并检索当前的终端状态。

协议

该协议仅使用 GET HTTP 方法,因为它仅提供读取功能。 因此,每个支持的协议请求类型都可通过 URI 和输出结构来定义。 不能在 URI 中使用的特殊字符应通过标准 % 编码进行转义。

下面是所有支持的 URI 的说明。

控制调用

禁用输出终端

根据输出终端的标识方式,可以使用两种不同的禁用控制调用格式:

请求:/api/disable?channel=out3(禁用输出终端 out3)

请求:/api/disable?10.11.12.13(禁用连接到 IP 地址为 10.11.12.13 的 Web 服务器的输出终端)

响应:

L3LB 返回以下包含状态代码和可选状态消息的结构:

{
   "status" :
   {
   "code": code_value,
   "message": "status_message"
   }
}

下面列出了可能的状态代码值:

代码值

说明

0

操作成功,已禁用终端。

10

操作不成功,L3LB 配置未修改。 最可能的原因是终端已禁用,或者指定的 IP 地址无效。

100

处理请求时发生错误,状态消息中提供了更多详细信息。

启用输出终端

根据输出终端的标识方式,可以使用两种不同的启用控制调用格式:

请求:/api/enable?channel=out3(启用输出终端 out3)

请求:/api/enable?10.11.12.13(启用连接到 IP 地址为 10.11.12.13 的 Web 服务器的输出终端)

响应:

L3LB 返回以下包含状态代码和可选状态消息的结构:

{
   "status" :
   {
   "code": code_value,
   "message": "status_message"
   }
}

下面列出了可能的状态代码值:

代码值

说明

0

操作成功,已启用终端。

10

操作不成功,L3LB 配置未修改。 最可能的原因是终端已启用,或者指定的 IP 地址无效。

100

处理请求时发生错误,状态消息中提供了更多详细信息。

检索输出终端状态

请求:/api/status(返回所有输出终端的状态)

响应:

L3LB 返回以下包含状态代码和可选状态消息的结构:

{
   "status" :
   {
   "code": code_value,
   "message": "status_message",
   "terminal_id": "terminal_state",
   "terminal_id": "terminal_state",
   ...
   }
}

只返回所有已连接终端的状态;不报告已禁用和已断开连接终端的状态。

下面列出了可能的状态代码值:

代码值

说明

0

操作成功。

100

处理请求时发生错误,状态消息中提供了更多详细信息。

可能的终端值为 out1-out8。

可能的状态值为:

状态值

说明

up

终端已连接并处于活动状态。

down

终端处于非活动状态。 连接到该终端的 Web 服务器已关闭,或者 L3LB 运行状况检查失败。

示例状态输出:

{
   "status" :
   {
   "code": 0,
   "message": "",
   "out1": "up",
   "out2": "up",
   "out3": "down",
   "out4": "up"   

}

典型用法

负载均衡 Webmail 群集

电子邮件现今已经成为业务流程的重要组成部分,因此 Webmail 群集必须每天 24 小时、每周 7 天可用。 以下示例说明如何同时使用 HALB 和 L3LB 来实现负载均衡及提高 Webmail 和 SMTP 服务器的可用性。 在出现故障的情况下,服务器可以通过 ctl 接口禁用 HALB 或 L3LB 的输出。 此情况下将使用 L3LB tcp_roundrobin 模式。

如何同时使用 HALB 和 L3LB 来实现负载均衡及提高 Webmail 和 SMTP 服务器的可用性

负载均衡应用服务器

在当今的网站中,只提供静态内容的极少。 通常,很多服务器端处理都是在服务器端发生的。 该示例图展示了从 Web 服务器群集到许多应用服务器的负载均衡无中断访问;本例中使用了 Apache Tomcat。 tcp_source 运行模式有助于确保支持在 Web 服务器与应用服务器之间正常发生会话。

负载均衡应用服务器

负载均衡 IP 语音服务

通用 IP 语音协议使用 UDP 作为主协议;对这种流量进行负载均衡是实现 VoIP 群集轻松调整的关键任务。 本例使用了 udp_roundrobin 运行模式。

负载均衡 IP 语音服务

说明

组件内所用的开源和第三方软件

L3LB 除了使用其基类 LUX5 所用的第三方开源软件包之外,还使用下列第三方/开源软件包。

软件

版本

已修改

许可

说明

haproxy

1.2.18

GPLv2

主页

libxml2

2.6.26

MIT

N/A

php-thttpd

2.25b

BSD

N/A

libipt_statistic

1.3.5-1.2.1

GPLv2

主页

iptables

1.3.5-1.2.1

GPLv2

主页

实现设计

基类

LUX5 组件映像用作 L3LB 组件的基类。

类卷

无需调整磁盘大小,L3LB 使用的是为 LUX5 基类定义的默认值。

L3LB 目录的内容

L3LB 软件安装在 /appliance 子树下。

udp 运行模式的 udp_healthchecker.pl 运行状况检查脚本。

软件包

已安装下列标准软件包(来自官方镜像):

此外,还安装了下列自定义软件包(包括源代码)。

版本目录的内容:

导出的组件映像:

源代码:

测试(参见测试计划 CatSwitchesL3LBTp 和版本说明 CatSwitchesL3LBRelNotes):

l3lb-24-test.1.0.0.tar.bz2-CA 3Tera AppLogic 2.4 的测试脚本

工作原理

L3LB 使用单个后台服务-HAProxy TCP/HTTP 负载均衡器 (http://haproxy.1wt.eu)。 为了实现 tcp 负载均衡,只启用了 TCP 运行模式。

haproxy.cfg 配置文件中定义了许多侦听程序和后端,该文件是在组件启动时由 appliance.sh 脚本使用配置的属性值创建的。 为 in 终端创建了一个侦听程序,用于侦听需要负载均衡的所有传入网络流量。 在 ui 接口上创建了另一个侦听程序,用于将统计信息 GUI 导出到用户。 另外,在内部环回接口 lo0 上也创建了一个侦听程序,用于通过 mon 终端提取运行时统计信息并生成报告。 每个连接的 outX 终端定义为可在其上转发传入流量的后端。

in 终端上的侦听程序接收 HTTP 请求,并根据运行模式,以 passive、insert 和 sync 模式修改 Cookie。 然后,将请求转发到后端服务器之一。 如果该请求存在现有会话,则会将该请求转发到先前所有请求所转发到的同一后端服务器。 如果该请求没有现有会话,则按循环方式选择后端服务器。 来自服务器的响应再次可能被修改并转发回到客户端。

配置

HAProxy 的配置文件是在启动时由 appliance.sh 初始化脚本生成的。 它使用 /etc/applogic.sh 中定义的属性,并使用这些属性来创建 /appliance/haproxy.cfg 配置文件。 在启动时计算的许多其他属性都将写入到该配置文件(ulimit-n、nbproc、绑定地址)。

日志文件

请求日志记录在 L3LB 中已禁用,只有严重错误才在系统日志中报告(除此之外不进行日志记录)。

说明

组件内所用的开源软件和第三方软件

L3LB 除了使用其基类 LUX5 所用的第三方开源软件包之外,还使用下列第三方开源软件包。

软件

版本

已修改

许可

说明

haproxy

1.4.9

GPLv2

主页

php-thttpd

2.25b

BSD

N/A

libipt_statistic

1.3.5-1.2.1

GPLv2

主页

iptables

1.3.5-5.3.el5_4

GPLv2

主页