54SA.COM|专注于系统运维管理,为中国SA提供动力!

54SA.COM|系统运维网

系统管理员之家Banner
当前位置: 主页 > Windows > 服务器 > 域服务器 >

使用Active Directory标识和跟踪虚拟机

分享到:
时间:2010-10-28 21:26来源:网络 作者:Liy

    随着很多企业部署越来越多的虚拟化平台,如何区分物理服务器和虚拟服务器也变得越来越难。有些管理员在每台虚拟机的主机名后加上“_vm”以示区别。然而,很多企业不喜欢这种方法,因为任何名字的变化都会影响到用户和应用程序访问虚拟机数据信息的方式。在服务器转变为虚拟机之后,改变服务器的名字可能也会影响到服务器本地安装的应用程序和服务。如果管理员对一台遵循从物理平台到虚拟平台(P2V)迁移的服务器重新命名,他们通常使用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属性的第一个字母。
    图1和图2给出了通过计算机对象的Description属性标识虚拟机的两种方法:

   
  图1:使用Description属性标识一台Xen虚拟机

 
  图2:使用Description属性标识一台物理服务器,以及其位置、部门和角色

 

    有了这些合适的命名规范,通过使用Active Directory Users and Computers和给这些对象排序(使用Description属性),就可以很快地在任何一个Active Directory容器中定位到虚拟机对象。点击Active Directory Users and Computers中的Description列就可以做到这些,双击的话就可以按照降序排序。如图3是一个通过Description排序计算机对象的例子:

   

Active Directory

