域控制器(Domain Controller)的虚拟化早已经不是什么新鲜事了。这是因为域控制器(后面简称DC)本身对资源的要求不是很高,从服务器资源角度来考虑很适合虚拟化。但是,传统DC的虚拟化是存在一定的风险的,这主要来自于一些虚拟化的功能例如虚拟机克隆(Clone)或者快照(snapshot)。如果你曾经对DC虚拟机拍过快照,而又不小心进行了快照回滚(Snapshot Rollback),那恭喜你了,很可能你将不得不把这台DC降级为普通服务器,再重新dcpromo来恢复其功能。
为啥DC不能进行快照回滚呢? 因为快照回滚会导致叫做USN Rollback的问题。USN就是Update Sequence Number,是AD用来标注AD变更的一个号,每次AD有信息变更时,这个号都会变大。DC之间进行同步的时候,就靠比较这个USN来发现是否有变更,是否需要同步,谁同步给谁。 DC还维护一个RID Pool。RID(Relative ID)在domain里面必须是唯一的。RID Pool保证了不管新的对象是在哪个DC上创建的,RID都是唯一的。 当发生USN回滚之后,就有可能出现RID重复使用。而且新的对象创建的时候,因为USN回滚过,这个USN可能比较小,其他DC会认为这个创建动作已经被复制过了而拒绝复制,导致DC之间的AD数据库不一致和复制失败。解决的方法不是没有,但是包括很多手动操作,而且基本上是要demote掉这台DC重新promo才行。 新的Windows Server 2012解决了这个问题。它是第一个“虚拟化感知”的Windows Server版本。微软在Windows Server 2012中引入了一个新的标志符(Identifier)——VM-GenerationID,这个标志符仅用于虚拟机DC,但是需要Hypervisor支持。 获得支持的Hypervisor包括Hyper-V 2012,vSphere 5.0 U2,vSphere 5.1或更新版本。 VM-GenerationID的值作为计算机对象的一部分保存在AD中,同时也保存在虚拟机配置文件中。在AD中,VM-GenerationID的值保存在该Domain Controller计算机对象(computer object)的msDS-GenerationID属性(attribute)里面。
在虚拟机配置文件中,VM-GenerationID的值保存在虚拟机配置文件(.vmx)中,由配置vm.genid来表示。所有Windows Server 2012服务器,无论是否DC,都会在起vmx中有这个配置值。
谢谢delxu的原创,转发自 或