workers.properties 組態

簡介

Tomcat 工作人員是 Tomcat 執行個體,負責執行 servlet 或代表某些網路伺服器執行任何其他內容。例如,我們可以有一個網路伺服器,例如 Apache HTTP Server,將 servlet 要求轉發到在它後方執行的 Tomcat 程序 (工作人員)。

上述情況非常簡單;事實上,我們可以組態多個 Tomcat 工作人員代表特定網路伺服器提供 servlet 服務。此類組態的原因可能是

  • 我們希望不同的內容由不同的 Tomcat 工作人員提供,以提供開發環境,讓所有開發人員共用相同的網路伺服器,但擁有自己的 Tomcat 工作人員。
  • 我們希望不同的虛擬主機由不同的 Tomcat 程序提供,以明確區分屬於不同公司的網站。
  • 我們希望提供負載平衡,也就是在每部機器上執行多個 Tomcat 工作人員,並在它們之間分配要求。

可能還有更多擁有多個工作人員的原因,但我想這個清單已經足夠了...

Tomcat 工作人員定義在稱為 workers.properties 的屬性檔案中,本教學課程將說明如何使用它。

組態檔案基礎

使用屬性檔案來定義 Tomcat 網路伺服器外掛程式中的工作人員(樣本檔案 workers.properties 可在 conf/ 目錄中取得)。

格式、註解、空白

檔案中的行定義屬性。一般格式為

<name>=<value>

點用於名稱的一部分,以表示組態階層。

無效的指令會在網路伺服器啟動期間記錄,並防止網路伺服器正常運作。有些指令已被棄用。儘管它們仍會運作,但您應該用其 後繼指令 取代它們。

有些指令允許多次使用。這會在以下表格中明確註明。

屬性名稱或值開頭和結尾的空白會被忽略。註解可以放在任何一行中,並以雜湊符號「#」開頭。雜湊符號之後的任何行內容都會被忽略。

布林屬性可以使用數字 0(假)和 1(真)作為值,或 off(假)和 on(真),或任何其他以字母 f(假)、n(假)、t(真)或 y(真)開頭的字串設定。這些值不分大小寫。在本文件中,我們將堅持使用 falsetrue

全域屬性

這些指令具有全域範圍。

指令 預設值 說明
worker.listajp13 JK 將使用的工作人員名稱的逗號分隔清單。在啟動時,網路伺服器外掛程式會實例化其名稱出現在 worker.list 屬性中的工作人員,這些也是您可以將要求對應到的工作人員。

此指令可以使用多次。

worker.maintain60 以秒為單位的 Worker 連線池維護間隔。如果設定為正值,JK 將掃描 worker.list 指令中指定的所有工作人員的所有連線,並檢查是否需要回收連線。

此外,任何負載平衡器每 worker.maintain 秒執行一次全域維護。在全域維護期間,負載計數器會衰減,並檢查錯誤中的工作人員的 recover_time

此功能已新增至 jk 1.2.13

工作人員屬性

每個工作人員組態指令包含三個以點分隔的字詞

worker.<worker name>.<directive>=<value>

第一個字永遠是worker。第二個字可以選擇的 worker 名稱。在負載平衡的情況下,worker 名稱有額外的意義。請參閱負載平衡器操作指南

worker 的名稱只能包含字母數字字元[a-z][A-Z][0-9][_\-],且區分大小寫。

變數、環境變數

您可以在workers.properties 檔案中定義和使用變數。若要定義變數,請使用語法

<variable_name>=<value>

變數名稱中允許使用句點,但您必須小心不要使用與標準指令衝突的變數名稱。因此,變數名稱絕不能以「worker.」開頭。

若要使用變數,您可以在屬性行的值側的任何位置插入「$(variable_name)」。如果在使用變數之前尚未定義變數,我們將在處理環境中搜尋具有相同名稱的變數,並使用其值。

屬性繼承

通常,您希望對各種 worker 使用相同的屬性值。若要減少組態行的重複並簡化檔案維護,您可以從一個 worker 繼承屬性到另一個 worker,甚至從範本繼承到實際 worker。

指令「reference」允許以階層方式在 worker 或 worker 範本之間複製組態。如果 worker castor 設定 worker.castor.reference=worker.pollux,則它會繼承 pollux 的所有屬性,但 castor 明確設定的屬性除外。

請注意,指令的值不僅是所引用的 worker 的名稱,還包括「worker.」的完整前綴。

若要使用範本 worker,只需將其定義為實際 worker,但不要將其新增到worker.list 或作為任何負載平衡器的成員。此類範本 worker 不必包含強制性指令。如果負載平衡器中有許多平衡 worker,且這些 worker 共用大部分屬性,這種方法特別有用。您可以在範本 worker 中設定所有這些屬性,例如使用前綴「worker.template1」,然後在所有平衡 worker 中簡單地參考這些共用屬性。

參考可以用來以階層方式繼承多個跳躍中的屬性。巢狀參考的最大深度為 20。小心不要引入參考迴圈!

此功能已新增至 jk 1.2.19

所有工作者指令清單

強制指令

強制指令是每個工作者必須包含的指令。沒有這些指令,工作者將無法使用或會發生異常行為。這些指令會在下列表格中以粗體字型標示。

指令 預設值 說明
類型ajp13 工作者的類型(可以是 ajp12ajp13ajp14jnilbstatus 之一)。工作者的類型會定義可套用至工作者的指令。