图3:在Active Directory Users and Computers中排序虚拟机计算机对象

    图3:在Active Directory Users and Computers中排序虚拟机计算机对象

    在大型企业中,很多管理员发现Active Directory查询属性非常有用。例如,为了定位所用域中的成员计算机(这些计算机都是ESX虚拟机),以下几个步骤就非常必要:

    1.在Active Directory Users and Computers窗口,右键点击“Domain Object”,选择“Find”
    2.在“Find”对话框,点击“Find Drop-down”菜单,选择“Computers”
    3.接下来,点击“Advanced”属性页。在“Advanced”属性页下,点击“Field”按钮,在复合的drop-down菜单中选择“Description”
    4.在“Condition Drop-down”菜单中,选择“Starts With”
    5.在“Value”属性中输入“Vesx”,注意如果需要搜索所有虚拟机,只需输入“V”
    6.接下来,点击“Add”按钮
    7.现在可以点击“Start”开始查询(如图4),就可以显示出那些Description属性以“Vesx开头”的计算机对象

     
  图4:ESX虚拟机Active Directory查询

    当然,使用Active Directory Users and Computers GUI只能完成这些工作。在大型环境中,用户可能希望使用脚本语言来填充每一台计算机对象的Description属性。下面的SetDescription.vbs脚本就可以从一个文本文件中读取一个计算机列表,也可以修改这些已有的Description属性,确保其有一个物理或者虚拟的标识符作为前缀。

    'SetDescription.vbs
    '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=computers,dc=virtual,dc=net"

    'strSourceFile -- file that contains computer
    ' account list
    strSourceFile = "c:computers.txt"

    ' Constants
    Const ForReading = 1

    'Open Source File
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    set objSourceFile = objFSO.OpenTextFile(strSourceFile,_
        ForReading, True)

    'Connect to Directory Service
    'Modify computer description for each computer in
    ' source file list
    Do Until objSourceFile.AtEndOfStream
        strcomputer = objSourceFile.Readline
        strADSpath = "LDAP://cn=" & strcomputer & _
           "," & strDomainTarget
        Set objComputer = GetObject(strADSpath)
        strOldDes = objcomputer.description
        If strOldDes = "" then
          strNewDes = strPrefix
        Else
          strNewDes = strPrefix & " - " & strOldDes
        End If
        objcomputer.Put "Description", strNewDes
        objcomputer.SetInfo
    Loop

      注意:在上述脚本中,需要修改如下的三个变量:

    ●strPrefix
    ●strDomainTarget
    ●strSourceFile
    strPrefix标识虚拟机的前缀,用来给每台计算机Description属性赋值。例如,对于ESX虚拟机,就可以把strPrefix赋值为“Vesx”;对于物理服务器,可以给strPrefix赋值为“Ps”。strDomainTarget必须用来给容器设置不同的名字,在这些容器中包含有目标计算机。例如,如果计算机对象在TechTarget.com域的Computers容器中,这个strDomainTarget变量就应该设置为“cn=computers,dc=techtarget,dc=com”;如果计算机对象在TechTarget.com域的Development OU中,这个strDomainTarget变量的值就应该设置为“ou=development,dc=techtarget,dc=com”。需要注意的是脚本一次只能在一个Active Directory容器中运行,因此,如果需要修改多个容器中计算机对象的话,用户就需要在每一个Active Directory目标容器中运行一次脚本程序。

    strSourceFile用来标识文本文件,在这些文本文件中是一个需要修改的计算机名列表。文件中的每一行都需要列出一个计算机主机名字。如下的链接中是一个样例:computers.txt

    在每一台计算对象的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执行计算机对象查找,但是有时用户要么是为了和其它管理工具保持完整性,要么是为了长时期保存,也可能希望输出存储在一个文本文件中。考虑到这些的话,可以使用脚本程序QueryDescription.vbs(在我的个人主页上可以下载到文本格式)。执行这个脚本程序,可以返回一个计算机列表,这些计算机的Description属性都是以预定义字符串开始的。

    为了在读者的工作环境中使用这个脚本程序,需要编辑三个变量:

    ●strPrefix
    ●strDomainTarget
    ●strLogFile
    strPrefix标识Description属性前缀,以包括查询使用。例如,把strPrefix设置为“V”将会返回所有虚拟机列表。如果把strPrefix设置为“Ps”,将会返回所有物理服务器列表。

    strDomainTarget用来标明用户希望查询域的不同名字,这个变量的设置需要和用户的域名相匹配。因此如果用户管理的是searchservervirtualization.com域的话,strDomainTarget就需要设置为“dc=searchservervirtualization, dc=com”。需要注意的是用户也可以通过新增一个不同的名字限制一个OU的连接范围,例如,为了连接TechTarget.net域中的“Web”OU,strDomainTarget就应该设置为“ou=web,dc=techtarget, dc=net”。

    最后一个可能需要修改的变量是strLogFile。strLogFile标识脚本程序输出的日志文件所存储的位置。默认保存到C盘根目录下,下面是一个日志文件的样例:

    The following computers have the vesx Description Prefix:
    Computer Name
    =============
    FS1
    FS2
    Hernandez
    Maine
    web1
    web2
    web3

    相信读者也看到了,在Active Directory中跟踪虚拟机对象没有看起来那么难。使用脚本程序修改Description属性来标识计算机是特定的虚拟机类型或者是物理系统,使用该方法可以允许用户更迅速地合理部署一个系统,并且可以更轻松地跟踪整个企业内部系统中的所有虚拟机。在全部现有的物理计算机和虚拟机对象在它们的Description属性中都设置合适的前缀之后,用户应该确保所有新加入域的虚拟机也拥有正确的Description属性前缀(如Vesx、Vvi、Vms等)。企业内部的部署和更改控制流程也需要随之进行更新,以保证这些操作正常进行。

    在本系列文章的最后一部分,我将探讨自定义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》,在这篇文章中,有几个微软文档的链接。微软的这几篇文档解释模式修改的程序及其微小差异。一定要记住本文列出的几个步骤在应用到产品领域之前,一定要先在某个测试环境中进行评估。

    在开始之前,如果还没有对象标识符((OID:Object Identifier))的话,需要为企业申请一个。如果企业没有OID,就需要在MSDN的Active Directory Naming Registration网站申请一个。另外,在这篇之外也不失一般性,最好的方案是在通用名字和LDAP显示名字中使用企业指定的模式前缀。例如,我的模式前缀是cwolf。因此不是使用通用名字“isVirtual”,最好的方法是使用“cwolf-isVirtual”,关于模式命名更多的信息,参看Microsoft Windows Server 2003应用程序规范。请注意,如果读者希望在一个实验室环境中测试这些流程,可以使用我在本文中给出的OID变量。

    为了创建新isVirtual属性和vmType属性,需要注册Active Directory模式MMC嵌入式管理单元。为了注册这个管理单元,需要登录域控制器,运行命令regsvr32 schmmgmt.dll。注意:只有用户是模式管理组成员才可以能够对Active Directory模式做出改动。
    接下来就需要运行mmc目录打开一个空MMC shell,在shell上新增Active Directory模式管理单元。如果创建一个自定义的虚拟机属性,以下几个步骤是很有必要的:

    1. 在“Active Directory Schema MMC”中,右键点击“Attributes Container”,选择“Create Attribute”

    2. 查看“Schema Object Creation warning”对话框;点击“Continue”,一定要注意属性增加将会导致Active Directory模式的永久性改变

    3. 在如图1所示的对话框中,输入如下变量:

    Common Name: isVirtual
    LDAP Display Name: isVirtual
    Unique X500 Object ID: Prefix value associated with organization's OID, followed by a unique attribute identifier. For example, 1.2.840.113556.1.8000.2522.2.1.
    Description: Identifies a computer as virtual
    Syntax: Boolean

    4. 在“Create New Attribute”对话框中输入要求的变量之后,点击“OK”就可以创建Description属性

    5. 接下来,需要创建vmType属性;右键点击“Attributes Container”,选择“Create Attribute”

    6. 查看“Schema Object Creation warning”对话框;点击“Continue”

    7. 在“Create New Attribute”对话框中(如图2),输入如下变量:

    Common Name: vmType
    LDAP Display Name: vmType
    Unique X500 Object ID: Prefix value associated with organization's OID, followed by a unique attribute identifier. For example, 1.2.840.113556.1.8000.2522.2.2.
    Description: Identifies the VM's virtualization platform
    Syntax: Case-insensitive string

    8. 刷新模式之后就可以看见新增的属性;右键点击“Active Directory Schema object”,选择“Reload the Schema”
      
    9. 接下来,点击“Attributes Container”,定位isVirtual属性;看到isVirtual属性之后,右键点击选择“Properties”

    10. 在“isVirtual Properties”对话框中,检查“Index this Attribute in the Active Directory”复选框,点击“OK”;注意,在此也需要选上 Attribute is Active框。

    11. 如果新增“vmType Attribute”重复第9步和第10步

    12. 需要注意的是所创建的属性必须和计算机类相关联;所以需要扩展类容器并且定位“Computer”类;右键点击“Computer”,选择“Properties”

    13. 在“Computer Properties”对话框中,选择“Attributes”属性页,点击“Add”按钮

    14. 在“Select Schema Object”对话框中,向下拉选择“isVirtual attribute”,然后选择“OK”

    15. 在“Computer Properties”对话框的“Attributes”复选框内,再次点击“Add”按钮

    16. 现在可以选择“vmType Attributes”,点击“OK”

    17. 在在“Computer Properties”对话框的可选属性中就可以看到isVirtual和vmType;点击“OK”保存更改

  Active Directory
 
