ADC

使用 DNS SRV 记录发现服务

SRV 记录(服务记录)是域名系统中的数据规范,用于定义位置,即指定服务的服务器的主机名和端口号。该记录还定义了每台服务器的权重和优先级。

SRV 记录的示例:

_http._tcp.example.com. 100 IN SRV 10 60 5060 a.example.com.

下表描述 SRV 记录中的每个项目:

SRV 发现记录示例

您可以使用 DNS SRV 记录发现服务端点。Citrix ADC 设备配置为使用与服务关联的 SRV 记录定期查询 DNS 服务器。接收 SRV 记录后,在 SRV 记录中发布的每台目标主机都绑定到与该服务关联的服务组。每个绑定都继承来自 SRV 记录的端口、优先级和权重。对于每个服务部署,用户在启动 Citrix ADC 设备时都必须对其进行一次配置,从而使其成为应用程序的单点触控部署。

重要: 无法使用 CLI 或 GUI 修改动态学习的服务组成员的权重。

用例:负载平衡微服务

应用程序正在从单片架构转向微服务架构。迁移到微服务架构以及后端服务器 AutoScale 解决方案,使应用程序部署变得更加动态。为了支持这种动态部署,代理或 ADC 必须能够动态检测后端应用程序或服务实例并将它们吸收到代理配置中。 使用 DNS SRV 记录的服务发现功能有助于在这种动态部署场景中配置 Citrix ADC 设备。应用程序开发人员可以使用某些业务流程平台来部署应用程序。在应用程序部署期间实例化容器时,编排平台可能不会为这些容器中的每个容器分配特定于协议的标准端口。在这种情况下,发现端口信息将成为配置 Citrix ADC 设备的关键。在这种情况下,SRV 记录很有用。诸如优先级和权重之类的 SRV 记录参数可用于更好地平衡应用程序的负载。

  • 优先级参数可用于规定服务器池的优先级。
  • 权重参数可用于规定后端服务实例的容量,因此可用于加权负载平衡。
  • 每当后端服务器池发生变化时,例如从池中删除一个后端实例,只有在所有现有客户端连接都得到遵守之后,才会顺利地删除该实例。

注意:

  • 基于 A/AAAA 记录的服务发现,所有解析的 IP 地址都具有相同的权重,因为您为要解析的域分配了权重。

  • 如果 SRV 响应中的权重大于 100,则不会创建服务。

使用 SRV 记录进行基于优先级的负载平衡

您可以使用 SRV 记录来执行基于优先级的负载平衡。基于优先级的服务器池可以作为备份虚拟服务器的替代方案。与备份虚拟服务器相比,ns.conf 文件需要最少的配置。

在使用 SRV 记录的基于优先级的负载平衡中,将为每个服务器池分配一个优先级编号。最少的数字具有最高优先级。根据服务器的运行状况和可用性,选择优先级最高池中的一个服务器进行负载平衡。如果优先级最高的服务器池中的所有服务器都已关闭,则选择优先级次高的服务器进行负载平衡。但是,如果优先级最高的服务器池中的服务器再次启动,则会再次从最高优先级池中选择服务器。

从一个优先级服务器池切换到另一个服务器池会流失现有的客户端事务,这很顺利。因此,当前客户端看不到应用程序访问的任何中断。

使用 CLI 启用查询 SRV 记录

执行以下任务以启用对 SRV 记录的查询:

  1. 通过将查询类型参数指定为 SRV 来创建服务器。

    在命令提示符下,键入:

    add server <name> <domain> [-queryType <queryType>])
    <!--NeedCopy-->
    

    示例:

    add server web_serv example.com -queryType SRV
    <!--NeedCopy-->
    

    注意:

    • 默认情况下,发送 IPv4 查询。要发送 IPv6 查询,必须启用 IPv6 域。
    • SRV 目标域名不得超过 127 个字符。
  2. 创建一个以 DNS 为 AutoScale 模式的服务组。

    在命令提示符下,键入:

    add serviceGroup <serviceGroupName> <serviceType> [-autoScale <autoScale>]
    <!--NeedCopy-->
    

    示例:

    add servicegroup svc_grp_1 http -autoscale dns
    <!--NeedCopy-->
    
  3. 将步骤 1 中创建的服务器作为成员绑定到服务组。

    在命令提示符下,键入:

    bind serviceGroup <serviceGroupName> <serverName>
    <!--NeedCopy-->
    

    示例:

    bind servicegroup svc_grp_1 web_serv
    <!--NeedCopy-->
    

注意:

  • 将服务器绑定到服务组成员时,不必输入 SRV 服务器类型的端口号。如果您为 SRV 服务器类型指定端口号,则会出现错误消息。

  • 在将服务器绑定到服务组时,您可以选择指定名称服务器和 TTL 值。

使用 GUI 启用查询 SRV 记录