類型 ajp13 是 JK 用於 Web 伺服器和 Tomcat 之間通訊的首選工作者類型。此類型的工作者使用 socket 作為通訊管道。如需 ajp13 通訊協定堆疊的詳細說明,請瀏覽 AJPv13 通訊協定規範。類型 lb 用於 負載平衡工作者,類型 status 用於 狀態工作者

類型 ajp14 為實驗性質,不建議使用,類型 ajp12 已過時。

JNI 工作者不再受支援,而且可能無法運作。請勿使用。

連線指令

連線指令定義連線並維護 JK 和遠端 Tomcat 之間持續連線的連線池所需的參數。

指令 預設值 說明
主機localhost 後端 Tomcat 執行個體的主機名稱或 IP 位址。遠端 Tomcat 必須支援 AJP13 通訊協定堆疊。主機名稱可以包含嵌入的號,並以冒號 (':') 字元分隔。
8009 遠端 Tomcat 執行個體監聽已定義通訊協定要求的埠號。預設值取決於工作者類型。對於 ajp13 工作者,預設埠為 8009,而對於 ajp14 類型的工作者,該值為 8011
來源- 用於連線來源(傳出位址)的名稱或 IP 位址。它只能用於多宿主主機。

此功能為實驗性質,並已新增至 jk 1.2.41

socket_timeout0 JK 與遠端主機間通訊頻道使用的 Socket 超時時間(單位:秒)。如果遠端主機未在指定的超時時間內回應,JK 將產生錯誤並重試。如果設為零(預設值),JK 將在所有 Socket 作業中無限期地等待。
socket_connect_timeoutsocket_timeout*1000 JK 與遠端主機間通訊頻道使用的 Socket 連線超時時間(單位:毫秒)。如果遠端主機未在指定的超時時間內回應,JK 將產生錯誤並重試。

請注意,socket_timeout 的單位是秒,而 socket_connect_timeout 的單位是毫秒,因此絕對而言,預設的 socket_connect_timeout 等於 socket_timeout

此功能已新增至 jk 1.2.27

socket_keepalivefalse 當您的網頁伺服器與 Tomcat 引擎之間有防火牆時,應使用此指令,因為防火牆傾向於中斷非活動連線。此旗標會指示作業系統在非活動連線中傳送 KEEP_ALIVE 訊息(間隔取決於全球作業系統設定,通常為 120 分鐘),並因此防止防火牆中斷非活動連線。若要啟用 Keepalive,請將此屬性值設為 true

防火牆中斷非活動連線的問題在於,有時網頁伺服器或 Tomcat 沒有中斷的資訊,因此無法處理中斷。

ping_mode- 此旗標會決定在哪些情況下會探測已建立的連線以確保其仍正常運作。探測會使用一個空的 AJP13 封包 (CPing) 執行,並預期在某個超時時間內收到適當的回應 (CPong)。

此旗標的值可以是下列旗標的任意組合(多個值會在沒有任何分隔符號的情況下結合)

C(連線):如果設定,連線會在連線到後端後探測一次。超時時間可以由 connect_timeout 設定。如果未設定,將改用 ping_timeout 的值。

P(前置後置):如果設定,連線會在傳送每個要求到後端之前探測。超時時間可以由 prepost_timeout 設定。如果未設定,將改用 ping_timeout 的值。

I(間隔):如果設定,連線會在例行的內部維護週期中探測,但僅當其閒置時間超過 connection_ping_interval 時才會探測。超時時間可以由 ping_timeout 設定。

A 如果設定,將會使用上述所有探測。

此功能已新增至 jk 1.2.27。自版本 jk 1.2.6 起,已可透過 connect_timeoutprepost_timeout 使用連線和前置後置探測。

ping_timeout10000 等待 CPing 連線探測的 CPong 回答時使用的逾時時間(毫秒)。探測的啟動是透過 ping_mode 完成。ping_mode 連線和前置/後置逾時時間可透過 connect_timeoutprepost_timeout 個別覆寫。

基於相容性考量,只要設定 connect_timeoutprepost_timeout,就會使用 CPing/CPong,即使 ping_mode 為空也是如此。

此功能已新增至 jk 1.2.27

connection_ping_interval0 / (ping_timeout/1000)*10 使用區間連線探測時,會使用 CPing 封包探測閒置時間超過此區間(秒)的連線,以確認它們是否仍然運作。

區間探測可以透過 ping_mode 啟動,或將 connection_ping_interval 設定為大於 0 的值。如果您透過 ping_mode 啟動區間探測,則 connection_ping_interval 的預設值為 (ping_timeout/1000) * 10。請注意,ping_timeout 以毫秒為單位,而 connection_ping_interval 以秒為單位,因此絕對來說,預設的 connection_ping_intervalping_timeout 的 10 倍。

此功能已新增至 jk 1.2.27

connection_pool_size請參閱文字 這會定義建立到 AJP 後端的連線數,這些連線會作為連線池維護。這會限制每個網頁伺服器子程序可以建立的連線數。

連線池大小屬性僅用於多執行緒網頁伺服器,例如 Apache HTTP Server 和 Microsoft IIS。connection_pool_size 屬性需要反映一個網頁伺服器程序可以並行傳送給後端的請求數。這通常與每個網頁伺服器程序的執行緒數相同。JK 會自動為 Apache HTTP Server 找出這個數字,並將池大小設定為這個值。對於 IIS,預設值為 250(1.2.20 版之前:10)。

