狀態工作執行緒參考

簡介

Tomcat Connectors 有一種特殊的工作執行緒,稱為狀態工作執行緒。狀態工作執行緒不會將要求轉送至 Tomcat 執行個體。它允許在執行階段擷取狀態和組態資訊,並進一步動態變更許多組態項目。這可透過簡單的嵌入式網路介面來完成。

當與負載平衡工作執行緒搭配使用時,狀態工作執行緒特別強大。

本文件不會說明狀態工作執行緒的 HTML 使用者介面。到目前為止,它非常簡單,所以請直接使用即可。本文件會嘗試說明狀態工作執行緒較不顯著的功能。我們也會完整說明各種要求參數及其意義,以便您將狀態工作執行緒包含在自動化腳本中。

狀態工作執行緒的文件從 jk 1.2.20 開始

使用模式

動作

狀態工作執行緒知道下列動作

  • list:列出所有已組態工作執行緒的組態和執行階段資訊。輸出會先依全球資訊(版本資料)分組,然後是負載平衡器資訊,接著是 AJP 工作執行緒資訊,最後是圖例。對於負載平衡器,會有摘要部分,然後是每個成員工作執行緒的詳細資料。對於所有工作執行緒,我們也會包含 URL 對應(轉送定義)。
  • show:與 list 相同,但只顯示所選工作執行緒的資料
  • edit:產生表單以編輯所選工作執行緒的組態資料。有一種特殊的「edit」子類型,可輕鬆變更負載平衡器所有成員的一個屬性,例如其啟用狀態。
  • update:提交在編輯表單中所做的變更。注意:變更不會儲存在組態檔案中。一旦重新啟動網路伺服器,透過狀態工作執行緒所做的所有變更都會消失!另一方面,狀態工作執行緒所做的變更會在執行階段套用,而無需重新啟動網路伺服器。
  • reset:重設工作執行緒的所有執行階段統計資料。
  • 復原:將負載平衡器中處於錯誤狀態的成員標記為立即復原。
  • 版本:僅顯示 Web 伺服器和 JK 軟體的版本資訊
  • 傾印:列出原始工作人員組態。注意:傾印僅會包含啟動期間使用的組態。稍後由狀態工作人員本身的動態管理介面套用的任何變更都不會包含在此傾印中。傾印動作已新增至 1.2.27 版。

輸出格式

對於大多數動作,您可以在 4 種輸出格式之間進行選擇。

  • HTML:與瀏覽器互動使用
  • XML:當您的指令碼環境與 XML 相容時,主要用於自動化。此格式具有豐富的結構資訊,但不是基於行運作,因此您真的會想要將它與 XML 工具一起使用。
  • 屬性:此格式為基於行的格式,符合 Java 屬性檔案的規則。大多數結構資訊都包含在階層式金鑰中。對於組態性質的資訊,此格式應產生與您可以在 workers.properties 中使用的行非常相似的行。它不會產生完整的組態檔案!
  • 文字:簡單的文字輸出格式。
「編輯」動作僅對 HTML 輸出類型有意義。

使用者介面功能

在 HTML 檢視中,有一個自動重新整理功能,透過 HTML 的 meta 重新整理選項實作。一旦您啟動自動重新整理,UI 將會對所有動作尊重它,編輯、更新和維護除外。即使您瀏覽其中一個,只要您回到其他動作之一,自動重新整理就會再次啟動。

HTML 頁面的許多部分都可以最小化,如果它們對您來說不感興趣的話。有幾個「隱藏」連結,會收合部分資訊。此功能存在於下列資訊區塊中

  • 圖例:不要顯示「清單」和「顯示」動作中所呈現資訊的圖例
  • URI 對應:不要顯示工作人員的 URI 對應
  • 負載平衡工作人員:不要顯示「lb」類型的工作人員
  • AJP 工作人員:不顯示 ajp 類型的員工
  • 平衡器成員:不顯示有關負載平衡器每個成員的詳細資訊
  • 負載平衡器設定:不顯示負載平衡器的設定資料
  • 負載平衡器摘要:不顯示負載平衡器的狀態摘要
  • AJP 設定:不顯示 ajp 工作人員負載平衡器成員的設定資料
最後三個最小化功能已新增至 1.2.27 版中。

關於 URL 地圖和虛擬主機的特別考量

注意:下列限制已從 1.2.26 版開始移除。

