Citrix ADC

通过DNS SRV记录发现业务

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

SRV记录示例:

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

下表描述了SRV记录中的每一项:

SRV发现记录样本

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

重要的是:动态学习的服务组成员的权重不能通过CLI和GUI进行修改。

用例:负载平衡微服务

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

  • Priority参数可用于指定服务器池的优先级。
  • Weight参数可用于指定后端服务实例的容量,因此可用于加权负载均衡。
  • 当后端服务器池中发生更改时,例如后端实例从池中删除,只有在所有现有客户机连接都得到尊重之后,实例才会被优雅地删除。

注意:

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

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

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

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

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

从一个优先级服务器池切换到另一个服务器池的过程是通过使用现有的客户机事务来实现的。因此,当前客户端在应用程序访问中看不到任何中断。

启用通过CLI查询SRV记录功能

开启SRV记录查询功能的操作步骤如下:

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

    在命令提示符处,输入:

    add server   [-queryType ]) 

    例子:

    add server web_serv example.com——NeedCopy >

    注意:

    • 缺省情况下,发送IPv4查询。如果要发送IPv6查询,必须启用IPv6域。
    • SRV目标域名不能超过127个字符。
  2. 创建自伸缩方式为DNS的服务组。

    在命令提示符处,输入:

    add serviceGroup   [-autoScale ] 

    例子:

    添加服务组svc_grp_1 HTTP -autoscale DNS 
  3. 将步骤1中创建的服务器作为成员绑定到服务组。

    在命令提示符处,输入:

    bind serviceGroup   

    例子:

    绑定服务组svc_grp_1 web_serv 

注意:

  • 当服务器与服务组成员绑定时,SRV服务器类型不需要输入端口号。如果您为SRV服务器类型指定了端口号,则会出现一条错误消息。

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

启用图形化查询SRV记录功能

创建一个服务器

  1. 导航到交通管理>负载平衡>服务器并点击添加

    创建服务器

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

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

  4. 查询类型中,选择深水救生艇

  5. 点击创建

创建自动伸缩模式的服务组DNS

  1. 导航到交通管理>负载平衡>服务团体

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

  3. 自动定量模式中,选择DNS

    选择模式为DNS

  4. 点击好吧

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

  1. 导航到交通管理>负载平衡>服务团体

  2. 服务团体页签,选中已创建的服务组,单击编辑

  3. 负载均衡服务组页面,点击服务小组成员

  4. 服务组成员绑定页,选择您创建的服务器并单击关闭

    绑定服务器

注意:

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

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

覆盖TTL值

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

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

如果绑定服务组成员时和全局时都配置了TTL值,则绑定服务组成员时指定的TTL值优先。如果在绑定服务组成员时或在全局级别没有指定TTL值,则DBS监视间隔将从DNS响应中的TTL值派生。

使用CLI覆盖TTL值

  • 要在绑定时覆盖TTL值,在命令提示符处输入:

    bind serviceGroup  ( [-dbsTTL ]) 

    例子:

    绑定服务组svc_grp_1 web_serv -dbsTTL 10 
  • 要全面覆盖TTL值,在命令提示符处输入:

    设置lb参数[-dbsTTL ] 

    例子:

    设置lb参数-dbsTTL 15 

使用GUI重写TTL值

在绑定时覆盖TTL值。

  1. 导航到交通管理>负载平衡>服务团体

  2. 服务团体页签,选中已创建的服务组,单击编辑

  3. 负载均衡服务组页面,点击服务小组成员

  4. 服务组成员绑定页,选择您创建的服务器并单击编辑

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

在全局层面覆盖TTL值。

  1. 导航到交通管理>负载平衡>更改负载均衡参数

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

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

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

可以为同一组中的不同域名配置不同的域名服务器。在绑定DBS服务器到服务组时,设置nameServer参数是可选的。当将成员绑定到服务组时未指定名称服务器时,将考虑全局配置的名称服务器。

通过CLI将服务器与服务组绑定时指定名称服务器

在命令提示符处,输入:

bind serviceGroup  ( [-nameServer ] [-dbsTTL ]) 

例子

绑定服务组svc_grp_1 web_serv -ns.nameserver.com 10.102.27.155 -dbsTTL 10 

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

  1. 导航到交通管理>负载平衡>服务团体

  2. 服务团体页签,选中已创建的服务组,单击编辑

  3. 负载均衡服务组页面,点击服务小组成员

  4. 服务组成员绑定页,选择您创建的服务器并单击编辑

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

通过DNS SRV记录发现业务