![]() | |
Sun Java System Message Queue 3 2005Q4 管理指南 |
第 9 章
使用代理程式叢集Message Queue Enterprise Edition 支援代理程式叢集的使用:代理程式的群組一起工作,為用戶端提供訊息傳送服務。叢集可使訊息伺服器透過分散用戶端的連線至數個代理程式,來調整其訊息流量的作業。如需叢集和其運作方式的一般說明,請參閱「Message Queue 技術摘要」。
本章描述如何管理代理程式叢集、將叢集與代理程式連線並進行配置。它包含下列各節:
叢集配置特性您可以為叢集的每個代理程式成員指定叢集配置特性以定義叢集。您可以為每個叢集中的代理程式個別地設定這些特性,但通常較方便的做法是將其集合至所有代理程式所參照的中央叢集配置檔案 中。這樣可以防止違反合約的設定,並確保叢集中的所有代理程式都能共用相同且一致的配置資訊。
叢集配置特性詳述於表 14-9 中。這些部分包括:
- imq.cluster.brokerlist 會將主機名稱和連接埠號賦予所有屬於叢集的代理程式。
- imq.cluster.masterbroker 指定哪一個代理程式 (若有) 為記錄狀態變更的主代理程式。
- imq.cluster.url 指定叢集配置檔案 (若有) 的位置。
- imq.cluster.hostname 將主機名稱或 IP 位址賦予叢集連線服務,用於在叢集的各代理程式之間進行內部通訊。如果有多個主機,此設定才會有用:例如,如果一部電腦中有多個網路介面卡。
- imq.cluster.port 將連接埠號賦予叢集連線服務。
- imq.cluster.transport 指定叢集連線服務所使用的傳輸協定,例如 tcp 或 ssl。
您可以單獨設定個別代理程式的 hostname 和 port 特性,但是叢集中所有代理程式的 brokerlist、masterbroker、url 和 transport 值必須相同。
以下各節描述如何使用叢集配置檔案,以個別或集中的方式,設定每個叢集中代理程式的叢集配置特性。
設定個別代理程式的叢集特性
您可以在代理程式的實例配置檔案中 (或啟動代理程式時的指令行上) 設定叢集配置特性。例如,若要建立的叢集包含了 host1 連接埠 9876 上、host2 連接埠 5000 上和 ctrlhost 預設連接埠 (7676) 上的代理程式,三個代理程式的實例配置中都將包含以下的特性:
imq.cluster.brokerlist=host1:9876,host2:5000,ctrlhost
請注意,如果您需要變更叢集配置,則此方法要求更新叢集中所有代理程式的實例配置檔案。
使用叢集配置檔案
基於一致性以及便於維護的考量,建議您將所有的共用叢集配置特性集合至單一叢集配置檔案中,而不要為每個代理程式個別地進行設定。在此方法中,每個代理程式的實例配置檔案都必須設定 imq.cluster.url 特性指向叢集配置檔案的位置:例如,
imq.cluster.url=file:/home/cluster.properties
叢集配置檔案接著會為叢集中的所有代理程式定義共用配置特性,例如要連線的代理程式清單 (imq.cluster.brokerlist)、用於傳輸協定的叢集連線服務 (imq.cluster.transport),以及 (可選擇) 主代理程式的位址 (imq.cluster.masterbroker)。以下的程式碼定義與上一個範例中相同的叢集,以及在 ctrlhost 上執行,且作為主代理程式的代理程式:
imq.cluster.brokerlist=host1:9876,host2:5000,ctrlhost
imq.cluster.masterbroker=ctrlhost
管理叢集本節說明如何連線至一組代理程式以形成一個叢集、將新的代理程式新增至現有叢集,以及從叢集中移除代理程式。
連線代理程式
有兩種通用方法可將代理程式連線至叢集:從指令行 (使用 cluster 選項) 或在叢集配置檔案中設定 imq.cluster.brokerlist 特性。無論您使用哪種方法,您啟動的每個代理程式每 5 秒鐘會嘗試連線至其他代理程式;一旦啟動此叢集中的主代理程式 (如果已配置),連線即可成功。如果叢集中有代理程式比主代理程式先啟動,則此代理程式將保持暫停狀態,從而拒絕用戶端連線,直到主代理程式啟動時;然後暫停的代理程式的全部功能將自動可用。
若要從指令行配置代理程式叢集,請在啟動每個代理程式叢集時,使用 imqbrokerd 指令的 -cluster 選項,指定叢集的完整代理程式清單。例如,以下指令啟動新的代理程式,並將其連線至在 host1 的預設連接埠 (7676) 上執行的代理程式、在 host2 的連接埠 5000 上執行的代理程式,以及在預設主機 (localhost) 的連接埠 9876 上執行的代理程式:
imqbrokerd -cluster host1,host2:5000,:9876
一個更適合用於生產系統的替代方法,就是建立一個使用 imq.cluster.brokerlist 特性的叢集配置檔案以指定要連線的代理程式清單。叢集中的每個代理程式均必須將自己的 imq.cluster.url 特性設定為指向此叢集配置檔案。
Linux 必要條件:設定 IP 位址
有一個將代理程式連線至 Linux 系統中叢集的特殊必要條件。一些 Linux 安裝程式會自動將 localhost 項目設定為網路迴路的 IP 位址 (127.0.0.1)。您必須設定系統的 IP 位址,這樣叢集中所有代理程式的位址才會正確。
請在參與叢集的所有 Linux 系統中檢查 /etc/hosts 檔案,完成一部分的叢集設定。如果系統使用的是靜態 IP 位址,請編輯 /etc/hosts 檔案,為 localhost 指定正確的位址。如果位址是以網域命名服務 (DNS) 註冊,請編輯 /etc/nsswitch.conf 檔案以變更項目的順序,則系統可以在參考本機 hosts 檔案之前執行 DNS 查找。/etc/nsswitch.conf 檔案中的行應該如下所示讀取:
hosts:dns files
代理程式之間的安全連線
要求叢集中代理程式間的加密訊息傳送的安全性時,您必須配置叢集連線服務以使用 SSL 型傳輸協定。針對叢集中的每個代理程式,設定 SSL 型連線服務,如使用 SSL 型服務中所述。然後再從叢集配置檔案,或個別將每個代理程式的 imq.cluster.transport 特性設定為 ssl。
將代理程式新增至叢集
將新的代理程式新增至叢集的程序取決於叢集是否使用叢集配置檔案。
使用叢集配置檔案將新的代理程式新增至叢集
- 將此新代理程式新增至叢集配置檔案中的 imq.cluster.brokerlist 特性。
- 向叢集中的每個代理程式發出以下指令:
imqcmd reload cls
此指令強制所有代理程式重新載入叢集配置,並確保此叢集中代理程式的所有永久性資訊均為最新的。
- (可選擇) 在代理程式的 config.properties 檔案中設定 imq.cluster.url 特性的值,以指向叢集配置檔案。
- 啟動新的代理程式。
如果您並未執行步驟 3,請使用 imqbrokerd 指令行上的 -D 選項以設定 imq.cluster.url 的值。
不使用叢集配置檔案將新的代理程式新增至叢集
您可以編輯 config.properties 檔案或使用 imqbrokerd 指令行上的 -D 選項來設定以下特性的值:
從叢集中移除代理程式
您用來從叢集中移除代理程式的方法,取決於您原先是透過指令行或者是藉由中央叢集配置檔案來建立叢集。
使用指令行移除代理程式
如果您已使用指令行的 imqbrokerd 指令將代理程式連線至叢集,您必須停止各代理程式然後重新啟動,並在指令行上指定一組新的叢集成員。程序如下:
使用指令行從叢集中移除代理程式
使用叢集配置檔案移除代理程式
如果您原本使用中央叢集配置檔案中的 imq.cluster.brokerlist 特性來指定叢集的成員代理程式以建立叢集,您就不需要為了移除其中一個代理程式而停止所有的代理程式。反之,您只要編輯配置檔案來排除要移除的代理程式,以強制剩餘的叢集成員重新載入叢集配置,並重新配置已排除的代理程式,這樣它就不再指向相同的叢集配置檔案。程序如下:
使用叢集配置檔案從叢集中移除代理程式
主代理程式叢集可選擇性地擁有一個主代理程式,它可維護配置變更記錄以記錄叢集永久性狀態中的任何變更。無論在叢集配置檔案或個別代理程式的實例配置檔案中,主代理程式都是由 imq.cluster.masterbroker 配置特性所識別。
配置變更記錄包含了與叢集相關聯之永久性實體中的變更資訊,例如長期訂閱和管理員建立之實體目標。叢集中的所有代理程式會在啟動期間參考主代理程式,以更新這些永久性實體的資訊。關於主代理程式發生故障所導致的無法同步化,請參閱當主代理程式無法使用時,以獲得更多資訊。
管理配置變更記錄
由於配置變更記錄包含了重要資訊,您必須定期進行備份,使其能夠在發生故障的情況下復原。雖然從備份中復原將會失去備份後叢集永久性狀態中的任何變更,但經常定期備份可儘量減低此潛在的資訊遺失。備份與復原作業可以有效地壓縮和最佳化包含在配置變更記錄中的變更歷史,且配置變更記錄能夠隨著時間而迅速增長。
備份配置變更記錄
使用 imqbrokerd 指令的 -backup 選項來指定備份檔案的名稱。例如:
imqbrokerd -backup mybackuplog
復原配置變更記錄
當主代理程式無法使用時
由於叢集中的所有代理程式都需要主代理程式來執行永久性作業,當主代理程式無法使用時,以下叢集中所有代理程式的 imqcmd 子指令都會傳回一個錯誤:
自動建立的實體目標和暫存目標不受影響。
在未配置主代理程式的環境中,任何嘗試建立或取消長期訂閱的用戶端應用程式都會收到一個錯誤。但是用戶端可以指定並與現有的長期訂閱進行互動。