ADC

哈希方法

基于某些连接信息的哈希值或标头信息的负载平衡方法构成了 NetScaler 设备的大部分负载平衡方法。哈希比它们基于的信息更短,更易于使用,同时保留足够的信息,以确保没有两个不同的信息生成相同的哈希,因此彼此混淆。

您可以在缓存提供来自 Internet 或指定源服务器的大量内容的环境中使用哈希负载平衡方法。缓存请求可减少请求和响应延迟,并确保更好的资源 (CPU) 利用率,使缓存在大量使用的网站和应用程序服务器上受欢迎。由于这些站点也受益于负载平衡,因此散列负载平衡方法非常有用。

NetScaler 设备提供以下哈希方法:

  • URL 哈希方法
  • 域名哈希方法
  • 目标 IP 哈希方法
  • 源 IP 哈希方法
  • 源 IP 目标 IP 哈希方法
  • 源 IP 源端口哈希方法
  • 呼叫 ID 哈希方法
  • 令牌方法

大多数哈希算法计算两个哈希值:

  • 服务的 IP 地址和端口的哈希值。
  • 传入 URL、域名、源 IP 地址、目标 IP 地址或源和目标 IP 地址的哈希值,具体取决于配置的哈希方法。

然后,NetScaler 设备使用这两个哈希值生成新的哈希值。最后,它将请求转发给具有最高哈希值的服务。当设备为每个请求计算哈希值并选择处理请求的服务时,它会填充缓存。具有相同哈希值的后续请求将发送到同一服务。以下流程图说明了此过程。

注意

从 NetScaler 版本 13.0 版本 79.x 开始,支持 Prime Re-Shuffled Assisted CARP (PRAC) 和 Jump table 辅助环形哈希 (JARH) 一致的哈希算法。一致的哈希算法可确保将服务添加到负载平衡设置或从负载平衡设置中删除服务时,或在负载平衡设置中的服务翻转事件期间的中断降至最低。有关更多详细信息,请参阅 一致哈希算法

图 1. 哈希方法如何分发请求

哈希方法如何分配请求

哈希方法可应用于 IPv4 和 IPv6 地址。

假设三个服务(Service-HTTP-1、service-HTTP-2 和 service-HTTP-3)绑定到虚拟服务器,配置了任何哈希方法,哈希值为 Hash1。当配置的服务启动时,请求将发送到 service-HTTP-1。如果 Service-HTTP-1 关闭,NetScaler 设备将计算服务数量的最后一条日志的哈希值。然后,设备选择哈希值最高的服务,例如 service-HTTP-2。下图说明了这个过程。

图 2. 散列方法的实体模型

哈希模型

注意

如果 NetScaler 设备无法使用哈希方法选择服务,则默认使用最小连接方法为传入请求选择服务。通过在低流量期间删除服务来调整服务器池,以便在不影响负载平衡设置的性能的情况下重新填充缓存。

一致的哈希算法

一致的哈希算法用于实现无状态持久性。基于哈希的 LB 方法使用以下三种一致的哈希算法之一:

  • 缓存阵列路由协议 (CARP)

    CARP 算法用于跨多个代理缓存服务器对 HTTP 请求进行负载平衡。默认情况下启用此算法。

  • Prime 重新洗牌辅助 CARP(PRAC)

    NetScaler 设备使用专有的 PRAC 算法来提供统一的流量分配。

  • 跳表辅助环哈希(JARH)

    NetScaler 设备使用专有的 JARH 算法来提供流量的一致性和均匀分布。该算法使用哈希手指。越多的手指可以更好地分配流量。但是,增加手指数也会增加内存使用量。

使用 CLI 选择一致的哈希算法