图1:创建isVirtual属性

虚拟机
 
图2:创建vmType属性

 

    注意这些步骤将会改变模式,对Active Directory模式的任何改变将会影响到整个集群,所以需要确保在尝试该流程之前,对于这些变化有适当的符号结束指令。

      在属性增加到模式之后,就需要配置属性,使用setvirtual.vbs vbscript脚本程序设置计算机isVirtual属性:
    strComputerDN = "CN=reyes,CN=Computers,DC=virtual,DC=net"
    Set objComputer = GetObject("LDAP://" & strComputerDN)
    objComputer.Put "isVirtual" , true
    objComputer.SetInfo

    另外还需要编辑strComputerDN变量的名字确保和要编辑的计算机的不同名字保持一致,可以使用如下queryvirtual.vbs 脚本查询一台计算机的isVirtual属性:

    strComputerDN = "CN=reyes,CN=Computers,DC=virtual,DC=net"
    Set objComputer = GetObject("LDAP://" & strComputerDN)
    isVirtual = objComputer.get("isVirtual")
    wscript.echo(strComputerDN & " isVirtual = " & isVirtual)
    如果需要为很多计算机设置isVirtual和vmType属性,我的个人主页上的setvirtualattributes.vbs 脚本程序可以完成这项工作。

    但是需要修改脚本程序中的以下几个变量:

    blnIsVirtual
    strVMtype
    strDomainTarget
    strSourceFile
    在使用脚本标识计算机对象为虚拟机的情况下,blnIsVirtual需要被设置为“True”。

    strVMtype标识虚拟机类型代码,用来自定义每台计算的vmType属性。例如,设置ESX虚拟机的strVMtype为“Vesx”。

    strDomainTarget必须用来给容器设置不同的名字,在这些容器中包含有目标计算机。例如,如果计算机对象在TechTarget.com域的Computers容器中,这个strDomainTarget变量就应该设置为“cn=computers,dc=techtarget,dc=com”;如果计算机对象在TechTarget.com域的Development OU中,这个strDomainTarget变量的值就应该设置为“ou=development,dc=techtarget,dc=com”。需要注意的是脚本一次只能在一个Active Directory容器中运行,因此,如果需要修改多个容器中计算机对象的话,用户就需要在每一个Active Directory目标容器中运行一次脚本程序。

    strSourceFile用来标识文本文件,在这些文本文件中是一个需要修改的计算机名列表。文件中的每一行都需要列出一个计算机主机名字。如下的链接中是一个样例:computers.txt。

    最后,为了定位一个特定域内的所有虚拟机,需要运行QueryVirtualAttributes.vbs脚本,该脚本程序可以在我的个人主页上下载到文本格式。为了在读者的工作环境中运行该脚本,需要修改三个变量:

    strVMtype
    strDomainTarget
    strLogFile
    strVMtype标识用户可能查询的虚拟机平台类型。例如,设置strVMtype为“Vxen”将会输出一个所有基于Xen的虚拟机列表;使用“V”作为vmType变量将会输出isVirtual属性都是“True”的计算机列表,同时还有vmType属性的值。

    strDomainTarget用来标明用户希望查询域的不同名字,这个变量的设置需要和用户的域名相匹配。因此如果用户管理的是searchservervirtualization.com域的话,strDomainTarget就需要设置为“dc=searchservervirtualization, dc=com”。需要注意的是用户也可以通过新增一个不同的名字限制一个OU的连接范围,例如,为了连接TechTarget.net域中的“Web”OU,strDomainTarget就应该设置为“ou=web,dc=techtarget, dc=net”。

    最后一个可能需要修改的变量是strLogFile。strLogFile标识脚本程序输出的日志文件所存储的位置。默认保存到C盘根目录下,下面是一个日志文件的样例:

    The following computers have the Vesx vmType attribute
    Name VM Type
    ==== =======
    Reyes Vesx
    Maine Vesx
    Wagner Vesx
    WS86 Vesx

    从本系列文章的第一部分和第二部分中提到的技术可以看到,每次一台新计算机对象创建时,为isVirtual和vmType自定义AD属性值是非常重要的。

    整合虚拟化管理和Active Directory可以给用户对于审计和管理整个企业内部所有虚拟机更大控制权。令人振奋的消息是,本系列文章中提到的一个解决方案可以提供AD整合和管理,这或许正是各位读者正在寻找的。如果不是的话,请告知我还需要那些技术来简化虚拟化工作环境的管理工作。


 

[责任编辑:Lavy]

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名:
最新评论 进入详细评论页>>