ADC

配置 Diameter 负载平衡

Diameter 协议是下一代身份验证、授权和记账 (AAA) 信号协议,主要用于笔记本电脑和手机等移动设备。它是一种点对点协议,与大多数其他协议使用的传统客户端-服务器模式相反。但是,在大多数 Diameter 部署中,客户端发起请求,服务器响应请求。

在交换 Diameter 消息时,Diameter 服务器执行的处理量通常比 Diameter 客户端多得多。随着控制平面信令量的增加,Diameter 服务器成为瓶颈。因此,Diameter 消息必须对多台服务器进行负载平衡。对 Diameter 消息执行负载平衡的虚拟服务器具有以下好处:

  • Diameter 服务器的负载较轻,这意味着对最终用户的响应时间更短。
  • 服务器运行状况监视和更好的故障转移功能。
  • 无需更改客户端配置,在添加服务器方面具有更好的可扩展性。
  • High availability(高可用性)。
  • Diameter 为 SSL 的卸载。

下图显示了 Citrix ADC 部署中的 Diameter 系统:

diameter-system

Diameter 系统包含以下组件:

  • Diameter 客户端。除了基本协议外,还支持 Diameter 客户端应用程序。Diameter 客户端通常在网络边缘的设备中实现,并为该网络提供访问控制服务。Diameter 客户端的典型示例是网络访问服务器 (NAS) 和移动 IP 外部代理 (FA)。
  • Diameter 代理。提供中继、代理、重定向或翻译服务。Citrix ADC 设备(配置有 Diameter 负载平衡虚拟服务器)扮演 Diameter 代理的角色。
  • Diameter 服务器。处理特定领域的身份验证、授权和记账请求。除了基本协议外,Diameter 服务器还必须支持 Diameter 服务器应用程序。

在典型的 Diameter 拓扑中,当最终用户设备(例如手机)需要服务时,它会向 Diameter 客户端发送请求。每个 Diameter 客户端都与 Diameter 基本协议 RFC 6733 指定的 Diameter 服务器建立单一连接(TCP 连接——尚不支持 SCTP 连接)。该连接持续时间很长,两个 Diameter 节点(客户端和服务器)之间的所有消息都通过此连接进行交换。Citrix ADC 使用基于消息的负载平衡。

示例:

一家移动服务提供商使用Diameter作为其计费系统。当订阅者使用预付费号码时,Diameter 客户端会反复向服务器发送请求以检查可用余额。Diameter 协议在客户端和服务器之间建立连接,所有请求都通过该连接交换。基于连接的负载平衡毫无意义,因为只有一个连接。但是,由于连接上有大量消息,基于消息的负载平衡可以加快向预付费移动订户计费的过程。

Diameter 负载平衡的工作原理

Diameter 客户端打开与 NetScaler 设备的连接并发送 Diameter 功能交换请求 (CER) 消息。NetScaler 选择 Diameter 服务器,打开与服务器的连接,然后将 CER 消息转发给服务器。服务器读取客户机身份并确定其是否直接连接到客户端。

Diameter 服务器准备 Diameter 握手回复并将其发送到 NetScaler 设备。设备修改握手并插入自己的身份。此时,Diameter 客户端确定它已直接连接到 NetScaler(代理)。

注意:

在Diameter握手完成之前,来自客户端的所有 Diameter 请求消息都会在选定的服务器上排队。握手完成后,数据包将转发到服务器。

负载平衡 Diameter 流量

当客户端向 Citrix ADC 设备发送请求时,设备会解析该请求,然后根据持久 AVP 将其负载平衡到 Diameter 服务器。设备已将客户端标识公告到服务器,因此它不添加路由条目,因为服务器直接从客户端收到消息。

服务器发起的请求不像客户端请求那样频繁。服务器发起的请求与客户端发起的请求类似,除了:

  • 由于消息是从多台服务器接收的,因此设备通过向每条转发的请求消息添加一个唯一的 Hop by Hop (HbyH) 编号来保持事务状态。当消息响应到达(具有相同的 HbyH 编号)时,设备会将此 HbyH 编号转换为请求到达时在服务器上收到的 HbyH 编号。
  • Citrix ADC 设备通过输入其身份来添加路由条目,因为客户端将设备视为中继代理。

注意:如果 Diameter 消息跨越多个数据包,则设备会将数据包累积在不完整的标头队列中,并在累积完整消息时将其转发到服务器。同样,如果单个数据包包含多条 Diameter 消息,则设备会拆分该数据包并将消息转发到由负载平衡虚拟服务器确定的服务器。