Apache 模組 mod_jk 使用關於虛擬主機的內部 Apache HTTP 伺服器基礎架構。缺點是狀態工作人員只能顯示 URL 地圖,因為虛擬主機是在其中定義的。它無法存取其他虛擬主機的設定物件。當然,您可以在使用的任何虛擬主機中定義狀態工作人員。除了 URL 地圖之外,呈現的所有資訊都相同,與呼叫狀態工作人員的虛擬主機無關。

記錄

狀態工作人員會將對設定所做的變更記錄到一般的 JK 記錄檔中,記錄層級為「資訊」。無效要求會記錄在記錄層級「警告」中。如果您要回報某些中斷的行為,記錄層級為「偵錯」甚至「追蹤」的記錄檔內容會很有用。

設定

基本設定

狀態工作人員的基本設定與一般 ajp 工作人員非常類似。您需要為工作人員指定名稱,以及您要對應到的 URL。設定的第一部分發生在 workers.properties 檔案中。我們定義一個名為 mystatus 的工作人員,類型為狀態

worker.list=mystatus
worker.mystatus.type=status
然後我們定義一個 URL,應該對應到此工作人員,也就是我們用來存取狀態工作人員功能的 URL。您可以使用 mod_jk 為您選擇的網路伺服器支援的任何方法。可能性包括 uriworkermap.properties 內的地圖、workers.properties 中的附加 mount 屬性,或 Apache HTTP 伺服器中的 JkMount。以下是 uriworkermap.properties 行的範例
/private/admin/mystatus=mystatus
URI 模式區分大小寫。

正如您將在以下章節中了解到的,狀態工作人員非常強大。您應使用 Web 伺服器的常規驗證和授權方法來保護此 URL。

您也可以使用不同的名稱和 URL 映射來定義狀態工作人員的多個執行個體。例如,您可能想要個別設定它們,然後允許特定人員群組使用它們

輸出自訂

workers.properties 項目有幾個屬性,允許自訂狀態工作人員輸出的各種面向。

屬性 css 可以設定為樣式表的 URL

worker.mystatus.css=/private/admin/static/mystatus.css
在撰寫 HTML 輸出時,狀態工作人員會包含行
<link rel="stylesheet" type="text/css" href="/private/admin/static/mystatus.css" />
mod_jk 發行版中沒有包含範例樣式表,而且預設 css 屬性為空,因此頁面中不會包含樣式表參考。狀態工作人員輸出頁面的 HTML 程式碼不包含任何類別屬性。如果您想要提供樣式表或改善 HTML 版面配置,請透過 tomcat 開發人員清單與我們聯絡。

屬性 prefix 可以自訂屬性輸出格式。狀態工作人員輸出的所有屬性名稱都將以這個前置詞開始。預設值為「worker」。

撰寫 XML 輸出時,幾個屬性會影響格式。屬性 ns 允許設定名稱空間前置詞,它將用於每個狀態工作人員 + 元素。預設值為「jk:」。將它設定為「-」會停用名稱空間前置詞。

您可以使用 xmlns 屬性將前置詞對應到名稱空間 URL。預設值為 xmlns:jk="https://tomcat.dev.org.tw"。將它設定為「-」會停用 URL 輸出。

最後,您可以透過 doctype 屬性指定 XML 文件類型。指定的字串將插入文件開頭,緊接在 xml 標頭之後。預設值為空。

保護存取

我們強烈建議您使用 Web 伺服器的內建存取控制功能來控制您選擇的狀態工作人員 URL 存取。不過,狀態工作人員的兩個設定屬性很有用。「read_only」屬性會停用狀態工作人員的所有功能,這些功能可用於變更其他工作人員的設定或執行階段狀態。唯讀狀態工作人員不會允許存取編輯、更新、重設或復原動作。預設值為 false,即讀/寫。若要啟用唯讀,您需要將它設定為 true

您可以設定兩個狀態工作人員,一個具有唯讀功能,並提供給較大的管理員群組,另一個將以完整功能使用,但僅限於較少數人

worker.list=jk-watch
worker.jk-watch.type=status
worker.jk-watch.read_only=true
worker.jk-watch.mount=/user/status/jk
worker.list=jk-manage
worker.jk-manage.type=status
worker.jk-manage.mount=/admin/status/jk
從版本 1.2.21 開始,使用者也可以透過 HTML GUI 中的連結,將讀取/寫入狀態工作者暫時切換為唯讀模式。使用者隨時可以將其切換回讀取/寫入。只有透過「read_only」屬性設定為唯讀的狀態工作者,才能完全安全地套用任何變更。