我們強烈建議將 IIS 的這個值調整為一個網頁伺服器程序可以並行傳送給後端的請求數。您應該測量在高峰活動期間您需要多少連線,而且沒有效能問題,然後再根據您的成長率增加一些百分比。最後,您應該檢查您的網頁伺服器程序是否能夠使用至少與您設定為池大小一樣多的執行緒。

不要在 Apache 2.x 搭配 prefork MPMApache 1.3.x 上使用大於 1 的 connection_pool_size!
connection_pool_minsize(pool+1)/2 連線池的最小大小,將會被維護。

預設值為 (connection_pool_size+1)/2。

不要在 Apache 2.x with prefork MPMApache 1.3.x 上使用大於 1 的 connection_pool_minsize 值!

此功能已在 jk 1.2.16 中新增。

connection_pool_timeout0 快取逾時屬性應與 connection_pool_minsize 搭配使用,以指定 JK 在關閉非活動 socket 之前,應將其保留在快取中的秒數。此屬性應用于減少 Tomcat 網路伺服器上的執行緒數。預設值為零,會停用關閉功能(無限逾時)。

如果子執行緒必須將要求轉送至 Tomcat,則每個子執行緒都可以開啟一個 ajp13 連線,並在 Tomcat 端建立一個新的 ajp13 執行緒。

問題在於,在建立 ajp13 連線後,子執行緒不會在終止之前放棄連線。由於網路伺服器會讓其子執行緒/執行緒持續執行以處理高負載,即使子執行緒/執行緒只處理靜態內容,您最終也可能在 Tomcat 端有許多未使用的 ajp13 執行緒。

您應將此時間間隔與 Tomcat 的 server.xml 中的 keepAliveTimeout 屬性(如果已明確設定)或 connectionTimeout 屬性保持同步。不過請注意,mod_jk 的值以秒為單位,而 server.xml 中的值必須使用毫秒。

connection_acquire_timeoutretries*retry_interval 工作執行緒在放棄之前,會等待快取中的一個可用 socket 的逾時時間。

預設值為 retries * retry_interval

此功能已新增至 jk 1.2.27

lbfactor1 僅用於負載平衡器的成員工作執行緒。

整數 lbfactor(負載平衡因子)表示我們預期此工作執行緒的工作量,或工作執行緒的工作配額。負載平衡因子會與構成負載平衡器的其他工作執行緒進行比較。例如,如果一個工作執行緒的 lbfactor 是另一個工作執行緒的 5 倍,則它將接收多五倍的請求。

負載平衡指令

負載平衡器是一個虛擬工作執行緒,不會實際與 Tomcat 工作執行緒通訊。它負責管理多個「實際」工作執行緒。如果工作執行緒的類型為 lb,則假設此工作執行緒為負載平衡器。請參閱工作執行緒的 type 指令。

負載平衡器指令定義建立連線至後端 Tomcat 伺服器遠端叢集所需參數。每個叢集節點都必須定義一個工作執行緒。

負載平衡器管理包括

  • 在 Web 伺服器中實例化工作人員。
  • 使用工作人員的負載平衡因子,執行加權循環負載平衡,其中較高的 lbfactor 表示較強大的機器(將會處理更多要求)
  • 讓屬於相同階段的要求在同一個 Tomcat 工作人員上執行。
  • 識別失敗的 Tomcat 工作人員,暫停對他們的要求,並改為轉移到 lb 工作人員管理的其他工作人員上。

整體結果是,由同一個 lb 工作人員管理的工作人員會進行負載平衡(根據他們的 lbfactor 和目前的使用者階段),而且也會轉移,因此單一 Tomcat 程序的死亡不會「殺死」整個網站。

如果您想要使用階段黏著性,您必須在 Tomcat 的 server.xml 中的 Engine 元素中設定不同的 jvmRoute 屬性。此外,由平衡器管理的工作人員名稱必須等於他們連接的 Tomcat 實例的 jvmRoute。

如果您對工作人員名稱使用 route 屬性,則可以解除工作人員名稱的限制。

下表指定 lb 工作人員可以接受的屬性

指令 預設值 說明
balance_workers- 負載平衡器需要管理的工作人員的逗號分隔清單。

此指令可對同一個負載平衡器使用多次。

此指令取代舊的 balanced_workers 指令,而且只能與 mod_jk 版本 1.2.7 和更新版本一起使用。

只要這些工作人員應該只透過負載平衡器工作人員使用,就不需要將他們也放入 worker.list 屬性中。
sticky_sessiontrue 指定是否應將具有 SESSION ID 的要求路由回同一個 Tomcat 工作人員。如果 sticky_session 設定為 true,則階段會黏著,否則 sticky_session 會設定為 false。當 Tomcat 使用可以跨多個 Tomcat 實例保留階段資料的階段管理員時,將 sticky_session 設定為 false

sticky_session 設定可以使用 Apache HTTP 伺服器環境變數 JK_STICKY_IGNOREsticky_ignore 的工作人員對應擴充功能覆寫。這已新增至版本 1.2.33

