使用Route53用boto更新DNS。我应该使用A名称还是CNAME以及要使用的TTL

时间:2012-03-14 17:22:47

标签: python amazon-web-services dns

背景。我正在使用boto和route53和aws来更新私有ip地址的域subsomanin名称。我将redis主服务器和从服务器分配给域,例如

master.test.com private ip 111.111.111.111
slave.test.com  private ip 222.222.222.222

如果主设备或从设备发生故障,我将使用逻辑启动新计算机并为该计算机分配主从属子域。

我需要确保dns尽可能快地传播到可以控制的程度。我不是DNS的专家。 TTL是60。

截至目前,我正在使用A记录。在boto中看起来像这样

change = changes.add_change("CREATE","slave.test.com", "A", 60)
change.add_value("222.222.222.222")

我也可以使用私人DNS的CNAME,例如

    change = changes.add_change("CREATE",slave.test.com, "CNAME", 60)
    change.add_value("ec2_internal_dns")

所以,我的问题是这个。我设置哪一个有关系吗? cname还是A记录?我假设只能设置一个。什么是最佳ttl?我还缺少什么?

为何与众不同?同样,这不适用于公共网站,所以我假设缓存问题。

1 个答案:

答案 0 :(得分:1)

假设master.test.com群集的两个成员是1.1.1.11.1.1.2,并且每个成员的A记录设置为numberone.test.comnumbertwo.test.com。如果我理解正确,你会问你是否应该:

  1. master.test.com指定为1.1.1.1的记录,如果第一台服务器发生故障,请将其切换为1.1.1.2
  2. master.test.com作为CNAME记录指向numberone.test.com,如果第一台服务器发生故障,请将其切换为numbertwo.test.com
  3. 在功能上它们是等价的。请注意,master.test.com本身应该有一个短TTL,但numberonenumbertwo A记录可以有更长的TTL,因为这些IP地址永远不会改变。

    对于性能,使用A记录有轻微的优势。假设服务器1刚刚关闭而您已切换到服务器2。使用CNAME记录时,您使用的递归DNS服务器可能在其缓存中没有numbertwo.test.com,因此需要额外查找。这可能需要几十毫秒,如果master.test.com只是A记录,则可以保存。

    另一方面,由于master.test.com上的TTL,您可能会遇到多达60秒的停机时间,因此几十毫秒的时间非常少。

    如果您控制系统的每个方面,包括客户端和服务器,您还可以考虑使用其他解决方案来传播有关使用哪个redis服务器的信息,例如使用Apache ZooKeeper或更简单的doozerd,它声称可以提供近乎即时的服务器停机通知。