每个网站的典型DNS区域有两个指向Web服务器IP的A记录,一个用于example.com,另一个用于www子域.
当我们全部设置并准备好将新服务器投入生产时,更改100×2 DNS记录将非常耗时,因此我正在寻找一种方法来加快速度.在几个案例中,我读到了创建一个bash脚本,该脚本迭代DNS记录并使用新IP执行查找替换.
在其他主题中,我已经阅读了有关使用新IP添加A记录的建议,以便当前服务器不再可用时,DNS服务器会将请求指向包含新IP的下一条记录.
除了这些之外,是否有任何我可以用其他类型的DNS条目替换A记录的情况,即主机名,这样,当时机成熟时,我只能用新的更改主机名的IP并拥有所有网站指向新服务器?我确定’主机名’不是正确的术语,我希望你们都能得到这个想法.
解决方法
首先,这是一个CNAME如何在区域文件中工作的示例.
example.se IN SOA ns1.example.se. hostmaster.example.se. ( [....] ) server1 A 10.1.2.3 www CNAME server1
现在您只需要更新server1记录,以便将server1和www都移动到新的IP地址.
CNAME不必指向同一域中的地址;它也可能看起来像这样:
example.se IN SOA ns1.example.se. hostmaster.example.se. ( [....] ) www CNAME server1.example.org.
现在,当您更新区域example.org中的server1的A记录时,www.example.se的记录将继续,而无需进一步配置.
从您的角度来看,不好的部分是,这对顶点记录不起作用 – 这意味着“裸”域.换句话说,您可以将www.example.com变成CNAME,但不能使用example.com.这是因为当您使用CNAME记录时,您不能拥有该条目的任何其他记录 – 这意味着您不能拥有邮件服务器记录或名称服务器记录…这意味着该域将停止工作.
最佳实践解决方案是使用某种配置管理软件(例如puppet,chef或ansible)从模板生成区域文件.如果由于某种原因,您无法做到这一点,那么我将使用脚本替换所有文件中的IP地址.
您还希望在迁移之前的适当时间减少域的TTL值. (别忘了更新区域文件的序列号 – 我有,而且非常尴尬……)