sticky_session_forcefalse 指定是否應拒絕有錯誤狀態工作階段的會話 ID 要求。如果 sticky_session_force 設為 true,且符合該會話 ID 的工作階段處於錯誤狀態,則用戶端會收到 500(伺服器錯誤)。如果設為 false,則會在另一個工作階段上執行故障轉移,並會遺失用戶端會話。此指令僅在您設定 sticky_session=true 時使用。

此功能已新增至 jk 1.2.9

方法要求 指定負載平衡器用於選出最佳工作階段的方法。請注意,會話黏著性和完美的負載平衡是相互衝突的目標,特別是在會話數量少時,或會話使用率極度不穩定時。對於大量的會話,這通常不是問題。

某些方法會注意,它們會在滑動時間視窗中彙總。它們會加總存取次數,且在每次執行全域維護方法時,負載計數器會除以 2。這通常每分鐘發生一次,視 worker.maintain 的設定而定。可以使用狀態工作階段檢查負載計數器的值。

如果方法設為 R[equest],則平衡器會使用要求數量來尋找最佳工作階段。存取次數會根據滑動時間視窗中的 lbfactor 分配。這是預設值,且應適用於大多數應用程式。

如果方法設為 S[ession],則平衡器會使用會話數量來尋找最佳工作階段。存取次數會根據滑動時間視窗中的 lbfactor 分配。如果會話是您的限制資源,則應使用此方法,例如,當您只有有限的記憶體,且您的會話需要大量的記憶體時。由於平衡器不會保留任何狀態,因此它實際上不知道會話數量。它會將沒有會話 Cookie 或 URL 編碼的每個要求計為新會話。此方法既不會知道何時會話會失效,也不會根據會話逾時或工作階段故障轉移修正其負載數量。如果您知道會在沒有會話 ID 的情況下呼叫要求 URL,但這些 URL 不應計為新會話,則應將它們新增至 stateless 對應規則擴充功能,或為它們設定 Apache HTTP 伺服器環境變數 JK_STATELESS

如果方法設定為 N[ext] 平衡器將再次使用會話數目來尋找最佳工作者。所有關於 Session 方法的說明也適用。與 Session 方法的差異在於會話計數在滑動時間視窗中如何處理。Next 方法不會除以 2,而是減去目前的最小數目。這應該有效地產生輪詢會話平衡,因此稱為 Next。在高負載下,兩個會話平衡方法將產生類似的分配,但如果您需要分配少量會話,Next 會更好。

如果設定為 T[raffic] 平衡器將使用 JK 和 Tomcat 之間的網路流量來尋找最佳工作者。存取將根據滑動時間視窗中的 lbfactor 分配。如果往返後端伺服器的網路是您的限制資源,則應使用此方法。

如果設定為 B[usyness] 平衡器將根據工作者目前正在處理的請求數目,選擇負載最低的工作者。此數目除以工作者的 lbfactor,然後選擇最低值(最不忙碌)的工作者。如果您的請求需要花費很長時間處理,例如下載應用程式,此方法特別有趣。此方法不建議一般使用,因為在某些硬體架構上的高負載下,忙碌計數器可能會出錯。

此功能已在版本 1.2.9 中新增。Session 方法已在版本 1.2.20 中新增,Next 方法已在版本 1.2.33 中新增。

鎖定樂觀 指定負載平衡器將用於同步共用記憶體執行時間資料的鎖定方法。如果鎖定設定為 O[ptimistic] 平衡器將不會使用共用記憶體鎖定來尋找最佳工作者。如果設定為 P[essimistic] 平衡器將使用共用記憶體鎖定。在悲觀鎖定的情況下,平衡器將更準確地工作,但可能會降低平均回應時間。

此功能已新增至 jk 1.2.13

重試次數2 此指令也存在於一般工作者中。對於那些工作者,它有 不同的意義在提出請求時,負載平衡器工作者將把請求分配給成員工作者。如果該成員工作者無法處理請求或無法處理請求,則請求將傳遞給另一個成員工作者,直到請求被處理、每個成員工作者都嘗試處理請求或 lb_retries 成員工作者已嘗試處理請求。

如果請求仍未處理,負載平衡器工作者將重複上述程序最多 retries 次(包括原始嘗試)。在每次重試之前,負載平衡器工作者將暫停 retry_interval 指令定義的時間。

請注意,這表示如果所有工作人員都失敗,則在傳回 504 回應給客戶端之前,將會有 worker.retries * min(lb.lb_retries,成員工作人員數量) * lb.retries 個要求。因此,對於具有四個成員和預設組態的負載平衡工作人員,如果所有工作人員都失敗,則在傳回 504 回應給客戶端之前,將會有 8 個要求。

在版本 1.2.16 之前,預設值為 3。

lb_retries2 在提出要求時,負載平衡器工作人員會將要求分配給成員工作人員。如果該成員工作人員無法處理要求或無法處理要求,則要求將傳遞給其他成員工作人員,直到處理要求、每個成員工作人員都嘗試處理要求或 lb_retries 個成員工作人員嘗試處理要求為止。

如果請求仍未處理,負載平衡器工作者將重複上述程序最多 retries 次(包括原始嘗試)。在每次重試之前,負載平衡器工作者將暫停 retry_interval 指令定義的時間。

