背景。我正在使用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?我还缺少什么?
为何与众不同?同样,这不适用于公共网站,所以我假设缓存问题。
答案 0 :(得分:1)
假设master.test.com
群集的两个成员是1.1.1.1
和1.1.1.2
,并且每个成员的A记录设置为numberone.test.com
和numbertwo.test.com
。如果我理解正确,你会问你是否应该:
master.test.com
指定为1.1.1.1
的记录,如果第一台服务器发生故障,请将其切换为1.1.1.2
。master.test.com
作为CNAME记录指向numberone.test.com
,如果第一台服务器发生故障,请将其切换为numbertwo.test.com
。在功能上它们是等价的。请注意,master.test.com
本身应该有一个短TTL,但numberone
和numbertwo
A记录可以有更长的TTL,因为这些IP地址永远不会改变。
对于性能,使用A记录有轻微的优势。假设服务器1刚刚关闭而您已切换到服务器2。使用CNAME记录时,您使用的递归DNS服务器可能在其缓存中没有numbertwo.test.com
,因此需要额外查找。这可能需要几十毫秒,如果master.test.com
只是A记录,则可以保存。
另一方面,由于master.test.com
上的TTL,您可能会遇到多达60秒的停机时间,因此几十毫秒的时间非常少。
如果您控制系统的每个方面,包括客户端和服务器,您还可以考虑使用其他解决方案来传播有关使用哪个redis服务器的信息,例如使用Apache ZooKeeper或更简单的doozerd,它声称可以提供近乎即时的服务器停机通知。