创建服务器

  1. 导航至“流量管理”>“负载平衡”>“服务器”,然后单击“添加”。

  2. 创建服务器页面中,选择域名。

  3. 输入所有必需参数的详细信息。

  4. 查询类型中,选择 SRV

  5. 单击创建

以 DNS 为 AutoScale 模式创建服务组

  1. 导航到“流量管理”>“负载平衡”>“服务组”。

  2. 负载平衡服务组 页面中,输入所有必需参数的详细信息。

  3. AutoScale 模式下,选择 DNS

  4. 单击确定

将服务器绑定到服务组成员

  1. 导航到“流量管理”>“负载平衡”>“服务组”。

  2. 在“服务组”页面中,选择已创建的服务组,然后单击 编辑

  3. 负载平衡服务组 页面中,单击 服务组成员

  4. 在“服务组成员绑定”页中,选择已创建的服务器,然后单击“关闭”。

注意:

  • 绑定时,不必输入 SRV 服务器类型的端口号。如果您输入 SRV 服务器类型的端口号,则会出现错误消息。

  • 在将服务器绑定到服务组时,您可以选择指定名称服务器和 TTL 值。

覆盖 TTL 值

Citrix ADC 设备配置为在应用程序启动期间定期向 DNS 服务器查询与应用程序关联的 SRV 记录中的任何更新。默认情况下,此查询的周期取决于 SRV 记录中发布的 TTL。在微服务或云世界应用程序中,部署的变化更加动态。因此,代理必须更快地吸收对应用程序部署的任何更改。因此,建议用户将基于域的服务 TTL 参数显式设置为低于 SRV 记录 TTL 且最适合您的部署的值。您可以通过两种方法覆盖 TTL 值:

  • 将成员绑定到服务组时
  • 使用 set lb 参数命令全局设置 TTL 值。

如果 TTL 值是在绑定服务组成员和全局绑定时配置的,那么在绑定服务组成员时指定的 TTL 值将优先使用。 如果绑定服务组成员时或在全局级别均未指定 TTL 值,则星展银行监视时间间隔将从 DNS 响应中的 TTL 值派生出来。

使用 CLI 覆盖 TTL 值

  • 要在绑定时覆盖 TTL 值,请在命令提示符下键入:

     bind serviceGroup <serviceGroupName> (<serverName> [-dbsTTL <secs>])
     <!--NeedCopy-->
    

    示例:

     bind servicegroup svc_grp_1 web_serv -dbsTTL 10
     <!--NeedCopy-->
    
  • 要全局覆盖 TTL 值,请在命令提示符下键入:

     set lb parameter [-dbsTTL <secs>]
     <!--NeedCopy-->
    

    示例:

     set lb parameter -dbsTTL 15
     <!--NeedCopy-->
    

使用图形用户界面覆盖 TTL 值

要在绑定时覆盖 TTL 值,请执行以下操作:

  1. 导航到“流量管理”>“负载平衡”>“服务组”。

  2. 在“服务组”页面中,选择已创建的服务组,然后单击 编辑

  3. 负载平衡服务组 页面中,单击 服务组成员

  4. 在“服务组成员绑定”页面中,选择已创建的服务器,然后单击“编辑”。

  5. 基于域的服务 TTL中,输入 TTL 值。

要在全局级别覆盖 TTL 值,请执行以下操作:

  1. 导航到 流量管理 > 负载平衡 > 更改负载平衡参数

  2. 基于域的服务 TTL中,输入 TTL 值。

注意:如果基于域的服务器 TTL 值设置为 0,则使用数据包中的 TTL 值。

为服务组和域名绑定指定不同的名称服务器

您可以为特定组中的不同域名配置不同的名称服务器。在将 DBS 服务器绑定到服务组时,设置 nameServer 参数是可选的。如果在将成员绑定到服务组时未指定名称服务器,则会考虑使用全局配置的名称服务器。

使用 CLI 将服务器绑定到服务组时指定名称服务器

在命令提示符下,键入:

bind serviceGroup <serviceGroupName> (<serverName> [-nameServer <ip_addr>] [-dbsTTL <secs>])
<!--NeedCopy-->

示例

bind servicegroup svc_grp_1 web_serv  -ns.nameserver.com 10.102.27.155 -dbsTTL 10
<!--NeedCopy-->

使用 GUI 将服务器绑定到服务组时指定名称服务器

  1. 导航到“流量管理”>“负载平衡”>“服务组”。

  2. 在“服务组”页面中,选择已创建的服务组,然后单击 编辑

  3. 负载平衡服务组 页面中,单击 服务组成员

  4. 在“服务组成员绑定”页面中,选择已创建的服务器,然后单击“编辑”。

  5. 名称服务器中,指定绑定域的查询必须发送到的名称服务器名称。

使用 DNS SRV 记录发现服务