請注意,這表示如果所有工作人員都失敗,則在傳回 504 回應給客戶端之前,將會有 worker.retries * min(lb.lb_retries,成員工作人員數量) * lb.retries 個要求。因此,對於具有四個成員和預設組態的負載平衡工作人員,如果所有工作人員都失敗,則在傳回 504 回應給客戶端之前,將會有 8 個要求。

此功能已新增至 jk 1.2.44。在新增此功能之前,負載平衡器工作人員的行為就好像 lb_retries 等於成員工作人員的數量。

狀態工作人員指令

狀態工作人員不會與 Tomcat 通訊。相反地,它負責負載平衡器管理。

指令 預設值 說明
css- 指定要使用的串聯樣式表的網址。
read_onlyfalse read_only=true 的狀態工作人員將不允許任何會變更其他工作人員執行階段狀態或組態的作業。這些作業包括編輯/更新/重設/復原。

此功能已新增至 jk 1.2.20

user- 這是與由網路伺服器驗證的使用者名稱進行比較的一份使用者清單。如果清單中不包含該名稱,則會拒絕存取。預設情況下,清單是空的,然後允許任何人存取。

此指令可以使用多次。

此功能已新增至 jk 1.2.20

user_case_insensitivefalse 預設情況下,使用者名稱會區分大小寫進行比對。您可以設定 user_case_insensitive=true 以不區分大小寫進行比對。這在 Windows 平台上特別有用。

此功能已新增至 jk 1.2.21

gooda.o、a.n、a.b、a.r 對於每個負載平衡器工作人員,狀態工作人員會顯示其成員狀態的摘要。有三個這樣的狀態,「良好」、「不良」和「降級」。

這些狀態會根據成員的啟用(啟用、停用、停止)和其執行階段狀態(正常、不適用、忙碌、復原中、探測中、強制復原、錯誤)來決定。預設情況下,如果成員的啟用為「啟用」且其執行階段狀態不為「錯誤」,則假設成員為「良好」。

您可以透過將值清單指定給「good」屬性來變更此對應。每個值都提供成員的可能比對,且一個比對就已足夠。每個值都是單一字元或兩個字元搭配句點「.」組合而成。單一字元是「active」、「disabled」、「stopped」、「ok」、「na」、「busy」、「recovering」、「error」等字詞的第一個字元。額外的狀態「probing」和「forced recovery」總是評為等同於「recovering」。如果值僅包含單一字元,則會假設具有此啟用或執行階段的所有成員都是良好的。啟用和執行階段的組合搭配句點「.」串接,僅適用於具有此啟用和狀態的成員。

如果負載平衡器的成員與「bad」狀態不符,則會先與「good」狀態進行比對,如果仍不符,則其狀態會為「degraded」。

此指令可以使用多次。

此功能已新增至 jk 1.2.20

bads,e 請參閱:「good」。

預設情況下,如果成員的啟用為「stopped」或其執行階段為「error」,則會假設成員為「bad」。

此指令可以使用多次。

此功能已新增至 jk 1.2.20

prefixworker 狀態工作執行緒在產生屬性輸出(mime=prop)時所使用的前置詞。每個屬性金鑰都將加上此值作為前置詞。

此功能已新增至 jk 1.2.20

nsjk 此指令可用於自訂狀態工作執行緒的 XML 輸出。如果設為 -,則不會使用任何命名空間。

此功能已新增至 jk 1.2.20

xmlns- 此指令可用於自訂狀態工作執行緒的 XML 輸出。如果設為 -,則不會使用任何 xmlns。

預設值設為 xmlns:jk="https://tomcat.dev.org.tw"

此功能已新增至 jk 1.2.20

doctype- 此指令可用於自訂狀態工作執行緒的 XML 輸出。此值將在 XML 標頭後插入輸出 XML 中。

此功能已新增至 jk 1.2.20

進階工作執行緒指令

此表格列出更進階的組態選項。其中大部分僅適用於某些類型的工作執行緒。我們使用縮寫 AJP 表示透過 workers.list 直接使用的 ajp13/ajp14 工作執行緒,LB 表示負載平衡器工作執行緒,以及 SUB 表示在負載平衡器工作執行緒中以次要工作執行緒或成員間接使用的工作執行緒。

指令工作執行緒類型預設值說明
connect_timeoutAJP、SUB0 連線逾時屬性會指示網路伺服器在建立連線後透過 ajp13 連線傳送 PING 要求。參數是等待 PONG 回覆的毫秒數延遲。預設值為零,會停用逾時(無限逾時)。

此功能已新增至 jk 1.2.6,以避免 Tomcat 暫停的問題,並需要 ajp13 ping/pong 支援,而此支援已在 Tomcat 3.3.2+、4.1.28+ 和 5.0.13+ 中實作。預設為停用。

prepost_timeoutAJP、SUB0 Prepost timeout 屬性會告知 Web 伺服器在將要求轉發給 AJP13 連線之前,在該連線上傳送 PING 要求。此參數是等待 PONG 回應的延遲時間(以毫秒為單位)。預設值為零,表示停用逾時(無限逾時)。

此功能已新增至 jk 1.2.6,以避免 Tomcat 發生問題,並需要 AJP13 ping/pong 支援,此支援已實作於 Tomcat 3.3.2+、4.1.28+ 和 5.0.13+。預設為停用。

