我怎样才能保持我的/ etc / hosts文件与多个ec2实例保持同步

你们有没有想出一个让多个EC2实例上的/ etc / hosts文件保持最新的好方法?

实例失败..一些新的实例被创build…并且内部IP被改变。 我如何确保所有服务器上的/ etc / hosts文件是准确的?

2个选项:

  • 使用弹性IP的。 每当一个实例启动时,您可以回收这个IP并在新的实例上使用它。

  • 使用DNS:在其中一个实例上设置一个小的DNS服务器(dnsmasq不需要很多资源),并将其他实例上的所有主要DNS服务器redirect到这里。 设置或新的主机是微不足道的,因为它只需要一个文本文件中的一行。

也许两者的结合也不会太坏。

我知道在Windows端有一些DNS服务可以使用。 你不能用它来代替吗?

编辑 EC2不支持networking广播,多播DNS将不起作用。

多播DNS? 没有中央服务器要求,但没有DNS安全(可能不是一个主要问题,我不知道你的环境是什么)。 如果所有的服务器的所有ip突然改变,那么你仍然可以。 假设一切都在同一个广播域上,EC2我不能告诉你广播是否正常工作。

您可以使用像Unison http://www.cis.upenn.edu/~bcpierce/unison/一些文件syncronizer,但我强烈劝阻你这样做。 最好的办法是设置本地DNS服务器(绑定),并把所有的主机在那里。

我实际上是通过Puppet服务器来完成这项工作的,该工作服务器在启动和联机时configuration了我的EC2实例。 我有Puppet服务器导出IP地址,然后使用所有已知条目自动更新/etc/hosts文件以及/etc/ssh/ssh_known_hosts文件。

为了处理离线的服务器,我实际上将HostSshkey资源types包装为SshkeyExpiringsshkey并将其configuration为在最大时间内移除导出的logging(对于我设置为45分钟,因为我的签入应该每30分钟发生一次)旧的陈旧条目也会自动删除。

现在我不允许在EC2实例之间build立SSH连接,并强制每个人都从堡垒主机连接到EC2实例,所以目前只有堡垒主机有Expiringhost <<| |>> Expiringhost <<| |>>Expiringsshkey <<| |>> Expiringsshkey <<| |>>调用来更新/etc/hosts/etc/ssh/ssh_known_hosts