您可以使用的另一個屬性是 user。預設情況下,此清單為空,表示對使用者沒有限制。您可以將「使用者」設定為以逗號分隔的使用者名稱清單。如果您的網路伺服器設定為隨要求傳送使用者名稱,狀態工作者會檢查要求附帶的名稱是否包含在其「使用者」清單中。

使用者清單可以分割為「使用者」屬性的多次出現。

預設情況下,使用者名稱會區分大小寫。從版本 1.2.21 開始,您可以將屬性 user_case_insensitive 設定為 true。然後,比較將不區分大小寫。

服務可用性評分

對於負載平衡工作者,狀態工作者會顯示一些有趣的概觀資訊。它將負載平衡器的成員分類為「良好」、「不良」和「已降低」。此功能可以與外部升級程序結合使用。根據您的整體系統設計和作業實務,您偏好的分類可能會有所不同。

分類基於工作者的啟用狀態(已啟用、已停用或已停止),這是一種純設定狀態,以及執行時間狀態(正常或錯誤,可能包含子狀態閒置、忙碌、復原、探測和強制復原),這僅取決於執行時間情況。

執行時間子狀態具有以下含義

  • 正常(閒置):此工作者自上次平衡器維護以來未收到任何要求。預設情況下,平衡器維護每 60 秒執行一次。工作者應為正常,但由於我們一段時間沒有使用它,因此我們無法確定。此狀態在版本 1.2.24 之前稱為 N/A。
  • 正常(忙碌):此工作者的所有連線都用於要求。
  • 錯誤(復原):工作者已處於錯誤狀態一段時間,現在標記為復原。適合此工作者的下一個要求將使用它。
  • 錯誤 (探測):在將執行緒設定為復原後,我們收到適合這個執行緒的請求。現在這個請求正在使用此執行緒。
  • 錯誤 (強制復原):執行緒有錯誤,但我們沒有其他可用的執行緒,所以我們繼續使用它。

預設狀態執行緒群組將所有成員分為「良好」,這些成員有「啟動中」的啟動狀態,執行時間狀態不為「錯誤」且子狀態為空。而「不良」群組包含啟動狀態為「已停止」或執行時間狀態為「錯誤」且子狀態為空的成員。

不符合這兩個群組的執行緒會被視為「已降低」。

你可以定義其他規則來將執行緒分組為良好、不良和已降低。兩個屬性「良好」和「不良」可以用逗號分隔的單一字元清單或點分隔的配對來填入。每個字元代表一個可能的狀態的第一個字元,包括「啟動中」、「已停用」、「已停止」、「正常」、「閒置」、「忙碌」、「復原中」和「錯誤」。其他狀態「探測」和「強制復原」會永遠被評為等同於「復原中」。逗號分隔的項目會結合邏輯「或」,如果你結合組態和執行時間狀態並使用點號,它們會結合邏輯「且」。所以「良好」的預設值為「a.o,a.i,a.b,a.r」,而「不良」的預設值為「e,s」。

狀態執行緒會先嘗試與「不良」定義相符,如果失敗,它會嘗試與「良好」相符,最後,如果找不到「不良」或「良好」相符,它會選擇「已降低」。

請求參數

這個區段應該可以幫助你建立基於 jk 狀態管理介面的自動化腳本。這個介面在意義上是穩定的,我們只預期在未來新增更多參數。前一版本的現有參數會保留其原始語意。我們也預期 XML、屬性和文字輸出格式會保持穩定。所以如果你想要在你的自動化腳本中解析狀態執行緒輸出,請使用這些格式。

動作

動作由參數 cmd 決定。它可以有「list」、「show」、「edit」、「update」、「reset」、「recover」、「version」和「dump」這些值。如果你省略 cmd 參數,會使用預設的「list」。除了「list」、「refresh」、「version」和「dump」之外的所有動作都需要其他參數。

動作「dump」已在版本 1.2.27 中新增。

輸出格式

格式由參數 mime 決定。它可以有「html」、「xml」、「txt」和「prop」這些值。如果你省略 mime 參數,會使用預設的「html」。動作「edit」(編輯表單)只對「mime=html」有意義。

工作者選擇

