去年(2021)8月份的时候处理过一例小型Active Directory域网络DC不同步的故障。本来想完整还原一下当时的处理过程,但因为虚拟机(当时已将生产环境进行了虚拟化)的原始状态没有保存,实在没时间折腾,只能作罢。以下为根据记忆叙述,或许有所错漏,敬请留意!
网络中只有两台域控,故障发生时的状态大概如下图所示:
两台服务器上都有大量报错:
ServerA的日志(DNS拒绝访问,DHCP激活失效):
ServerB的日志(DNS能启动,但DC SRV记录异常):
客户端无法联系域控制器,组策略无法应用/更新:
Active Directory的正常运行离不开DNS服务,首先要解决的问题是恢复DNS服务。由于ServerB是PDC角色并且DNS相对正常,因此选择在ServerB上删除(注意:如有自定义的A记录应先记录备份)并重建AD DNS两个主分区:yourdomain.dns 和 _msdcs.yourdomain.dns。
ServerB上TCP设置主DNS服务器为127.0.0.1,清空备用DNS设置。
重建过程比较简单,但两个地方应注意:
主分区类型为独立主分区(取消将分区存储在活动目录中,待服务器都恢复正常之后可再集成至Active Directory中);允许非安全和安全的动态更新(服务器都恢复正常之后可设置为仅接受安全更新)。
如重建DNS遇到困难,请自行百度或参考:http://networkerslog.blogspot.com/2011/11/how-to-rebuild-ad-integrated-dns.html
重建完之后重启ServerA。
ServerA上TCP设置主DNS服务器为ServerB的地址,清空备用DNS设置。记忆当中,ServerA无需重建DNS,如此设置并重启后,两台服务器已基本恢复正常,但是,ServerA仍然无法成功复制至ServerB,根据日志提示Google后,多数说是Active Directory存在Lingering Object的原因导致无法同步,然而通过工具处理时提示没有发现Lingering Object。再细查日志记录发现服务器已有3个多月前就已无法完成正常的双向同步。记忆当中AD复制默认是执行严格的一致性检查的,但这个严格检查是可以关闭的(可以理解为强制同步),考虑到AD中并没有发现Lingering Object同时两台服务器不正常双向同步时间已很长,关闭一致性检查以执行强制同步应该可行。Google后找到对应的注册表路径为:HKLMSystemCurrentControlSetServicesNTDSParameters,键名【Strict Replication Consistency】默认为1,将键改为0即关闭一致性检查,然后再尝试从SeverA向ServerB同步时成功。但记不清楚是否在两台服务器上都设置该键值和是否需重启。
注:
还有一点是:不确定当时是否在ServerB上执行了夺取FSMO角色(原属于ServerA的Schema Master 和 Domain Naming Master)的操作。
总结来说,其实就两步操作,一是重建DNS,二是关闭复制一致性检查;此次故障推断应是由于ServerB系统所在的RAID1阵列导致本机系统状态异常所引发,从侧面反映出平时系统状态监控还是很关键的,可能的话,阵列卡应设置邮件报警;DC状态监控,简单点的可以用Poweshell监控Windows事件日志,高级点的或者可以用Zabbix;善用虚拟化,尽可能将生产环境虚拟化并测试后再应用!