set lb parameter [-lbHashAlgorithm [DEFAULT|JARH|PRAC] [-lbHashFingers <positive_integer>]
<!--NeedCopy-->

示例:

set lb parameter -lbHashAlgorithm JARH -lbHashFingers 10
<!--NeedCopy-->

参数:

  • lbhashAlfalde-指定用于以下基于哈希的负载平衡方法的哈希算法:

    • URL 哈希方法
    • 域名哈希方法
    • 目标 IP 哈希方法
    • 源 IP 哈希方法
    • 源 IP 目标 IP 哈希方法
    • 源 IP 源端口哈希方法
    • 呼叫 ID 哈希方法
    • 令牌方法

    可能的值:默认值、PRAC、JARH 默认值:默认

  • lbhashFfinger-为基于哈希的 LB 方法指定在 PRAC 和 JARH 算法中使用的手指数。增加手指数可以在牺牲额外内存的情况下更好地分配流量。

    默认值:256 最小值:1 最大值:1024

使用 GUI 选择一致的哈希算法

  1. 导航到流量管理 > 负载平衡 > 更改负载平衡参数
  2. 配置负载平衡参数 窗格中,根据您的要求为以下字段输入适当的值:

    • LB 哈希手指
    • LB 哈希算法 字段中,从下拉菜单中选择一致的哈希算法。

    LB 哈希算法

URL 哈希方法

当您将 NetScaler 设备配置为使用 URL 哈希方法对服务进行负载平衡时,设备会生成传入请求中存在的 HTTP URL 的哈希值。如果通过哈希值选择的服务为 DOWN,则该算法有一种从活动服务列表中选择其他服务的方法。设备会缓存 URL 的哈希值,当它接收到使用相同 URL 的后续请求时,会将这些请求转发到同一个服务。如果设备无法解析传入的请求,它将使用循环方法来进行负载平衡,而不是 URL 哈希方法。

为了生成哈希值,设备使用特定的算法并考虑 URL 的一部分。默认情况下,设备会考虑 URL 的前 80 字节。如果 URL 小于 80 字节,则使用完整的 URL。您可以指定不同的长度。哈希长度可以是 1 字节到 4096 个字节。一般来说,如果在只有少数字符不同的情况下使用长 URL,那么最好尽可能高的哈希长度,以确保更均匀的负载分配。

考虑以下情况:三个服务(Service-HTTP-1、Service-HTTP-2 和 Service-HTTP-3)绑定到虚拟服务器,并且在虚拟服务器上配置的负载平衡方法是 URL 哈希方法。虚拟服务器收到请求,URL 的哈希值为 U1。设备选择Service-HTTP-1。如果 Service-HTTP-1 为“关闭”,则设备选择“Service-HTTP-2”。

下图说明了这个过程。

图 3. URL 哈希是如何运作的

网格哈希

如果Service-HTTP-1 和 SService-HTTP-2 都处于关闭状态,则设备会将哈希值为 U1 的请求发送到 SERVIC-HTTP-3。

如果 Service-HTTP-1 和 Service-HTTP-2 关闭,则生成哈希 URL1 的请求将发送到 Service-HTTP-3。如果这些服务已启动,则生成哈希 URL 1 的请求将按以下方式分配:

  • 如果 Service-HTTP-2 已启动,请求将发送到 Service-HTTP-2。
  • 如果 service-HTTP-1 已启动,则请求将发送到 service-HTTP-1。
  • 如果 Service-HTTP-1 和 Service-HTTP-2 同时启动,请求将发送到 Service-HTTP-1.。

要配置 URL 哈希方法,请参阅 配置不包含策略的负载平衡方法。选择负载平衡方法作为 URL Hash,并将哈希长度设置为用于生成哈希值的字节数。

域名哈希方法

配置为使用域哈希方法的负载平衡虚拟服务器使用 HTTP 请求中域名的哈希值来选择服务。域名取自 HTTP 请求的传入 URL 或 Host 标头。如果域名同时出现在 URL 和主机标头中,则设备会优先选择 URL。

如果您配置域名哈希,并且传入的 HTTP 请求不包含域名,则 NetScaler 设备将默认使用该请求的循环方法。

哈希值计算使用名称长度或哈希长度值,以较小者为准。默认情况下,NetScaler 设备根据域名的前 80 字节计算哈希值。要在计算哈希值时指定域名中不同的字节数,可以将 HashLength 参数(配置实用程序中的哈希长度)设置为从 1 到 4096(字节)的值。

要配置域哈希方法,请参阅 配置不包含策略的负载平衡方法

目标 IP 哈希方法

配置为使用目标 IP 哈希方法的负载平衡虚拟服务器使用目标 IP 地址的哈希值来选择服务器。您可以屏蔽目标 IP 地址以指定在哈希值计算中使用该地址的哪一部分,这样来自不同网络但发往同一子网的请求都定向到同一台服务器。此方法支持基于 IPv4 和 IPv6 的目标服务器。

这种负载平衡方法适用于缓存重定向功能。

要为 IPv4 目标服务器配置目标 IP 哈希方法,请设置 NetMask 参数。要为 IPv6 目标服务器配置此方法,请使用 v6netMaskLen 参数。在配置实用程序中,选择 目标 IP 哈希方法时,将显示用于设置这些参数的文本框。

要配置目标 IP 哈希方法,请参阅 配置不包含策略的负载平衡方法

源 IP 哈希方法

配置为使用源 IP 哈希方法的负载平衡虚拟服务器使用客户端 IPv4 或 IPv6 地址的哈希值来选择服务。要将属于特定网络的源 IP 地址的所有请求引导到特定目标服务器,必须掩盖源 IP 地址。对于 IPv4 地址,请使用网络掩码参数。对于 IPv6 地址,请使用 v6NetMaskLength 参数。

要配置源 IP 哈希方法,请参阅 配置不包含策略的负载平衡方法

源 IP 目标 IP 哈希方法

配置为使用源 IP 目标 IP 哈希方法的负载平衡虚拟服务器使用源和目标 IP 地址的哈希值(IPv4 或 IPv6)来选择服务。哈希是对称的。无论来源 IP 和目标 IP 的顺序如何,哈希值都是相同的。这可确保从特定客户端流向同一目标的所有数据包都定向到同一服务器。

要将属于特定网络的所有请求引导到特定目标服务器,必须掩盖源 IP 地址。对于 IPv4 地址,请使用网络掩码参数。对于 IPv6 地址,请使用 v6NetMaskLength 参数。

要配置源 IP 目标 IP 哈希方法,请参阅 配置不包含策略的负载平衡方法

源 IP 源端口哈希方法

配置为使用源 IP 源端口哈希方法的负载平衡虚拟服务器使用源 IP(IPv4 或 IPv6)的哈希值和源端口来选择服务。这可确保将特定连接上的所有数据包定向到同一服务。

此方法用于连接镜像和防火墙负载平衡。有关连接镜像的更多信息,请参阅 连接故障转移

要将属于特定网络的所有请求引导到特定目标服务器,必须掩盖源 IP 地址。对于 IPv4 地址,请使用网络掩码参数。对于 IPv6 地址,请使用 v6NetMaskLength 参数。

要配置源 IP 源端口哈希方法,请参阅 配置不包含策略的负载平衡方法

呼叫 ID 哈希方法

配置为使用呼叫 ID 哈希方法的负载平衡虚拟服务器使用 SIP 标头中呼叫 ID 的哈希值来选择服务。因此,特定 SIP 会话的数据包始终定向到同一个代理服务器。

此方法适用于 SIP 负载平衡。有关 SIP 负载平衡的更多信息,请参阅 监视 SIP 服务

要配置呼叫 ID 哈希方法,请参阅 配置不包含策略的负载平衡方法

哈希方法