随着很多企业部署越来越多的虚拟化平台如何区分物理服务器和虚拟服务器也变得越来越难有些管理员在每台虚拟机的主机名后加上_vm以示区别然而很多企业不喜欢这种方法因为任何名字的变化都会影响到用户和应用程序访问虚拟机数据信息的方式在服务器转变为虚拟机之后改变服务器的名字可能也会影响到服务器本地安装的应用程序和服务如果管理员对一台遵循从物理平台到虚拟平台(PV)迁移的服务器重新命名他们通常使用DNS中的CNAME记录以此来保证名字解析的透明性但是这种方法增加了对服务器资源管理的额外复杂度另外一种标识服务器对象(无论是虚拟环境还是物理环境)的方法是使用每一台计算机对象Active Directory中的Description属性已经有一些企业使用Description属性来标识一台计算机的位置部门或者角色考虑到这一点使用Description属性可能要求用户能够简洁地标识出是物理平台还是虚拟平台例如可以使用如下的命名规范 Ps – Physical server Vesx – VMware ESX VM Vms – Microsoft Virtual Server VM Vxen – Xen VM Vvi – Virtual Iron VM Vvz – SWsoft Virtuozzo virtual private server Vscon – Solaris Container 在所有Description属性中我比较喜欢使用P作为物理平台的前缀V作为虚拟平台的前缀这样做的话可以使用户使用脚本语句对所有的虚拟机做查询操作例如仅通过脚本查询每一台计算对象的Description属性的第一个字母 图和图给出了通过计算机对象的Description属性标识虚拟机的两种方法 图使用Description属性标识一台Xen虚拟机 图使用Description属性标识一台物理服务器以及其位置部门和角色 有了这些合适的命名规范通过使用Active Directory Users and Computers和给这些对象排序(使用Description属性)就可以很快地在任何一个Active Directory容器中定位到虚拟机对象点击Active Directory Users and Computers中的Description列就可以做到这些双击的话就可以按照降序排序如图是一个通过Description排序计算机对象的例子 图在Active Directory Users and Computers中排序虚拟机计算机对象 图在Active Directory Users and Computers中排序虚拟机计算机对象 在大型企业中很多管理员发现Active Directory查询属性非常有用例如为了定位所用域中的成员计算机(这些计算机都是ESX虚拟机)以下几个步骤就非常必要 在Active Directory Users and Computers窗口右键点击Domain Object选择Find 在Find对话框点击Find Dropdown菜单选择Computers 接下来点击Advanced属性页在Advanced属性页下点击Field按钮在复合的dropdown菜单中选择Description 在Condition Dropdown菜单中选择Starts With 在Value属性中输入Vesx注意如果需要搜索所有虚拟机只需输入V 接下来点击Add按钮 现在可以点击Start开始查询(如图)就可以显示出那些Description属性以Vesx开头的计算机对象 图ESX虚拟机Active Directory查询 当然使用Active Directory Users and Computers GUI只能完成这些工作在大型环境中用户可能希望使用脚本语言来填充每一台计算机对象的Description属性下面的SetDescriptionvbs脚本就可以从一个文本文件中读取一个计算机列表也可以修改这些已有的Description属性确保其有一个物理或者虚拟的标识符作为前缀 SetDescriptionvbs Adds virtual or physical descriptor to computer description attribute set variables strPrefix physical or virtual identifier prefix Prefix values: Ps – Physical server Vesx – VMware ESX VM Vms – Microsoft Virtual Server VM Vxen – Xen VM Vvi – Virtual Iron VM Vvz – SWsoft Virtuozzo virtual private server Vscon – Solaris Container strPrefix = Vesx strDomainTarget this is the AD container where the target computer accounts are located strDomainTarget = cn=computersdc=virtualdc=net strSourceFile file that contains computer account list strSourceFile = c:\computerstxt Constants Const ForReading = Open Source File Set objFSO = CreateObject(ScriptingFileSystemObject) set objSourceFile = objFSOOpenTextFile(strSourceFile_ ForReading True) Connect to Directory Service Modify computer description for each computer in source file list Do Until objSourceFileAtEndOfStream strcomputer = objSourceFileReadline strADSpath = LDAP://cn= & strcomputer & _ & strDomainTarget Set objComputer = GetObject(strADSpath) strOldDes = objcomputerdescription If strOldDes = then strNewDes = strPrefix Else strNewDes = strPrefix & & strOldDes End If objcomputerPut Description strNewDes objcomputerSetInfo Loop 注意在上述脚本中需要修改如下的三个变量 ●strPrefix ●strDomainTarget ●strSourceFile strPrefix标识虚拟机的前缀用来给每台计算机Description属性赋值例如对于ESX虚拟机就可以把strPrefix赋值为Vesx对于物理服务器可以给strPrefix赋值为PsstrDomainTarget必须用来给容器设置不同的名字在这些容器中包含有目标计算机例如如果计算机对象在域的Computers容器中这个strDomainTarget变量就应该设置为cn=computersdc=techtargetdc=com如果计算机对象在域的Development OU中这个strDomainTarget变量的值就应该设置为ou=developmentdc=techtargetdc=com需要注意的是脚本一次只能在一个Active Directory容器中运行因此如果需要修改多个容器中计算机对象的话用户就需要在每一个Active Directory目标容器中运行一次脚本程序 strSourceFile用来标识文本文件在这些文本文件中是一个需要修改的计算机名列表文件中的每一行都需要列出一个计算机主机名字如下的链接中是一个样例computerstxt 在每一台计算对象的Description属性设定之后用户就可以使用在本文中前面部分提到的Active Directory Users and Computers查询技术来定位虚拟机对象另外用户也可以使用一个脚本程序查询Active Directory或者输出一个计算机列表这个列表包含有一个描述前缀符号如Vesx或者V在本系列文章的第二篇文章中我们将讨论如何使用脚本进行Active Directory计算机对象Description查询在第三部分中我在Active Directory范式的基础上做了进一步扩展其中包括用一个自定义属性来标识计算机是物理平台还是虚拟平台 在这系列第一部分中我介绍了如何使用计算机对象Description属性标识出虚拟平台和物理平台的方法同时我也阐述了如何使用vbscript为大量计算机修改Description属性 在本文中我将介绍查询Active Directory的方法来查询匹配预定义Description属性前缀的计算机对象例如如果用户希望查找所有虚拟机可能就需要找出所有Description属性以V开始的计算机如果要查找所有基于Xen的虚拟机就需要查询所有Description属性以Vxen开始的计算机 在上一篇文章中我解释了如何使用Active Directory Users and Computers执行计算机对象查找但是有时用户要么是为了和其它管理工具保持完整性要么是为了长时期保存也可能希望输出存储在一个文本文件中考虑到这些的话可以使用脚本程序QueryDescriptionvbs(在我的个人主页上可以下载到文本格式)执行这个脚本程序可以返回一个计算机列表这些计算机的Description属性都是以预定义字符串开始的 为了在读者的工作环境中使用这个脚本程序需要编辑三个变量 ●strPrefix ●strDomainTarget ●strLogFile strPrefix标识Description属性前缀以包括查询使用例如把strPrefix设置为V将会返回所有虚拟机列表如果把strPrefix设置为Ps将会返回所有物理服务器列表 strDomainTarget用来标明用户希望查询域的不同名字这个变量的设置需要和用户的域名相匹配因此如果用户管理的是searchserv域的话strDomainTarget就需要设置为dc=searchservervirtualization dc=com需要注意的是用户也可以通过新增一个不同的名字限制一个OU的连接范围例如为了连接域中的WebOUstrDomainTarget就应该设置为ou=webdc=techtarget dc=net 最后一个可能需要修改的变量是strLogFilestrLogFile标识脚本程序输出的日志文件所存储的位置默认保存到C盘根目录下下面是一个日志文件的样例 The following computers have the vesx Description Prefix: Computer Name ============= FS FS Hernandez Maine web web web 相信读者也看到了在Active Directory中跟蹤虚拟机对象没有看起来那么难使用脚本程序修改Description属性来标识计算机是特定的虚拟机类型或者是物理系统使用该方法可以允许用户更迅速地合理部署一个系统并且可以更轻松地跟蹤整个企业内部系统中的所有虚拟机在全部现有的物理计算机和虚拟机对象在它们的Description属性中都设置合适的前缀之后用户应该确保所有新加入域的虚拟机也拥有正确的Description属性前缀(如VesxVviVms等)企业内部的部署和更改控制流程也需要随之进行更新以保证这些操作正常进行 在本系列文章的最后一部分我将探讨自定义Active Directory的一些方法通过这些自定义Active Directory可以使用自定义虚拟机属性如果使用已有Description属性(其它属主的Description属性)下一篇文章中给出的解决方案或许正是读者所需要的 在本系列文章的的前两篇中我描述了一种通过计算机对象Active Directory中Description属性来标识一个工作环境是物理环境还是虚拟环境的方法在本文中我将对Active Directory Integrity做进一步介绍探讨自定义Active Directory模式用来支持新的虚拟化属性 在本文中我给出了创建两个自定义Active Directory属性(isVirtual属性和vmType属性)的基本步骤isVirtual属性是一个布尔变量用来标识一台计算机是物理计算机还是虚拟计算机如果isVirtual设置为True就说明该计算机对象是虚拟机如果用户希望以更细的粒度标识虚拟机就需要增加vmType属性vmType是一个字符串变量可以用来标识一台虚拟机的虚拟平台在此需要使用第一篇文章中所描述的命名规范 需要注意的是本文所述的过程要求Active Directory模式修改修改后是不可撤消的如果存在问题那么你需要评估本系列前两篇文章中所描述的解决方案对于扩展Active Directory模式的技术背景用户需要看是TechNet的一篇文章《Extending the schema》在这篇文章中有几个微软文档的链接微软的这几篇文档解释模式修改的程序及其微小差异一定要记住本文列出的几个步骤在应用到产品领域之前一定要先在某个测试环境中进行评估 在开始之前如果还没有对象标识符((OIDObject Identifier))的话需要为企业申请一个如果企业没有OID就需要在MSDN的Active Directory Naming Registration网站申请一个另外在这篇之外也不失一般性最好的方案是在通用名字和LDAP显示名字中使用企业指定的模式前缀例如我的模式前缀是cwolf因此不是使用通用名字isVirtual最好的方法是使用cwolfisVirtual关于模式命名更多的信息参看Microsoft Windows Server 应用程序规范请注意如果读者希望在一个实验室环境中测试这些流程可以使用我在本文中给出的OID变量 为了创建新isVirtual属性和vmType属性需要注册Active Directory模式MMC嵌入式管理单元为了注册这个管理单元需要登录域控制器运行命令regsvr schmmgmtdll注意只有用户是模式管理组成员才可以能够对Active Directory模式做出改动 接下来就需要运行mmc目录打开一个空MMC shell在shell上新增Active Directory模式管理单元如果创建一个自定义的虚拟机属性以下几个步骤是很有必要的 在Active Directory Schema MMC中右键点击Attributes Container选择Create Attribute 查看Schema Object Creation warning对话框点击Continue一定要注意属性增加将会导致Active Directory模式的永久性改变 在如图所示的对话框中输入如下变量 Common Name: isVirtual LDAP Display Name: isVirtual Unique X Object ID: Prefix value associated with organizations OID followed by a unique attribute identifier For example Description: Identifies a computer as virtual Syntax: Boolean 在Create New Attribute对话框中输入要求的变量之后点击OK就可以创建Description属性 接下来需要创建vmType属性右键点击Attributes Container选择Create Attribute 查看Schema Object Creation warning对话框点击Continue 在Create New Attribute对话框中(如图)输入如下变量 Common Name: vmType LDAP Display Name: vmType Unique X Object ID: Prefix value associated with organizations OID followed by a unique attribute identifier For example Description: Identifies the VMs virtualization platform Syntax: Caseinsensitive string 刷新模式之后就可以看见新增的属性右键点击Active Directory Schema object选择Reload the Schema 接下来点击Attributes Container定位isVirtual属性看到isVirtual属性之后右键点击选择Properties 在isVirtual Properties对话框中检查Index this Attribute in the Active Directory复选框点击OK注意在此也需要选上 Attribute is Active框 如果新增vmType Attribute重复第步和第步 需要注意的是所创建的属性必须和计算机类相关联所以需要扩展类容器并且定位Computer类右键点击Computer选择Properties 在Computer Properties对话框中选择Attributes属性页点击Add按钮 在Select Schema Object对话框中向下拉选择isVirtual attribute然后选择OK 在Computer Properties对话框的Attributes复选框内再次点击Add按钮 现在可以选择vmType Attributes点击OK 在在Computer Properties对话框的可选属性中就可以看到isVirtual和vmType点击OK保存更改 图创建isVirtual属性 图创建vmType属性 注意这些步骤将会改变模式对Active Directory模式的任何改变将会影响到整个集群所以需要确保在尝试该流程之前对于这些变化有适当的符号结束指令 在属性增加到模式之后就需要配置属性使用setvirtualvbs vbscript脚本程序设置计算机isVirtual属性 strComputerDN = CN=reyesCN=ComputersDC=virtualDC=net Set objComputer = GetObject(LDAP:// & strComputerDN) objComputerPut isVirtual true objComputerSetInfo 另外还需要编辑strComputerDN变量的名字确保和要编辑的计算机的不同名字保持一致可以使用如下queryvirtualvbs 脚本查询一台计算机的isVirtual属性 strComputerDN = CN=reyesCN=ComputersDC=virtualDC=net Set objComputer = GetObject(LDAP:// & strComputerDN) isVirtual = objComputerget(isVirtual) wscriptecho(strComputerDN & isVirtual = & isVirtual) 如果需要为很多计算机设置isVirtual和vmType属性我的个人主页上的setvirtualattributesvbs 脚本程序可以完成这项工作 但是需要修改脚本程序中的以下几个变量 blnIsVirtual strVMtype strDomainTarget strSourceFile 在使用脚本标识计算机对象为虚拟机的情况下blnIsVirtual需要被设置为True strVMtype标识虚拟机类型代码用来自定义每台计算的vmType属性例如设置ESX虚拟机的strVMtype为Vesx strDomainTarget必须用来给容器设置不同的名字在这些容器中包含有目标计算机例如如果计算机对象在域的Computers容器中这个strDomainTarget变量就应该设置为cn=computersdc=techtargetdc=com如果计算机对象在域的Development OU中这个strDomainTarget变量的值就应该设置为ou=developmentdc=techtargetdc=com需要注意的是脚本一次只能在一个Active Directory容器中运行因此如果需要修改多个容器中计算机对象的话用户就需要在每一个Active Directory目标容器中运行一次脚本程序 strSourceFile用来标识文本文件在这些文本文件中是一个需要修改的计算机名列表文件中的每一行都需要列出一个计算机主机名字如下的链接中是一个样例computerstxt 最后为了定位一个特定域内的所有虚拟机需要运行QueryVirtualAttributesvbs脚本该脚本程序可以在我的个人主页上下载到文本格式为了在读者的工作环境中运行该脚本需要修改三个变量 strVMtype strDomainTarget strLogFile strVMtype标识用户可能查询的虚拟机平台类型例如设置strVMtype为Vxen将会输出一个所有基于Xen的虚拟机列表使用V作为vmType变量将会输出isVirtual属性都是True的计算机列表同时还有vmType属性的值 strDomainTarget用来标明用户希望查询域的不同名字这个变量的设置需要和用户的域名相匹配因此如果用户管理的是searchserv域的话strDomainTarget就需要设置为dc=searchservervirtualization dc=com需要注意的是用户也可以通过新增一个不同的名字限制一个OU的连接范围例如为了连接域中的WebOUstrDomainTarget就应该设置为ou=webdc=techtarget dc=net 最后一个可能需要修改的变量是strLogFilestrLogFile标识脚本程序输出的日志文件所存储的位置默认保存到C盘根目录下下面是一个日志文件的样例 The following computers have the Vesx vmType attribute Name VM Type ==== ======= Reyes Vesx Maine Vesx Wagner Vesx WS Vesx 从本系列文章的第一部分和第二部分中提到的技术可以看到每次一台新计算机对象创建时为isVirtual和vmType自定义AD属性值是非常重要的 整合虚拟化管理和Active Directory可以给用户对于审计和管理整个企业内部所有虚拟机更大控制权令人振奋的消息是本系列文章中提到的一个解决方案可以提供AD整合和管理这或许正是各位读者正在寻找的如果不是的话请告知我还需要那些技术来简化虚拟化工作环境的管理工作 |