最近处理了一个问题,群集网络名称资源注册DNS时失败,系统日志有如下报错,事件号是1196。同样的报错在同一个网络名称资源上每隔15分钟会出现一次。由于客户的群集环境中有很多网络名称资源,因此系统日志基本被这个错误填满了。

Error 1196 Cluster network name resource 'Cluster Name' failed registration of one or more associated DNS name(s) for the following reason: DNS bad key.

通常,DNS注册失败的原因有很多,但是在群集环境中比较常见的原因是权限不够。那么,在群集环境中,谁才有权限去注册或更新这些DNS记录呢?说到这里,我们就要说一下Windows Server 2008以后群集服务帐户的一个改变。

在Windows Server 2003以前的群集技术中,群集服务是在一个域用户帐户的上下文中。该帐户在每一个群集节点上必须满足一定的权限要求,群集服务才能正常工作。 由于群集服务帐户是一个域帐号,所以这个帐户会受到很多组策略的影响,密码过期策略、 用户权限分配、 本地和域组成员身份等等。在运行过程中,如果群集服务帐户的密码修改了或者群集服务帐号的权限被误删误改了,都可能影响到群集服务无法正常工作。

在 Windows Server 2008以后的故障转移群集中,群集服务不再在域用户帐户的上下文中运行,而是在群集节点的本地系统帐户的上下文中运行。在故障转移群集安装过程中,一个域用户帐户只是完成群集验证和创建的任务。要完成这些任务,我们只需要让该帐户具有本地管理员和在域中创建计算机对象的权限。

在创建群集之后,群集不需要这个帐户,也可以正常工作。但是,域用户帐户才能管理群集。若要管理群集,这个域用户帐户必须是每个群集节点上本地管理员组的管理群集。接下来,故障转移群集会在群集名所对应的计算机对象的管理下进行工作。这个计算机对象也叫做群集名对象(CNO)。CNO还会负责创建所有其他的网络名资源。我们称这些网络名资源为虚拟计算机对象(VCO)。

举个例子,如果我们创建一个群集,群集名为DipCluster,接下来我们再创建一个FileServer001的网络名资源。这样,AD里就会创建出两个计算机对象,DipCluster(CNO)和FileServer001(VCO)。

CNO在管理所有的VCO时,也有一个最小的权限集。但是一般我们都建议在VCO的Security页面上分配给CNO FULL Control。具体所需要的最小权限集,大家可以查看以下文档:

Rights needed for user account when precreating a Cluster Name Object (CNO) on Windows Server 2008 R2 Failover Cluster

http://blogs.technet.com/b/askcore/archive/2011/06/22/rights-needed-for-user-account-when-precreating-a-cluster-name-object-cno-on-windows-server-2008-r2-failover-cluster.aspx

同时DNS也会注册两条Host A记录。

CNO会对所有的网络资源名的A记录有FULL Control,包括它自己。

通过上面的描述,我想大家就清楚该如何继续解决我们的问题了:

  1. 检查所有VCO的权限,确认CNO管理VCO所需的权限是否都满足。
  2. 检查所有DNA Host A记录,确认CNO有Full Control。

在我们实际问题的处理过程中,我曾经发现CNO在用户AD中的环境中丢失了。因此,在分配校正这些权限时,我们需要先帮助客户恢复CNO。具体的恢复办法,我们会在另外一篇文章中详细描述。