reply_timeoutAJP、SUB0 此參數是在讀取事件期間等待成功執行的毫秒數。因此,這並非要求的完整回應時間逾時,而只是從 Tomcat 收到兩個封包之間的最長時間。通常最長的暫停時間是在傳送要求和取得回應的第一個封包之間。

如果逾時而未從 Tomcat 收到任何資料,Web 伺服器將不再等待回應的其餘部分,並會傳送錯誤訊息給用戶端(瀏覽器)。通常這並不表示要求也會在 Tomcat 後端中止。如果工作執行緒是負載平衡器的成員,負載平衡器可能會將工作執行緒置於錯誤狀態,並在其他成員上重試要求。另請參閱 max_reply_timeoutsretriesrecovery_options

預設情況下(值為零),Web 伺服器將無限期等待,這可能會造成問題。如果您設定 reply_timeout,如果您有執行時間較長的 servlet,請仔細調整。

reply_timeout 可以使用 Apache HTTP 伺服器環境變數 JK_REPLY_TIMEOUTreply_timeout 的工作執行緒對應延伸模組覆寫。

此功能已新增至 jk 1.2.6,以避免 Tomcat 發生問題,並適用於支援 AJP13 的所有 servlet 引擎。變數 JK_REPLY_TIMEOUT 和工作執行緒對應延伸模組已新增至版本 1.2.27

重試次數AJP、SUB2 此指令也存在於負載平衡器工作執行緒中。對於這些工作執行緒,它有 不同的意義工作執行緒在發生通訊錯誤時傳送要求給 Tomcat 的最大次數。每次重試都會透過另一個連線進行。第一次已計算在內,因此 retries=2 表示錯誤後重試一次。在重試之前,工作執行緒會等待可設定的休眠時間。

另請參閱屬性 recovery_options,以更精細地控制重試,以及 retry_interval 以進行休眠時間設定。

在版本 1.2.16 之前,預設值為 3。

retry_intervalAJP、SUB100 工作執行緒在執行任何重試之前休眠的時間(以毫秒為單位)。

此功能已新增至 jk 1.2.27

recovery_optionsAJP、SUB0 復原選項影響我們在偵測到 Tomcat 問題時應如何處理重試。我們重試的頻率由屬性 retries 控制。

這個屬性是一個位元遮罩。允許以下位元
1:如果 Tomcat 在收到要求後失敗,則不要復原
2:如果 Tomcat 在將標頭傳送給客戶端後失敗,則不要復原
4:如果我們在將答案寫回給客戶端(瀏覽器)時偵測到錯誤,則關閉與 Tomcat 的連線
8:總是復原 HTTP 方法 HEAD 的要求(即使設定了位元 1 或 2)
16:總是復原 HTTP 方法 GET 的要求(即使設定了位元 1 或 2)

此功能已新增至 jk 1.2.6。選項 4 已新增至版本 1.2.16,選項 8 和 16 已新增至版本 1.2.24

fail_on_statusAJP、SUB0 將此值設定為如果從 Servlet 容器傳回,則會導致工作人員失敗的 HTTP 狀態碼。使用此指令處理 Servlet 容器可以在短時間內臨時傳回非 200 回應的情況,例如在重新部署期間。

錯誤頁面、標頭和原始回應的狀態碼不會傳送回給客戶端。相反,要求將導致 503 回應。如果工作人員是負載平衡器的成員,則該成員將進入錯誤狀態。要求故障轉移和工作人員復原將使用通常的負載平衡器程序處理。

此功能已新增至 jk 1.2.20

jk 1.2.22 開始,可以定義多個以空格或逗號字元分隔的狀態碼。例如:worker.xxx.fail_on_status=500,503

jk 1.2.25 開始,您還可以告訴負載平衡器,如果回應傳回 fail_on_status 中的其中一個狀態碼,則不要將成員置於錯誤狀態。此功能透過在這些狀態碼前面加上負號來啟用。例如:worker.xxx.fail_on_status=-404,-500,503

busy_limitAJP、SUB0 如果設定為正數,則只有當工作人員目前處理的同時要求少於此數字時,才會使用該工作人員來處理要求。

請注意,這與 忙碌負載平衡 方法無關。

此功能為實驗性質,並已新增至 jk 1.2.41

max_packet_sizeAJP、SUB8192 此屬性設定 AJP 封包在位元組中的最大大小。它應該是 1024 的倍數。不是 1024 倍數的組態值將與 1024 的下一個倍數對齊。最大值為 65536。如果您從預設值變更,則必須同時變更 Tomcat 端上 AJP 連接器的 packetSize 屬性!packetSize 屬性在 Tomcat 6.0.2 之後可用。

通常不需要變更最大封包大小。在傳送憑證或憑證鏈時,已報告預設值有問題。

此功能已新增至 jk 1.2.19

prefer_ipv6AJP、SUBfalse 當使用 IPV6 支援編譯時,此指令會強制解析同時具有 IPV6 和 IPV4 位址的主機名稱的 IPV6 位址。如果沒有為給定的主機名稱定義 IPV6 位址,則此指令無效。如果僅定義 IPV6 位址,或者在 IPV4 或 IPV6 表示法中為「主機」使用 IP 位址,則此指令也無效。

此功能已新增至jk 1.2.38

secretAJP、SUB、LB- 您可以在 Tomcat AJP Connector 上設定一個機密關鍵字。然後,只有來自具有相同機密關鍵字的工作站的請求才會被接受。

