本文將簡要介紹 Globus Monitoring 和 Discovery Service(MDS)。本文討論了構成 MDS 的組件,并介紹了在網格環境中其他服務通常是如何與 MDS 進行交互的。在閱讀本文之后,您應該可以配置 Globus MDS 并注冊服務,以及 為 MDS 配置其他信息提供者。您將學習如何組織信息并按照 MDS 的層次結構來配置多個 Index Services,從而構成網格的 Index Service。
Globus Monitoring 和 Discovery Service
Globus Monitoring 和 Discovery System(MDS)是一組 Web 服務,用來監視和發現網格中的可用資源和服務。顧名思義,人們通常會認為資源發現的過程就是發現新的資源。然而,在網格環境中,資源發現是確定哪些網格資源最適合完成某個任務的過程,要求時間最短,利用資源的效率最高。這個過程是從識別可以滿足或超過當前作業需求的資源開始的。這通常是可用資源的某個子集。
接下來,我們需要通過選擇最適合的資源來細化這個清單。這個選擇過程需要靜態和動態的信息。通常,靜態信息(例如 CPU 數量、時鐘速度、物理內存總量、虛擬內存以及可用磁盤空間)可以幫助確定哪些資源能夠滿足或超過任務的需求。在細化這個清單時,也要考慮一些動態信息。動態信息包括可用 CPU 的個數,隊列中等待執行的作業個數,當前資源的利用率。現在這已經成為一個調度問題,必須考慮業務策略、優先級和服務級別協定(SLA)。
調度并不是本文的重點,因此讓我們保留整個主題改天再來討論。Globus MDS 提供了有關資源的信息,這樣就可以制定智能的調度決策,從而最好且最有效地利用可用資源。MDS 也可以監視資源,在狀態發生變化時通知感興趣的團體,并根據預先定義的條件采取行動。
Index 和 Trigger Service
我們對 MDS 所搜集到的有關資源的狀態進行監視。搜集這些信息的 MDS 服務稱為 Index Service。MDS Index Service 的工作方式與注冊表非常相似。它搜集信息,然后將其作為資源屬性發布。它通過一個 Web 服務接口將所搜集的信息提供給客戶機。客戶機可以向 MDS 查詢信息,或者訂閱所感興趣的資源屬性,即表明如果這些屬性的值發生了變化,它們非常樂于被及時通知。這些信息代表了資源屬性的配置和狀態。Globus MDS 可以監視資源,并跟蹤所選擇的資源屬性。它可以通知訂閱者屬性值發生了變化。
這種功能是由另外一個名為 Trigger Service 的 MDS 服務提供的。它與 MDS Index Service 類似,都要從資源中搜集數據,但是它同時還要對所搜集的數據進行監視,這樣就可以在數據到達某個極限值時執行某些預定的操作。Trigger Service 的配置就是訂閱某些屬性,并指定當某個屬性值達到某個預定的極限時應該采取什么操作。要采取的操作可以非常復雜,例如當利用率太高時提供更多資源;也可以非常簡單,例如通知系統管理員某個文件系統已經滿了。MDS Trigger Service 通過 Web 服務提供此功能。客戶機使用這個 Web 服務來注冊觸發器事件。為了進行注冊,客戶機要提供程序的名字、一個 XPath 查詢表達式以及一個值。當 XPath 查詢所返回的值等于注冊時所提供的值時,就運行這個程序。MDS Trigger Service 通過對所搜集到的信息和在 MDS Trigger Service 注冊和配置文件中所指定的條件進行比較,來提供這種功能。
位置 1. Trigger Service 注冊和配置文件的位置
$GLOBUS_LOCATION/etc/globus_wsrf_mds_trigger/trigger_registration_aggregation.xml
|
這個配置文件使用 XPath 查詢表達式的格式定義了一些規則。每個規則都有一個當滿足該條規則時所要執行的操作,以及該操作重復的頻率。下面這個例子實現了觸發器規則、相關操作以及頻率的語法,這些都是在前面的觸發器注冊和配置文件中指定的。
清單 1. Trigger Service 注冊的例子
<trigger:TriggerRuleType>
<trigger:matchingRule>//*[local-name()='GLUECE']</trigger:matchingRule>
<trigger:actionScript>glue-trigger-action.sh</trigger:actionScript>
<trigger:minimumFiringInterval>600</trigger:minimumFiringInterval>
</trigger:TriggerRuleType>
|
MDS Aggregation Framework
MDS Index 和 Trigger Service 都是在 MDS Aggregation Framework 之上構建的。MDS Aggregation Framework 用來構造搜集和聚集數據的高層服務。這些聚集器服務將從各種資源搜集來的信息匯集到一個集中的位置。這個概念的范圍很廣,從在某個容器中運行的所有服務的集中注冊表,到一個網格范圍的 Index Service,這可以通過配置 Index Service 與其他 Index Service 一起來存放內容。Index Service 可以按照一種層次化的方式進行配置,上層可以從底層的 Index Service 中提取信息。上層 Index Service 可以當作是這個層次中的上游資源,底層 Index Service 可以當作是下游資源。Index Service 在這個層次中的位置是在層次配置文件中使用上游和下游服務這兩個術語進行定義的。
位置 2. MDS 層次文件的位置
$GLOBUS_LOCATION/etc/globus_wsrf_mds_index/hierarchy.xml
|
這個層次文件指定了上游和下游 Index Service 的 URL。下面這個樣例聲明中包括了主機名、端口和默認的 Index Service 的標識。清單 2 顯示了 Globus Toolkit 4 測試環境中上游和下游服務的聲明。
清單 2. 上游和下游服務聲明的例子
<upstream>https://gt4-primary:8443/wsrf/
services/DefaultIndexService</upstream>
...
<downstream>https://gt4-secondary:8443/wsrf/
services/DefaultIndexService</downstream>
|
MDS 資源屬性
正如前面介紹的,用戶可以向 Globus MDS 查詢資源的屬性。這些資源屬性代表了資源的配置和狀態。我們可以為永久資源和臨時資源維護一些屬性。Globus MDS 中的信息通過為資源數據關聯一個超時時間來保證其反映最新情況。這個值被稱為生命周期。MDS Index Service 中保存的所有服務都有一個相關的生命周期。如果在這個生命周期指定的時間內沒有更新,數據就過期了。這種方法可以通過只在相關的資源屬性進行更新時維護這些資源的配置和狀態,從而對臨時資源進行處理。當資源不再可用時,資源屬性就不會更新了,這些信息就會超時并被刪除。
MDS 資源特性
Globus MDS Index Service 信息是作為一組 Web Services Resource Framework(WSRF)資源屬性進行維護的。客戶機可以使用 WSRF get-property
和 WS-Notification subscribe
操作來查詢信息或在信息發生變化時收到通知。這些信息也可以使用命令行工具 wsrf-get-property
或 wsrf-query
進行查詢。Globus MDS Index Service 通過用 XML 格式提供所請求的信息來對查詢進行響應。下面這個例子執行了一個通用的 DefaultIndexService 查詢。–a
選項指定可以進行匿名驗證,–s
選項指定了服務的 URL,–z
選項定義了驗證類型可以是自己、主機或 none。請參閱 清單 3。
XPath 查詢
查詢可能會產生非常大的 XML 文檔。XPath 可以用來幫助定位 XML 中的不同部分。下面讓我們來看幾個例子,以此展示怎樣擴充簡單查詢來搜集更詳細的信息。下面這個例子可以通過統計那些屬性匹配 FreeCPU 狀態的 ComputingElements,來查詢空閑 CPU 的個數。
清單 4. 一個查詢空閑 CPU 的 wsrf 查詢
[globust@gt4-test sbin]$ wsrf-query -a -z none -s
https://127.0.0.1:8443/wsrf/services/DefaultIndexService
"count(//*[local-name()='GLUECE']/glue:
ComputingElement/ glue:State/@glue:FreeCPUs)"
2
|
利用前面的例子,下面這個查詢展示了一個布爾檢查,看是否有指定個數的 CPU 可用。請參閱 清單 5。
監視服務
我們已經討論了上面這些物理資源的概念,但是 MDS 還要監視服務的配置和狀態信息。MDS Index Service 會搜集有關容器上運行的其他服務的信息。服務指定了在 Aggregation Service 注冊信息時,要將哪些信息保存在 MDS 中。我們稍后會討論 Aggregation Service,但是首先介紹一下服務注冊這個主題。
服務可以使用 mds-servicegroup-add
命令進行注冊。每個注冊后的服務都有一個類似于前面介紹過的生命周期屬性的生命周期。如果某個服務的注冊項在一段指定的生命周期中沒有更新,就會過期。更新生命周期的一種方法是在后臺運行 mds-servicegroup-add
命令,這樣它就可以持續在 MDS 中更新服務注冊項并刷新服務的生命周期了。
MDS Aggregation Service 從所有的已注冊服務中搜集信息,并通過一個 Web 服務接口將這些服務信息提供給客戶機。Globus Toolkit 發行版本中提供了一個簡單的例子來展示如何在 MDS Aggregation Service 中注冊服務。這個例子使用了下面這個位置上的服務注冊定義文件。
位置 3. MDS 聚集注冊文件的位置
$GLOBUS_LOCATION/etc/globus_wsrf_mds_
aggregator/example-aggregator-registration.xml
|
這個樣例聚集文件定義了服務的注冊表。每個注冊項都定義了一個網格資源、該資源應該注冊的服務組以及服務配置參數。這個文件可以與 mds-servicegroup-add
命令一起維護網格資源與 Index Service 之間的注冊。這個文件定義了 Index Service 的位置,它被稱為默認的 Service Group End Point Reference。
清單 6. Index Service URL 被定義為默認的 Service Group End Point Reference
<defaultServiceGroupEPR>
<wsa:Address>https://gt4-test.tacc.utexas.edu:8443/
wsrf/services/DefaultIndexService</wsa:Address>
</defaultServiceGroupEPR>
|
example-aggregator-registration 文件中包含了 GRAM 和 RFT 服務的樣例注冊項。在 ServiceGroupRegistrationParameter 塊中定義的每個資源都要在 Index Service 中進行注冊。 清單 7 顯示了一個 GRAM 和 RFT Service 注冊項的例子。
MDS Aggregation Service 也可以對外部信息源的信息進行聚合。這些信息源可以代表本地服務可能需要的遠程資源。本地服務可以查詢 MDS Index Service 來定位遠程資源,并確定這些資源的狀態。舉例來說,下面這個例子就展示了將 Hawkeye 在默認的服務組中注冊為一個信息源。Hawkeye 是一個外部信息源的例子。它使用 Condor 技術(例如 ClassAds)來搜集和存儲有關 Condor 池中的資源的信息。清單 8 顯示了如何注冊 Hawkeye,這樣就可以通過 Index Service 來使用有關 Condor 的信息了。
清單 8. 聚集服務組的例子
<ServiceGroupRegistrationParameters
xmlns="http://mds.globus.org/servicegroup/client" >
<RegistrantEPR `
xmlns:agg="http://mds.globus.org/aggregator/types"
xmlns:gram="http://www.globus.org/namespaces/2004/10/gram/job"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
<wsa:Address>
https://gt4-test:8443/wsrf/services/mds/test/subsource/IndexServiceEntry
</wsa:Address>
<wsa:ReferenceProperties>
<gram:ResourceID>Hawkeye</gram:ResourceID>
</wsa:ReferenceProperties>
</RegistrantEPR>
<RefreshIntervalSecs>600</RefreshIntervalSecs>
<Content xsi:type="agg:AggregatorContent"
xmlns:agg="http://mds.globus.org/aggregator/types">
<agg:AggregatorConfig xsi:type="agg:AggregatorConfig">
<agg:ExecutionPollType>
<agg:PollIntervalMillis>60000</agg:PollIntervalMillis>
<agg:ProbeName>globus-mds-cluster-hawkeye</agg:ProbeName>
</agg:ExecutionPollType>
</agg:AggregatorConfig>
<agg:AggregatorData/>
</Content>
</ServiceGroupRegistrationParameters>
|
當服務進行注冊時,它們可以提供搜集服務信息的程序名。這個程序稱為執行聚集器,在清單 8 中是使用 ProbeName
的形式指定的。MDS Aggregator Service 可以查詢資源屬性信息,也可以訂閱資源屬性信息,這樣就可以推動后續的更新了。要注冊服務,可以使用位置 3 所給出的 example-aggregator-registration 文件作為 mds-servicegroup-add
命令的參數。下面這個例子展示了使用 mds-servicegroup-add
命令來注冊默認的 example-aggregator-registration.xml 文件中所定義的服務。–s
參數告訴 MDS 這些服務應該要進行注冊。請參閱 清單 9。
可以使用 wsrf-query
命令驗證服務是否成功注冊。下面這個例子顯示了一個 ContainerRegistryService 查詢,用來獲得容器中正在運行的服務的地址。要在另外一個環境中使用這個查詢,請替換 URL 的主機名部分。
清單 10. 使用 wsrf-query 命令查詢注冊表地址的例子
wsrf-query -s https://gt4-test.tacc.utexas.edu:8443/wsrf/
services/ContainerRegistryService
"/*/*/*/*[local-name()='Address']"
|
MDS 聚集類型
我們已經介紹過 Web 服務會發布資源屬性。一個服務應該注冊的最小資源屬性集包括服務名、服務的版本號以及這個服務是何時啟動的。有些服務(例如 GRAM 或 RFT)會發布其他信息或更詳細的信息。MDS 中的信息是使用 3 個聚集器源(Aggregator Source)進行搜集的。這 3 個聚集源是 Query Aggregator、Subscription Aggregator 和 Execution Aggregator。
前面用來展示服務組注冊的那個例子就是一個 Execution Aggregator。Query Aggregation Source 會對注冊的服務進行挑選來產生信息。Subscription Aggregation Source 訂閱服務數據,這樣在服務數據值發生變化時,就可以接收到通知。Execution Aggregation Source 運行一個程序來搜集信息。發布資源屬性或用來搜集服務數據的程序有時稱為信息提供者(Informational Providers)。GRAM 就是一個信息提供者,因為它會發布有關網格資源的 CPU 和內存信息,以及與作業隊列和所提交的作業有關的調度器信息。類似地,可靠文件傳輸服務(RFT)也是一個信息提供者,它發布的是有關傳輸器和服務器的狀態信息。除了這些信息提供者(它們都是 Globus 發行版中的一部分)之外,MDS 還可以與其他外部信息提供者進行集成,例如 Ganglia 和 Hawkeye。
Ganglia 是一個分布式的監視系統,主要用來監視高性能系統,例如集群。Hawkeye 是一個監視系統,它使用 Condor 工具和 ClassAd 機制來收集有關分布式資源的信息。Ganglia 和 Hawkeye 使用 GLUE 模式的 CML 映射來搜集資源信息,并將這些信息發送到一個 GRAM 服務,這些信息將在這個服務中作為資源屬性發布。Ganglia 信息包括主機屬性,例如主機名、處理器、內存、操作系統以及文件系統,還有負載信息。如果在 gluerp XML 文件中定義并配置了適當的信息提供者,MDS 就可以匯集 Hawkeye 或 Ganglia 的信息。
位置 4. GLUE 資源提供者的位置
$GLOBUS_LOCATION/etc/globus_wsrf_mds_
aggregator/example-aggregator-registration.xml
|
Globus 默認的配置說明沒有信息提供者。要指定 Hawkeye 或 Ganglia 作為信息提供者,請修改 gluerp.xml 文件中的適當項,這個文件位于 Globus 安裝目錄中的 etc/globus_wsrf_mds/usefulrp 目錄中。下面這個例子展示了指定 Hawkeye 作為信息提供者的正確定義。后面的例子將展示如何配置 Ganglia 作為信息提供者。
清單 11. 信息提供者注冊項
<config xmlns="http://mds.globus.org/2004/10/gluerp-config">
<defaultProvider>shell /usr/local/globus/globus-4.0.0/
libexec/globus-mds-cluster-hawkeye </defaultProvider>
</config>
...
<config xmlns="http://mds.globus.org/2004/10/gluerp-config">
<defaultProvider>java org.globus.mds.usefulrp.glue.
GangliaElementProducer</defaultProvider>
</config>
|
webMDS
我們在前面已經看到可以使用 wsrf-query
命令來查詢 MDS 信息。實際上,MDS 信息也可以使用 webMDS 進行查看。webMDS 是一個用來查看 MDS 中所包含的資源屬性信息的前端。webMDS 是一個 servlet,它可以查詢 Globus MDS Index Service,并使用 XSLT 轉換對數據進行格式化,從而可以很好地在 Web 瀏覽器中顯示。
Web 管理員可以使用 HTML 表單選項定制 webMDS。他們可以配置不同的插件來搜集數據,并使用 XSLT 轉換對這些數據進行格式化,從而創建自己的定制視圖。webMDS 可以配置為從 MDS 中的各種源搜集信息,并使用 XSL 轉換對這些信息進行過濾。如果 Globus Toolkit 是使用默認配置安裝的,那么 webMDS 就可以查詢 MDS Index Service,而不用修改任何配置。我們測試環境中使用的 webMDS URL 如清單 12 所示。要在另外的環境中使用 webMDS,請使用您自己的主機名替換其主機名部分,如果您不是在默認端口上運行容器的,還需要修改端口號。
清單 12. webMDS URL
http://gt4-test.tacc.utexas.edu:9080/webmds
|
可以通過編輯下面的 indexinfo 文件并修改默認的 URL 來改變 webMDS URL :
位置 5. MDS 聚集注冊文件的位置
$GLOBUS_LOCATION/lib/webmds/conf/indexinfo
|
要部署 webMDS,首先為 Globus (GLOBUS_LOCATION)
和 Tomcat (CATALINA_HOME)
設置環境變量,然后使用下面的命令為 Tomcat 創建一個 context 文件:
清單 13. 創建 webMDS context 文件
$GLOBUS_LOCATION/lib/webmds/bin/webmds-create-contex-file
\ $CATALINA_HOME/conf/Catalina/localhost
|
在成功運行這個命令創建 context 文件之后,請重新啟動 Tomcat,以便使用新的配置信息。重新啟動 Tomcat 可以使用下面的命令:
清單 14. 重啟 Tomcat 容器
$CATALINA_HOME/bin/shutdown.sh
…
$CATALINA_HOME/bin/startup.sh
|
重啟 Tomcat 容器之后,可以在瀏覽器的地址欄中鍵入 webMDS 的 URL(請參閱清單 12)來訪問 webMDS。這個 URL 中需要替換上您安裝使用的主機名和端口號。注意,這是 Tomcat 中運行 webMDS 的 URL,而不是在 Globus 容器中運行的 MDS 服務的 URL。
這個樣例表單是由 Globus 發行版提供的,用來展示 webMDS 的功能。也可以使用模板來創建新的定制請求。
通過 webMDS 來查詢 Index Service 可以顯示在 Index Service 中注冊的資源。每個服務都提供了一種資源類型、惟一標識符和一個鏈接(指向更詳細的信息)。選擇資源項可以產生有關資源的詳細信息。我們已經介紹過 GRAM 和 RFT 服務都在 Index Service 中進行了注冊。圖 1 是一個顯示與 RFT 服務有關的詳細信息的例子。
圖 1. RFT 服務的 webMDS 信息
如果 GRAM 配置用來與資源管理器一起使用,例如 LSF、PBS 或 Condor,那么每個資源都會存在這樣一個注冊項。
圖 2 和圖 3 顯示了與 LSF 服務有關的詳細信息。
圖 2. globus-mds-LSF 例子 1
圖 3. globus-mds-LSF 例子 2
圖 4 顯示了與 Condor 服務有關的詳細信息。
圖 4. globus-mds-condor_cluster 例子
webMDS 是 MDS Index Service 的一個簡單易用的接口。我們在前面已經展示了 mds-servicegroup-add
命令可以用來在 MDS 中注冊服務,聚集源可以配置為對來自服務和外部信息提供者的信息進行匯集。這些信息提供者運行了一個程序來搜集信息,它們都是 Execution Aggregators。這很容易展示,可以手工運行信息提供者,并驗證這些信息和格式與通過 webMDS 所提供的信息和格式完全相同。下面這個例子顯示了 Hawkeye 信息提供者的情況,這是由清單 8 中下面這一行定義的:
<agg:ProbeName>globus-mds-cluster-hawkeye</agg:ProbeName>
|
請參見 清單 15。
結束語
我們首先概要介紹了 Globus MDS,然后了解了某些底層服務的詳細知識。Index Service 是一個注冊表,負責搜集信息并以資源屬性的形式來發布這些信息。Trigger Service 使客戶機可以訂閱資源屬性,并在數據達到某個極限值時執行預定義的操作。這些服務都是構建在 Aggregation Service 之上的,后者也可以對來自外部信息源的信息進行聚集。這些信息可以匯集到一個集成的注冊表中,稱為網格 Index Service。Index Service 以編程方式向客戶機提供了資源屬性信息,這可以通過 Web 服務、命令行接口或瀏覽器來接收。