与会话断开连接

断开对等方请求 (DPR) 表示对等方打算关闭连接,并说明关闭连接的原因。对等方使用 DPA 进行回复(TCP 总是提供成功的 DPA)。

  • 当 Citrix ADC 设备收到来自客户端的 DPR 时,它会向所有服务器广播 DPR,并立即用 DPA 回复客户端。服务器使用 DPA 进行回复,但设备会忽略它们。客户端发送 FIN,设备将其广播到所有服务器。
  • 当设备从服务器接收 DPR 时,它只会向该服务器回复 DPA,并且不会将服务器从重用池中移除。当服务器发送 FIN 时,设备会回复 FIN/ACK 并从重用池中删除连接。
  • 如果设备收到来自客户端的 FIN,它会向客户端发送 FIN/ACK,广播 FIN,然后立即从重用池中删除服务器连接。
  • 如果设备收到来自服务器的 FIN,它会发送 FIN/ACK 并将其从重用池中删除。此服务器的任何新消息都将在新的连接上发送。

为 Diameter 流量配置负载平衡

要将 Citrix ADC 设备配置为对 Diameter 流量进行负载平衡,必须先在设备上设置 Diameter 参数,然后添加 Diameter 监视器,添加 Diameter 服务,将服务绑定到显示器,添加 Diameter 负载平衡虚拟服务器,并将服务绑定到虚拟服务器。

使用命令行界面为 Diameter 流量配置负载平衡

配置 Diameter 参数。

set ns diameter -identity <string> -realm <string> -serverClosePropagation <YES|NO>
<!--NeedCopy-->

示例:

set ns diameter -identity mydomain.org -realm org -serverClosePropagation YES
<!--NeedCopy-->

添加Diameter 监视器。

add lb monitor <monitorName> DIAMETER -originHost <string> -originRealm <string>
<!--NeedCopy-->

示例:

add lb monitor diameter_mon DIAMETER -originHost mydomain.org -originRealm org
<!--NeedCopy-->

创建 Diameter 服务。

add service <name> <IP> DIAMETER <port>
<!--NeedCopy-->

示例:

add service diameter_svc0 10.102.82.86 DIAMETER 3868

add service diameter_svc1 10.102.82.87 DIAMETER 3868

add service diameter_svc2 10.102.82.88 DIAMETER 3868

add service diameter_svc3 10.102.82.89 DIAMETER 3868
<!--NeedCopy-->

将 Diameter 服务绑定到 Diameter 监视器。

bind service <name>@ monitorName <monitorName>
<!--NeedCopy-->

示例:

bind service diameter_svc0 -monitorName diameter_mon

bind service diameter_svc1 -monitorName diameter_mon

bind service diameter_svc2 -monitorName diameter_mon

bind service diameter_svc3 -monitorName diameter_mon
<!--NeedCopy-->

添加具有 Diameter 持久性的 Diameter 负载平衡虚拟服务器。

add lb vserver <name> DIAMETER <IPAddress> <port> -persistenceType DIAMETER -persistAVPno <positive_integer>
<!--NeedCopy-->

示例:

add lb vserver diameter_vs DIAMETER 10.102.112.152 3868 -persistenceType DIAMETER -persistAVPno 263
<!--NeedCopy-->

将 Diameter 服务绑定到 Diameter 负载平衡虚拟服务器。

bind lb vserver <name> <serviceName>
<!--NeedCopy-->

示例:

bind lb vserver diameter_vs diameter_svc0

bind lb vserver diameter_vs diameter_svc1

bind lb vserver diameter_vs diameter_svc2

bind lb vserver diameter_vs diameter_svc3
<!--NeedCopy-->

保存配置。

save ns config
<!--NeedCopy-->

注意:您还可以使用 SSL_DIAMETER服务类型配置 SSL 上的 Diameter 流量的负载平衡。

使用配置实用程序为 Diameter 流量配置负载平衡

  1. 导航到系统 > 设置 > 更改 Diameter 参数并设置 Diameter 参数。
  2. 导航到“流量管理”>“负载平衡”>“虚拟服务器”,然后创建 Diameter 类型的负载平衡虚拟服务器。
  3. 创建 Diameter 类型的服务。
  4. 创建 Diameter 类型的显示器。在特殊参数中,设置原始主机和原始域。
  5. 将监视器绑定到服务,并将服务绑定到 Diameter 虚拟服务器。
  6. 在高级设置中,单击持久性,指定 Diameter,然后输入持久性 AVP 编号。
  7. 单击 保存,然后单击 完成
配置 Diameter 负载平衡