我需要为同一个地址(比如说域名)发送两个地址,并根据顺序将流量发送到第一个地址,直到该地址不可用,应用程序知道这一点。它只需要 DNS 为每条记录发送一个顺序。
有人知道如何按顺序创建 A 或 CNAME 记录吗?或者这是否可行?
答案1
作为已经回答DNSA
和/或CNAME
记录不支持优先级机制。
但请考虑一下SRV DNS 记录,允许使用 DNS 来发布服务和服务发现。它们的主要用途是允许服务在非标准端口上轻松运行,并减少设置客户端时的配置负担。
但它们还包括优先级并允许您设置多个记录,例如首选和后备选项。
SRV 记录具有以下形式:
_Service._Protocol.Name. TTL Class SRV Priority Weight Port Target
服务:服务的符号名称。
协议:服务的传输协议;通常是 TCP 或 UDP。
姓名:以 结尾的域名.,此记录对此有效 - 通常在 DNS 简写中省略,然后默认为区域名称。
生存时间:标准 DNS 生存时间字段。
班级:标准 DNS 类字段(这始终
IN
用于 Internet)。优先事项:目标主机的优先级,值越低,优先级越高。
重量:具有相同优先级的记录的相对权重。
港口:服务所在的 TCP 或 UDP 端口。
目标:提供服务的机器的规范主机名。
您的应用程序需要(重新)设计以支持服务发现的 SRV 记录,这不是“适用于”所有应用程序和协议的功能。例如,另请参阅此问答SRV 记录的支持范围有多广?
来自维基百科文章:
提供高服务可用性
优先级字段决定记录数据的使用优先顺序。客户端应首先使用优先级值最低的 SRV 记录,如果连接失败,则回退到优先级值较高的记录。如果服务有多个优先级值相同的 SRV 记录,客户端应根据其权重字段的值按比例对它们进行负载平衡。在以下示例中,优先级和权重字段都用于提供负载平衡和备份服务的组合。
; _service._proto.name. TTL class SRV priority weight port target. _sip._tcp.example.com. 86400 IN SRV 10 60 5060 bigbox.example.com. _sip._tcp.example.com. 86400 IN SRV 10 20 5060 smallbox1.example.com. _sip._tcp.example.com. 86400 IN SRV 10 20 5060 smallbox2.example.com. _sip._tcp.example.com. 86400 IN SRV 20 0 5060 backupbox.example.com.
答案2
对于这些类型的 DNS 记录,例如 A(地址)或 CNAME(规范名称)记录,没有优先级概念。这些记录只是将域或子域映射到 IP 地址或另一个域。