在您的 Tomcat AJP Connector 組態中使用屬性secret="機密關鍵字"。(歷史備註:在 2020 年 2 月之前發布的 Tomcat 9.0、8.x、7.0 版本中,屬性名稱為requiredSecret,在 Tomcat 6.0 及更早版本中為request.secret。)

如果您在負載平衡器上設定機密,其所有成員都將繼承此機密。

此功能已新增至jk 1.2.12

mountAJP、LB- 工作站應處理的 URI 地圖的空格分隔清單。僅在工作站包含在 worker.list 中時才會使用。

此指令可針對同一個工作站多次使用。

max_reply_timeoutsLB0 如果您對負載平衡器工作站的成員使用reply_timeout,而且您想要容忍一些請求花費的時間比 reply_timeout 長,您可以將此屬性設定為一些正值。

執行時間長的請求仍會在等待資料的 reply_timeout 毫秒後逾時,但僅當超過max_reply_timeouts 個請求逾時時,對應的成員工作站才會進入錯誤狀態。更精確地說,每當負載平衡器執行其內部維護時(預設每 60 秒),這些錯誤請求的計數器就會除以 2。

此功能已新增至jk 1.2.24,以使reply_timeout對偶發執行時間長的請求的敏感度降低。

recover_timeLB60 復原時間是負載平衡器在工作站進入錯誤狀態後不會嘗試使用工作站的時間(以秒為單位)。僅在經過此時間後,錯誤狀態中的工作站才會標記為復原中,以便針對新請求嘗試使用該工作站。

不會在每次處理請求時檢查此間隔。相反,它會在執行全域維護期間進行檢查。兩次執行全域維護之間的時間由 worker.maintain 控制。

除非您了解影響,否則請勿將 recover_time 設定為非常短的時間。對錯誤狀態中的工作站的每次復原嘗試都是由實際請求執行的!

error_escalation_timeLBrecover_time / 2 將負載平衡器的成員設定為錯誤狀態是一件相當嚴重的事情。例如,這表示如果您需要黏著性,則會封鎖對個別節點的階段存取。

某些類型的錯誤偵測不會提供精確資訊,例如節點是否已完全中斷。在這些情況下,負載平衡器不會立即將節點設為錯誤狀態。只有在發生此類錯誤後,error_escalation_time 秒內沒有任何成功回應時,節點才會設為錯誤狀態。

此功能已新增至 jk 1.2.28

session_cookieLBJSESSIONID 包含路由識別碼的 Cookie 名稱,用於會話黏著性。路由識別碼是 Cookie 值中「.」字元之後的所有內容。

此功能已新增至 jk 1.2.27

session_pathLB;jsessionid 包含路由識別碼的路徑參數名稱,用於會話黏著性。路由識別碼是路徑參數值中「.」字元之後的所有內容。

此功能已新增至 jk 1.2.27

set_session_cookieLBfalse 啟用會話黏著性 Cookie 的產生。通常您不需要此功能。

某些 Web 架構會取代 Tomcat 會話管理,並使用不同的方式產生會話 ID。因此,Tomcat 新增至會話 ID 結尾的路由 ID 會遺失,我們無法再執行黏著式負載平衡。您可以使用下列步驟作為解決方法

  • 使用「session_cookie」屬性選擇非標準的 Cookie 名稱。
  • 將「set_session_cookie」屬性設為 true 以啟用 Cookie 傳送。
  • 將「session_cookie_path」屬性設為正確的應用程式 URI,例如「/myapp/」。

只有在要求不包含同名 Cookie,或該 Cookie 不包含負載平衡器可以滿足的路由 ID 時,才會傳送 Cookie。特別是在節點故障轉移後,我們會傳送新的 Cookie,將黏著性切換至新的節點。

此功能已新增至jk 1.2.38

session_cookie_pathLB- 只有當「set_session_cookie」設為 true 時,才會使用此屬性。請參閱「set_session_cookie」以取得說明。如果「session_cookie_path」的值為空 (預設值),則傳送的 Cookie 將不包含 PATH 資訊。

此功能已新增至jk 1.2.38

activationSUB已啟用 使用此指令,負載平衡器的平衡工作者可以設定為停用或停止。停用的工作者只會取得屬於該工作者階段的請求。停止的工作者不會取得任何請求。停止的工作者使用者會遺失其階段,除非使用叢集透過階段複製。

使用 dD 停用,使用 sS 停止。如果此指令不存在,則會使用已棄用的指令「disabled」或「stopped」。

此旗標可以使用 status worker 在執行階段變更。

此功能已新增至 jk 1.2.19

routeSUB工作者名稱 通常,負載平衡器中平衡工作者的名稱等於對應 Tomcat 執行個體的 jvmRoute。如果您要將對應於 Tomcat 執行個體的工作者包含在具有不同平衡組態(例如,停用、停止)的幾個負載平衡器中,您可以使用此屬性。

使用任意工作者名稱為每個負載平衡器和每個 Tomcat 執行個體定義一個獨立的工作者,並將工作者的 route 屬性設定為目標 Tomcat 執行個體的 jvmRoute。

如果此屬性留空,則會使用工作者的名稱。

此屬性可以使用 status worker 在執行階段變更。

如果 route 名稱包含句點,則句點之前的部分會用作網域名稱,除非明確設定 domain。

