DNS SRV:使用DNS服务器做服务发现

栏目: 后端 · 发布时间: 5年前

内容简介:DNS SRV 是 DNS 记录中一种,用来查询指定服务的地址。与常见的A记录、CNAME 不同的是,SRV中除了记录服务器的地址,还记录了服务的端口,并且可以设置每个服务地址的优先级和权重。访问服务的时候,本地的服务从 DNS 服务器查询到一个地址列表,根据优先级和权重,从中选取一个地址作为本次请求的目标地址。一个支持SRV的 LDAP client 通过查询域名,可以得知 LDAP 服务的 IP 地址和服务端口:

DNS SRV 是 DNS 记录中一种,用来查询指定服务的地址。与常见的A记录、CNAME 不同的是,SRV中除了记录服务器的地址,还记录了服务的端口,并且可以设置每个服务地址的优先级和权重。 RFC-2782 给出DNS SRV的建议标准,它是在2000年的时候提出来的。

访问服务的时候,本地的服务从 DNS 服务器查询到一个地址列表,根据优先级和权重,从中选取一个地址作为本次请求的目标地址。

一个支持SRV的 LDAP client 通过查询域名,可以得知 LDAP 服务的 IP 地址和服务端口:

_ldap._tcp.example.com

这个域名的格式是 rfc-2782 中推荐的格式,_ldap表示LDAP服务,_tcp表示通过TCP协议访问LDAP服务。

SRV 的 DNS 类型代码为 33。SRV的记录格式为:

_Service._Proto.Name TTL Class SRV Priority Weight Port Target

Service: 服务名称,前缀“_”是为防止与DNS Label(普通域名)冲突。
Proto:   服务使用的通信协议,_TCP、_UDP、其它标准协议或者自定义的协议。
Name:    提供服务的域名。
TTL:     缓存有效时间。
CLASS:   类别
Priority: 该记录的优先级,数值越小表示优先级越高,范围0-65535。
Weight:   该记录的权重,数值越高权重越高,范围0-65535。     
Port:     服务端口号,0-65535。
Target:   host 地址。

客户端查询到多条记录的时候,使用优先级最高的记录。对相同优先级的记录,按照权重选择,记录的权重越高,被选择的可能性越高。

选择的时候,将所有记录的权重值累加,得到一个选择区间[0,sum],每个记录在[0,sum]中占据一段连续的、长度为自身权重值区间。然后生成一个[0,sum]中的随机数,随机数落在的区间所属的记录就是被选择的记录。

注意事项

  1. 在使用DNS SRV的时候,要注意DNS Client是否按照预期的方式处理收到的SRV记录。当前DNS SRV只能够负责提供服务地址列表,对这个列表如何解读,完全取决于Client的实现。
  2. rfc-1035 中规定,通过UDP协议传输DNS响应时,UDP报文的负载不能超过512字节,在添加 SRV 记录的时候,要特别注意。通过TCP传输时没有512字节的限制。
  3. 当一个服务地址有多个相同优先级的SRV记录的时候,Client会按照这些SRV的权重分配请求。下一次向服务发起的请求可能发送到了不同的地址。
  4. 在通过SRV记录的权重来分配请求的时候,使用的是本地缓存的DNS记录,所以不能实时地感知到服务的地址列表变化。除非将 TTL 设置的非常短暂,但这样将会频繁地查询DNS服务器。

Client查询服务地址的过程

rfc-2782中已经做了很好地介绍,这里就不表述了。

配置举例

下面是DNS中 master file,可以看到有 example.com 域名提供了一个名为_foobar._tcp 的服务,这个服务有两个 SRV 记录,分别指向了 sys-box.example.com:1099 和 server.example.com:1099

$ORIGIN example.com.
  @               SOA server.example.com. root.example.com. (
                      2019030102 3600 3600 604800 86400 )
                  NS  server.example.com.
                  NS  ns1.ip-provider.net.
                  NS  ns2.ip-provider.net.
  ; 
  _foobar._tcp     SRV 0 1 1099 slow-box.example.com.
                   SRV 0 3 1099 fast-box.example.com.
  ; if neither slow-box or fast-box is up, switch to
  ; using the sys-box and the server
                   SRV 1 0 1099 sys-box.example.com.
                   SRV 1 0 1099 server.example.com.
  server           A   172.30.79.10
  slow-box     A   10.30.79.11
  sys-box      A   10.30.79.12
  fast-box     A   10.30.79.13
  ; NO other services are supported
  *._tcp          SRV  0 0 0 .
  *._udp          SRV  0 0 0 .

参考阅读:

  1. rfc-2782
  2. rfc-135

以上所述就是小编给大家介绍的《DNS SRV:使用DNS服务器做服务发现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Algorithmic Beauty of Plants

The Algorithmic Beauty of Plants

Przemyslaw Prusinkiewicz、Aristid Lindenmayer / Springer / 1996-4-18 / USD 99.00

Now available in an affordable softcover edition, this classic in Springer's acclaimed Virtual Laboratory series is the first comprehensive account of the computer simulation of plant development. 150......一起来看看 《The Algorithmic Beauty of Plants》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码