利用Active Directory標識和跟蹤虛擬機
虛擬機指的是在自己當前使用的操作系統(tǒng)(2000,XP)基礎上安裝并利用專門的虛擬機軟件(常用的有VMWARE和Microsoft的VPC)虛擬出若干臺計算機,這些虛擬的多臺計算機每臺有各自的CPU、內存、硬盤、光驅、軟驅、網(wǎng)卡、聲卡、鍵盤、鼠標、串口、并口、USB口等“硬件”設備,當然這些硬件都是虛擬的,實質上它們還是用你計算機中相應的硬件。這些虛擬的計算機可以獨立運行,安裝各自的操作系統(tǒng),應用軟件、殺毒軟件等等,就好像平時用你的計算機一樣使用它們。也可以讓它們連成一個網(wǎng)絡。
隨著很多企業(yè)部署越來越多的虛擬化平臺,如何區(qū)分物理服務器和虛擬服務器也變得越來越難。有些管理員在每臺虛擬機的主機名后加上“_vm”以示區(qū)別。然而,很多企業(yè)不喜歡這種方法,因為任何名字的變化都會影響到用戶和應用程序訪問虛擬機數(shù)據(jù)信息的方式。在服務器轉變?yōu)樘摂M機之后,改變服務器的名字可能也會影響到服務器本地安裝的應用程序和服務。
如果管理員對一臺遵循從物理平臺到虛擬平臺(P2V)遷移的服務器重新命名,他們通常使用DNS中的CNAME記錄,以此來保證名字解析的透明性。但是,這種方法增加了對服務器資源管理的額外復雜度。另外一種標識服務器對象(無論是虛擬環(huán)境還是物理環(huán)境)的方法是使用每一臺計算機對象Active Directory中Description屬性。已經有一些企業(yè)使用Description屬性來標識一臺計算機的位置、部門或者角色??紤]到這一點,使用Description屬性可能要求用戶能夠簡潔地標識出是物理平臺還是虛擬平臺。例如,可以使用如下的命名規(guī)范:
- 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屬性標識一臺物理服務器,以及其位置、部門和角色
有了這些合適的命名規(guī)范,通過使用Active Directory Users and Computers和給這些對象排序(使用Description屬性),就可以很快地在任何一個Active Directory容器中定位到虛擬機對象。點擊Active Directory Users and Computers中的Description列就可以做到這些,雙擊的話就可以按照降序排序。
如圖3是一個通過Description排序計算機對象的例子:
圖3:在Active Directory Users and Computers中排序虛擬機計算機對象
在大型企業(yè)中,很多管理員發(fā)現(xiàn)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.現(xiàn)在可以點擊“Start”開始查詢(如圖4),就可以顯示出那些Description屬性以“Vesx開頭”的計算機對象
圖4:ESX虛擬機Active Directory查詢
當然,使用Active Directory Users and Computers GUI只能完成這些工作。在大型環(huán)境中,用戶可能希望使用腳本語言來填充每一臺計算機對象的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范式的基礎上做了進一步擴展,其中包括用一個自定義屬性來標識計算機是物理平臺還是虛擬平臺。
#p#
在這系列第一部分中,我介紹了如何使用計算機對象Description屬性標識出虛擬平臺和物理平臺的方法。同時我也闡述了如何使用vbscript為大量計算機修改Description屬性。
在本文中,我將介紹查詢Active Directory的方法,來查詢匹配預定義Description屬性前綴的計算機對象。例如,如果用戶希望查找所有虛擬機,可能就需要找出所有Description屬性以“V”開始的計算機。如果要查找所有基于Xen的虛擬機,就需要查詢所有Description屬性以“Vxen”開始的計算機。
在上一篇文章中我解釋了如何使用Active Directory Users and Computers執(zhí)行計算機對象查找,但是有時用戶要么是為了和其它管理工具保持完整性,要么是為了長時期保存,也可能希望輸出存儲在一個文本文件中。考慮到這些的話,可以使用腳本程序QueryDescription.vbs(在我的個人主頁上可以下載到文本格式)。執(zhí)行這個腳本程序,可以返回一個計算機列表,這些計算機的Description屬性都是以預定義字符串開始的。
為了在讀者的工作環(huán)境中使用這個腳本程序,需要編輯三個變量:
- ●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屬性來標識計算機是特定的虛擬機類型或者是物理系統(tǒng),使用該方法可以允許用戶更迅速地合理部署一個系統(tǒng),并且可以更輕松地跟蹤整個企業(yè)內部系統(tǒng)中的所有虛擬機。在全部現(xiàn)有的物理計算機和虛擬機對象在它們的Description屬性中都設置合適的前綴之后,用戶應該確保所有新加入域的虛擬機也擁有正確的Description屬性前綴(如Vesx、Vvi、Vms等)。企業(yè)內部的部署和更改控制流程也需要隨之進行更新,以保證這些操作正常進行。
在本系列文章的最后一部分,我將探討自定義Active Directory的一些方法。通過這些自定義Active Directory,可以使用自定義虛擬機屬性。如果使用已有Description屬性(其它屬主的Description屬性),下一篇文章中給出的解決方案或許正是讀者所需要的。 在本系列文章的的前兩篇中,我描述了一種通過計算機對象Active Directory中Description屬性來標識一個工作環(huán)境是物理環(huán)境還是虛擬環(huán)境的方法。在本文中,我將對Active Directory Integrity做進一步介紹,探討自定義Active Directory模式,用來支持新的虛擬化屬性。
#p#
在本文中,我給出了創(chuàng)建兩個自定義Active Directory屬性(isVirtual屬性和vmType屬性)的基本步驟。isVirtual屬性是一個布爾變量,用來標識一臺計算機是物理計算機還是虛擬計算機。如果isVirtual設置為“True”,就說明該計算機對象是虛擬機。如果用戶希望以更細的粒度標識虛擬機,就需要增加vmType屬性。vmType是一個字符串變量,可以用來標識一臺虛擬機的虛擬平臺,在此需要使用第一篇文章中所描述的命名規(guī)范。
需要注意的是本文所述的過程要求Active Directory模式修改,修改后是不可撤消的。如果存在問題,那么你需要評估本系列前兩篇文章中所描述的解決方案。對于擴展Active Directory模式的技術背景,用戶需要看是TechNet的一篇文章《Extending the schema》,在這篇文章中,有幾個微軟文檔的鏈接。微軟的這幾篇文檔解釋模式修改的程序及其微小差異。一定要記住本文列出的幾個步驟在應用到產品領域之前,一定要先在某個測試環(huán)境中進行評估。
在開始之前,如果還沒有對象標識符((OID:Object Identifier))的話,需要為企業(yè)申請一個。如果企業(yè)沒有OID,就需要在MSDN的Active Directory Naming Registration網(wǎng)站申請一個。另外,在這篇之外也不失一般性,最好的方案是在通用名字和LDAP顯示名字中使用企業(yè)指定的模式前綴。例如,我的模式前綴是cwolf。因此不是使用通用名字“isVirtual”,最好的方法是使用“cwolf-isVirtual”,關于模式命名更多的信息,參看Microsoft Windows Server 2003應用程序規(guī)范。請注意,如果讀者希望在一個實驗室環(huán)境中測試這些流程,可以使用我在本文中給出的OID變量。
為了創(chuàng)建新isVirtual屬性和vmType屬性,需要注冊Active Directory模式MMC嵌入式管理單元。為了注冊這個管理單元,需要登錄域控制器,運行命令regsvr32 schmmgmt.dll。注意:只有用戶是模式管理組成員才可以能夠對Active Directory模式做出改動。
接下來就需要運行mmc目錄打開一個空MMC shell,在shell上新增Active Directory模式管理單元。如果創(chuàng)建一個自定義的虛擬機屬性,以下幾個步驟是很有必要的:
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”就可以創(chuàng)建Description屬性
5. 接下來,需要創(chuàng)建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. 需要注意的是所創(chuàng)建的屬性必須和計算機類相關聯(lián);所以需要擴展類容器并且定位“Computer”類;右鍵點擊“Computer”,選擇“Properties”
13. 在“Computer Properties”對話框中,選擇“Attributes”屬性頁,點擊“Add”按鈕
14. 在“Select Schema Object”對話框中,向下拉選擇“isVirtual attribute”,然后選擇“OK”
15. 在“Computer Properties”對話框的“Attributes”復選框內,再次點擊“Add”按鈕
16. 現(xiàn)在可以選擇“vmType Attributes”,點擊“OK”
17. 在在“Computer Properties”對話框的可選屬性中就可以看到isVirtual和vmType;點擊“OK”保存更改
圖1:創(chuàng)建isVirtual屬性
圖2:創(chuàng)建vmType屬性
注意這些步驟將會改變模式,對Active Directory模式的任何改變將會影響到整個集群,所以需要確保在嘗試該流程之前,對于這些變化有適當?shù)姆柦Y束指令。
在屬性增加到模式之后,就需要配置屬性,使用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腳本,該腳本程序可以在我的個人主頁上下載到文本格式。為了在讀者的工作環(huán)境中運行該腳本,需要修改三個變量:
- 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
從本系列文章的第一部分和第二部分中提到的技術可以看到,每次一臺新計算機對象創(chuàng)建時,為isVirtual和vmType自定義AD屬性值是非常重要的。
整合虛擬化管理和Active Directory可以給用戶對于審計和管理整個企業(yè)內部所有虛擬機更大控制權。
本文詳細的介紹了如何用Active Directory標識和跟蹤虛擬機,熟練使用Active Directory中的Description屬性,那么你將會受益匪淺。
【編輯推薦】
- 活動目錄——Active Directory
- 虛擬機概論——IBM虛擬機模型
- Active Directory 權限管理服務應用
- 如何打開 Active Directory 用戶和計算機
- 手把手教你在CentOS 5.6下安裝Xen虛擬機