使用 SVN 设计 DNS 主/从

使用 SVN 设计 DNS 主/从

我正在寻找一个带有 SVN 的主从 DNS 服务器的良好设计。困扰我的几个疑问是:

  • 如果我有一个提交后钩子来将 DNS 主数据复制/rsync 到从属服务器,这样会好吗?
  • 或者我应该使用 svnsync?
  • 如果使用 svnsync,主服务器和从服务器的 UUID 是否应该相同?这样做有什么好处?

我们的 DNS 需要大量用户直接对 BIND 进行修改。需要 [使用 SVN] 并在主/从设计中跟踪 zone/named.conf 更改。

补充:此外,有一个提交后 svnsync 脚本来将主服务器与从服务器同步而不是 AXFR/IXFR 是一个好主意吗?

答案1

如果您没有使用主/从架构,那么您可以使用 SVN 保持它们同步,而无需在 BIND 中建立主/从关系;BIND 服务器将提供相同的数据,其行为与在主/从配置中的行为相同,无需相互通信或不需要在两台服务器上进行不同的配置。

您的 SVN 存储库应独立于 BIND 服务器 - 如果需要,它可以驻留在其中一个服务器上,但如果可以,您可能希望避免这种情况,并为其提供自己的服务器。SVN 服务器将保存数据的主副本,而 BIND 服务器将检索该数据并为其提供服务。从逻辑角度来看,SVN 服务器是主服务器,而 BIND 服务器是从服务器 - 但从 DNS 角度来看,我们将让两个 BIND 服务器都认为它们是主服务器,并拥有区域的完整副本。

svnsync是一种将 SVN 存储库与同一存储库的第二个副本同步的工具;根据您的体系结构,您可能希望使用它svnsync来将存储库的副本发送到备份站点。您永远无法针对同步数据的存储库进行提交,因此它本质上是只读的,但在主存储库丢失的情况下仍能为您提供保障。


因此,为了使其正常工作,需要设置以下几点:

  • 设置一个可集中访问的 SVN 服务器。配置方法有多种;我已对这些选项进行了总结(以及每种选项的优缺点)这里如果需要,可设置svnsyncDR 服务器,或svnadmin dump --incremental将存储库的平面文件转储拉入备份。
  • 在 SVN 服务器中建立区域文件,并将区域文件的副本签出到 BIND 服务器上要存储它们的目录中。您需要确保 BIND 服务器可以在无需人工干预的情况下提取数据;BIND 服务器用于向 SVN 进行身份验证的密码或 SSH 密钥应被保存。
  • 配置 BIND 以读取从 SVN 签出的区域文件。设置每个zonetype master;- 它们将各自为区域查询提供权威答案(在主/从配置中也会发生这种情况)。
    • (从 DNS 角度来看,由于一台服务器存在于区域SOA记录中,因此它仍然是“主要主机”,但这主要只对动态更新有影响 - 名称解析将通过任一节点进行)
  • 设置一些设置来保持区域文件最新。这可能看起来像是一个 cron 作业,它svn update针对您之前签出的 SVN 工作目录运行,然后reload通过其 init 脚本向您的 BIND 进程发送一个,告诉它区域已更改。
  • 通过 SVN 客户端针对存储库使用区域!提交后,服务器将获取更改、重新加载其区域并提供当前数据。确保在每次更改时更新区域序列号!

顺便说一句,我绝对也赞成使用配置管理工具来分发区域文件,正如 200_success 所建议的那样。如果这样做,您只会删除 BIND 服务器与 SVN 服务器的直接连接,以及支持更新的 cron 作业;这些方面将由配置管理工具处理。其余说明仍然适用;工作流程、BIND 服务器的配置以及配置后的行为保持不变。

答案2

你需要使用 SVN 吗? Bind9支持主/从架构

然后,您可以将主区域文件签入到 SVN。

答案3

如果你正在使用CF引擎或者木偶管理您的机器,使用它来分发您的区域和配置文件并指示进程重新加载新数据。您的提交后脚本可以将文件写入 CFEngine/Puppet 主服务器并触发运行。

如果你没有使用 CFEngine 或 Puppet,你应该认真考虑这样做。因为你要管理多台机器,所以这确实是一件聪明的事。

顺便说一句,我还建议运行命名检查区从预提交脚本中阻止提交损坏的区域文件。

相关内容