我在 Amazon EC2 上运行了一个私有 DNS 服务器。我不需要公共 IP 地址,因为它仅用于私有寻址 web1.xxx.internal database1.xxx.internal
问题是我最近不得不终止该实例并启动一个新实例。这意味着 DNS 服务器的私有 IP 地址发生了变化,我必须逐个登录其他 15 台服务器,并将 DNS 地址更改为指向新的 DNS 服务器。
一定有更好的方法来做到这一点,如果有,那是什么?
答案1
使用 puppet 保持配置同步。更改 puppet 服务器上的配置将会复制到所有其他服务器上。
您也可以使用 bcfg2 或 cfengine,这是您的选择。
仅需进行简单的文件同步,您就可以使用 unison。
答案2
我设置了一个脚本来处理这个问题,它会在我的其中一台服务器上设置一个带有别名的 hosts 文件,然后将其 scp 到各个实例。因此,它使用 ec2-describe-instances 列出所有机器,实例的名称标签也是该机器的名称。这适用于 Windows 和 Unix ec2-instances 的混合。
因此 ec2-describe-instance 返回(缩写):-
db domu-blah.amazonaws-1.com 74.23.65.256
etc...
然后我使用 awk 建立一个 hosts 文件,如下所示:-
127.0.0.1 localhost localhost.localdomain
74.23.65.256 db
etc...
然后使用 scp 将其发送到系统中的所有机器。看起来效果不错!
答案3
对于在 EC2 上安装多节点的情况,我使用了这个 Exapark 实用程序:http://www.exapark.com/product.html
它安装起来非常简单,运行起来也很快。它获取实例的名称标签及其私有 IP,并将其放在 hosts 文件中。因此,您可以配置实例间连接,并将持久名称解析为私有 IP。
答案4
如果服务器的流量与 DNS 服务器一样少,那么在内部使用弹性 IP(如果有多余的)可能是有意义的。
顺便说一句,一个有用的事实是,实例的公共 DNS 名称从 EC2 内部解析为其内部 IP — — 即使正在使用弹性 IP:
ip-10-170-25-38:~$ host ec2-50-18-56-241.us-west-1.compute.amazonaws.com
ec2-50-18-56-241.us-west-1.compute.amazonaws.com has address 10.160.171.207