由于各种原因,我们托pipe了我们自己的DNS服务器 (BIND),其中包括我们经常部署和终止机器的事实,而且我们有时需要通过DNS快速负载均衡。
然而,现在我们有了一个好的服务器 ,我们很难跟踪所有的logging,而且在编辑我们的区域文件时我们往往会犯错误。 还没有太坏(我们使用一些其他的DNS提供商作为备份),但我正在寻找一个更好的方式,而不仅仅是手动编辑文件。
此外,由于我们可以轻松地与臭名昭着的厨师一起部署新的实例,手工操作最需要的是时间! 如果我们可以自动化这个,会很感兴趣。 任何人都知道这个? 编辑和维护此区域文件的最佳做法是什么?
您可以使用Chefsearch,使用发现的主机名/ fqdn和节点的ipaddress,与Chefdynamic构build区域文件作为模板。
hosts = search(:node, "*:*") template '/path/to/zonefile' do source 'zonefile.erb' variables(:hosts => hosts) owner 'root' group 'root' mode 0644 end
并且模板将遍历所传递的hosts
variables,使用search中每个结果的主机名,fqdn和ipaddress。 被举的例子:
<% @hosts.each do |h| -%> <%= h['fqdn'] %>. IN A <%= h['ipaddress'] %> <% end -%>
我知道现在已经有一个月了,但是我刚刚完成了一个自动化系统的设置来pipe理这个。 它由一个git仓库组成,其中包含:
当我想对我的区域文件进行更新时,以下是这个过程。
git pull #to make sure it's current. #Open the zone file and edit. git diff #verify the change is what I want. git commit -a; git push cap primary:update #that also sends a notify to my secondary who pulls down the new zone cap secondary:update #if I'm just updating the secondary.
它的工作非常简单 – 我不必login一堆服务器来做任何事情,而且很容易看到我在改变什么。
另外 – 它给了我一个很好的变化的历史。
如果你想要一个回购的副本 – 只要知道,我会DM你。
这是一个痛苦,伴随着文本configuration的力量。 我发现有60个区域文件需要处理,除非你必须每天更改它们,但是也许你可以更好地服务于支持来自数据库(PostgreSQL,例如PowerDNS )的DNS数据的服务器。 这允许您创build简单的脚本/页面/应用程序来处理数据(甚至可以为客户提供前端)。
你甚至可以使用SQL将绑定configuration成服务器的从服务器,它会自动从主服务器加载区域信息。
至于最佳做法:
vim
macros来编辑多个文件,但是你可以用sed和其他工具来完成 由于我假设您的所有服务器都是在您的厨师configuration中定义的,那么如何简单地使用该数据生成您的区域文件? 不知道厨师是否有一些内部的function,但它似乎是一个脚本应该相对较小的东西。 为了保持独立,将这些“dynamic”服务器委托给自己的区域可能是一个想法。
话虽如此,你确定你想使用DNS进行负载平衡?
完整性validation脚本,比如validation序列号已经升级,SCM(也许是Subversion,或者任何本地首选的毒药)是有历史logging和能力的。
一旦你有了像svn这样的数据,你可以使用添加/删除单个主机的工具,同时让人类编辑区域文件。
否则,将数据从平面文件移动到数据库有多种select。 PowerDNS是一个,绑定的DLZ补丁是另一个。 我会注意到,就性能而言,如果这些是公开的区域,您可能希望将数据库支持的服务器保持为隐藏的主服务器,并让AXFR / IXFR将更改传播到可以运行库存绑定的公共主服务器。 对于内部区域(corp.example.com)这可能是矫枉过正。
试试这些规则
对于60台服务器,Webmin的BIND模块应该可以正常工作。 也检查这个列表
编辑:我没有读过这个问题的第一句话。
我不知道是否有一个廉价的方式来做这个,除了滚动自己的脚本,无论是通过木偶/厨师或独立。
我知道一些位于BIND之上的商业“DNSpipe理”解决scheme。 他们还提供简单的Web界面和SOAP / Rest API来快速添加/删除logging。 如果需要,我可以提供这些公司的信息,因为我们最近评估了几个产品。