對單一工作者執行的動作需要一或兩個額外參數來選擇此工作者。參數 w 包含工作者清單中工作者的名稱。如果動作對負載平衡器的成員(子工作者)執行,參數 w 會包含負載平衡器工作者的名稱,而額外參數 sw 會包含子工作者的名稱。

自動更新

在自動更新期間,參數 re 會包含以秒為單位的更新間隔。如果您省略此參數,自動更新將會關閉。

隱藏選項

參數 opt 包含已啟用選項的位元遮罩。預設值為 0,因此預設情況下不會啟用任何選項。下列選項存在

  • 0x0001:隱藏負載平衡器工作者的成員
  • 0x0002:隱藏 URL 對應
  • 0x0004:隱藏圖例
  • 0x0008:隱藏負載平衡器工作者
  • 0x0010:隱藏 ajp 工作者
  • 0x0020:僅允許對讀取/寫入狀態工作者執行唯讀動作。
  • 0x0040:隱藏負載平衡器組態
  • 0x0080:隱藏負載平衡器狀態摘要
  • 0x0100:隱藏 ajp 和負載平衡器成員工作者的組態
值 0x0040-0x0100 已新增至版本 1.2.27。

標準更新動作的資料參數

您可以使用編輯動作並最後按一下更新按鈕,來變更工作者的設定。但您也可以直接呼叫更新動作。下列要求參數包含您想要變更的組態資訊。首先是負載平衡器工作者的清單

  • vlr:重試次數(數字)
  • vlt:復原時間(秒)
  • vlee:錯誤升級時間(秒)
  • vlx:最大回覆逾時次數(數字)
  • vls:固定會話(0/f/n/off=關閉,1/t/y/on=開啟;不區分大小寫)
  • vlf:強制固定會話(0/f/n/off=關閉,1/t/y/on=開啟;不區分大小寫)
  • vlm:方法(0/r="要求",1/t="流量",2/b="忙碌程度",3/s="會話",4/s="下一個";不區分大小寫,僅使用第一個字元)
  • vll:鎖定(0/o="樂觀的",1/p="悲觀的";不區分大小寫,僅使用第一個字元)
現在是您可以用來變更負載平衡器成員設定的參數清單
  • vwa:啟用旗標(0/a="啟用",1/d="停用",2/s="停止";不區分大小寫,僅使用第一個字元)
  • vwf:負載平衡因子(整數權重)
  • vwn:用於黏著式工作階段的路由(字串)
  • vwr:重新導向以定義簡單的故障轉移規則(字串)
  • vwc:告訴 JK 您複製設計的網域(字串)
  • vwd:表示偏好的距離(整數)
最後,您可以使用下列參數清單變更 ajp 工作階段和 ajp 負載平衡成員的設定
  • vahst:主機(字串)
  • vaprt:埠(數字)
  • vacpt:connection_pool_timeout(數字)
  • vact:connect_timeout(數字)
  • vapt:prepost_timeout(數字)
  • vart:reply_timeout(數字)
  • var:retries(數字)
  • varo:recovery_options(數字)
  • vabl:busy_limit(數字)
  • vamps:max_packet_size(數字)
請注意,變更主機名稱或埠僅會對新的連線生效。已建立至舊位址的連線仍會繼續使用。不過,這個功能很有趣,因為您可以提供埠「0」的負載平衡成員,它會在啟動期間自動停止。稍後,當您知道最終名稱和埠時,可以設定它們,它們會自動啟用。

領先字元「v」已新增至 1.2.27 版的參數。變更 ajp 工作階段的設定也已在 1.2.27 版中推出。

有關所有參數的詳細資料,請參閱workers.properties 參考

負載平衡成員的切面編輯

您可以使用編輯動作在一個頁面上編輯負載平衡器或負載平衡器成員的所有設定。如果您想要同時編輯負載平衡器所有成員的一個組態切面,這將由參數 att 觸發。參數的值指出您想要編輯哪個切面。清單與前一節相同,但「vahst」和「vaprt」除外:「vwa」、「vwf」、「vwn」、「vwr」、「vwc」、「vwd」、「vacpt」、「vact」、「vapt」、「vart」、「var」、「varo」、「vabl」和「vamps」。但您需要將名稱放入參數 att 中,而不是將其用作要求參數名稱。

所有負載平衡器成員的共用切面的值將在名為「val0」、「val1」.... 的參數中提供。