此功能已在 jk 1.2.16 中新增。
自動網域名稱規則已新增至 jk 1.2.20
此屬性已從 jvm_route 重新命名為 route,在 jk 1.2.20 中。

distanceSUB0 整數,用於表達負載平衡器工作者的平衡工作者之間的偏好。如果還有其他具有較低距離的可使用工作者,負載平衡器絕不會選擇某些平衡工作者。

只有在低於特定距離的所有工作者都出錯、停用或停止時,距離較大的工作者才有資格進行平衡。

此功能已在 jk 1.2.16 中新增。

domainSUB- 只有當工作者是負載平衡器的成員時,才能使用 domain 指令。共用相同網域名稱的工作者會視為單一工作者。如果使用 sticky_session,則網域名稱會用作階段路由。

此指令用於具有超過 6 個 Tomcat 的大型系統,以便能夠將 Tomcat 分成兩組,並因此降低它們之間的階段複製傳輸。

此功能已新增至 jk 1.2.8

redirectSUB- 設定為優先故障移轉工作者的名稱。如果符合 SESSION ID 的工作者處於錯誤狀態,則會改用 redirect 工作者。即使已停用,它仍會被使用,因此提供熱備援。

如果您透過「route」屬性明確設定路由,您必須將「redirect」設定為首選故障轉移工作者的此路由,而非其名稱。

此功能已新增至 jk 1.2.9

已棄用的工作者指令

以下指令過去已棄用。我們包含其文件,以防您需要使用較舊版本的 mod_jk。我們強烈建議您更新並不再使用它們。請移轉您現有的設定。

指令後繼預設值說明
cachesizeconnection_pool_size請參閱文字 此指令自 1.2.16 起已棄用。 Cachesize 定義建立到 AJP 後端的連線數,這些連線會作為連線池維護。它會限制每個網路伺服器子程序可以建立的連線數。

Cachesize 屬性僅用於多執行緒網路伺服器,例如 Apache HTTP Server 2.x(除了 prefork 之外的所有 MPM)和 IIS。cachesize 屬性應反映每個子程序的執行緒數。JK 會在使用執行緒 MPM 的 Apache HTTP Server 上找出每個子程序的執行緒數,並將其預設值設定為與目前的 Apache ThreadsPerChild 設定相符。對於 IIS,預設值為 10。

請勿在 使用 prefork MPM 的 Apache 2.xApache 1.3.x 上使用 cachesize 和大於 1 的值!
cache_timeoutconnection_pool_timeout0 此指令自 1.2.16 起已棄用。 Cache timeout 屬性應與 cachesize 搭配使用,以指定 JK 在關閉快取中的開放 socket 之前,應將其保留多久。此屬性應可用於減少 Tomcat 網路伺服器上的執行緒數。

如果子程序必須將要求轉送至 Tomcat,它可以開啟一個 ajp13 連線,在 Tomcat 端建立一個新的 ajp13 執行緒。

問題在於,在建立 ajp13 連線後,子執行緒不會在終止之前放棄連線。由於網路伺服器會讓其子執行緒/執行緒持續執行以處理高負載,即使子執行緒/執行緒只處理靜態內容,您最終也可能在 Tomcat 端有許多未使用的 ajp13 執行緒。

recycle_timeoutconnection_pool_timeout0 此指令自 1.2.16 起已棄用。告知網路伺服器在一段時間不活動後切斷 ajp13 連線的秒數。在為要求選擇端點,且指定的 socket 已開啟時,如果它在設定的時間內未被使用,它將會被關閉。這是確保不會有太舊的執行緒存在於 Tomcat 端的好方法,但您下次轉送要求時需要重新開啟 socket,這會產生額外成本。此屬性與 cache_timeout 非常類似,但也能在非快取模式中運作。如果設定為零(預設值),則不會進行回收。
balanced_workersbalance_workers- 此指令自 1.2.7 起已棄用。負載平衡器需要管理的工作者清單(以逗號分隔)。
disabledactivationfalse 此指令自 1.2.19 起已棄用。如果設定為 true,則工作者在成為負載平衡器成員時會被停用。此旗標可以使用 status worker 在執行階段變更。

此功能已新增至 jk 1.2.9

已停止activationfalse 此指令已於 1.2.19 之後不建議使用。如果設為 true,如果負載平衡器的成員,工作執行緒將會停止。此旗標用於停止黏著式工作執行緒的完整流量。只有在您有複製工作階段的叢集時,此旗標才有用。此旗標可以使用工作執行緒狀態在執行階段變更。

此功能已新增至 jk 1.2.11

jvm_routeroute工作者名稱 此指令已於 1.2.20 之後不建議使用。通常,負載平衡器中平衡工作執行緒的名稱等於對應 Tomcat 執行個體的 jvmRoute。如果您想要將對應於 Tomcat 執行個體的工作執行緒包含到具有不同平衡組態(例如,已停用、已停止)的數個負載平衡器,您可以使用此屬性。

針對每一個負載平衡器和 Tomcat 執行個體,使用任意工作執行緒名稱定義一個獨立的工作執行緒,並將工作執行緒的 jvm_route 屬性設為目標 Tomcat 執行個體的 jvmRoute。

如果此屬性留空,則會使用工作者的名稱。

此屬性可以使用 status worker 在執行階段變更。

此功能已在 jk 1.2.16 中新增。