<-
Apache > HTTP 伺服器 > 文件 > 第 2.4 版 > 模組

Apache 模組 mod_proxy_hcheck

支援的語言有:  en  |  fr 

說明mod_proxy 的負載平衡成員 (工作元件) 的動態健康檢查
狀態擴充功能
模組識別碼proxy_hcheck_module
原始檔mod_proxy_hcheck.c
相容性適用於 Apache 2.4.21 及後續版本

摘要

此模組提供負載平衡成員 (工作元件) 的動態健康檢查。此檢查可以在每個工作元件的基礎上啟用。這些健康檢查會獨立於實際的反向代理要求執行。

此模組需要mod_watchdog 的服務。

參數

健康檢查機制是透過使用額外的BalancerMember 來啟用的,而這些參數會透過 ProxyPass 以標準的方式設定。

此模組透過status 狀態 (標記) 定義新的負載平衡成員:C
當這個工作元件因為在健康檢查模組判定有故障而被標示為離線時,將設定此標記,而且可以透過 balancer-manager 來檢視(以及修改)。

參數 預設 說明
hcmethod 未執行動態健康檢查。選擇如下
方法說明附註
未執行動態健康檢查
TCP檢查是否可以建立連接至後端的 socket:例如「你啟動了嗎?」
OPTIONS透過 HTTP/1.0 傳送 HTTP OPTIONS 要求至後端*
HEAD透過 HTTP/1.0 傳送 HTTP HEAD 要求至後端*
GET透過 HTTP/1.0 傳送 HTTP GET 要求至後端*
OPTIONS11透過 HTTP/1.1 傳送 HTTP OPTIONS 要求至後端*
HEAD11透過 HTTP/1.1 傳送 HTTP HEAD 要求至後端*
GET11透過 HTTP/1.1 傳送 HTTP GET 要求至後端*
*: 除非使用 hcexpr,否則會將 2xx 或 3xx HTTP 狀態詮釋為健康檢查通過
hcpasses 1 工作元件再次啟用前,通過的健康檢查測試次數
hcfails 1 工作元件停用前,失敗的健康檢查測試次數
hcinterval 30 健康檢查週期,單位為秒數(例如:每 30 秒執行一次)
hcuri   要附加到 worker URL 的 URI,用於執行健康檢查。
hctemplate   範本名稱,透過 ProxyHCTemplate 產生,用來為此 worker 設定健康檢查參數
hcexpr   表示式名稱,透過 ProxyHCExpr 產生,用來檢查回應標頭的健康狀況。
若未使用,狀態碼為 2xx 到 3xx 表示成功

相容性

OPTIONS11HEAD11GET11 可在 2.4.55 及更新版本中使用。

Support Apache!

主題

指令

錯誤修正檢查表

另請參閱

top

使用方法範例

下列範例示範如何為各式後端伺服器設定健康檢查

ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
ProxyHCExpr gdown {%{REQUEST_STATUS} =~ /^[5]/}
ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/}

<Proxy balancer://foo>
  BalancerMember http://www.example.com/  hcmethod=GET hcexpr=in_maint hcuri=/status.php
  BalancerMember http://www2.example.com/ hcmethod=HEAD hcexpr=ok234 hcinterval=10
  BalancerMember http://www3.example.com/ hcmethod=TCP hcinterval=5 hcpasses=2 hcfails=3
  BalancerMember http://www4.example.com/
</Proxy>

ProxyPass "/" "balancer://foo"
ProxyPassReverse "/" "balancer://foo"

在此情境中,http://www.example.com/ 會透過傳送 GET /status.php 要求到此伺服器來執行健康檢查,並查看回傳的網頁是否包含字串 在維護中。若包含,則表示此伺服器已進入健康檢查失敗模式,並已停用。此動態檢查每 30 秒執行一次,為預設設定。

http://www2.example.com/ 會透過傳送單純的 HEAD 要求每 10 秒執行一次健康檢查,並確保回應狀態為 2xx、3xx 或 4xx。http://www3.example.com/ 會透過單純地確認通往此伺服器的 socket 處於連線狀態每 5 秒執行一次健康檢查。若後端標示為「已中斷」,且通過 2 次健康檢查,則將重新啟用此後端並將其重新加入負載平衡器。伺服器必須連續 3 次健康檢查失敗,才會將其停用並移出輪替。最後,http://www4.example.com/ 完全不會執行動態檢查。

top

ProxyHCExpr 指令

說明建立命名條件表示式,用於根據後端的回應來判斷其健康狀況
語法ProxyHCExpr 名稱 {ap_expr 表示式}
內容伺服器設定、虛擬主機
狀態擴充功能
模組mod_proxy_hcheck

ProxyHCExpr 指令可以用來建立命名條件表示式,會檢查後端伺服器的回應標頭來判斷其健康狀況。這個命名條件之後可以透過 hcexpr 參數指派給平衡器成員。

ProxyHCExpr:允許 2xx/3xx/4xx 作為通過

ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
ProxyPass "/apps"     "balancer://foo"

<Proxy balancer://foo>
  BalancerMember http://www2.example.com/  hcmethod=HEAD hcexpr=ok234 hcinterval=10
</Proxy>
表示式 可以使用大括號(「{}」)作為引用區隔符號,也可以使用一般的引號。

如果使用會產生回應內文的健檢方法(例如:GET),可以使用 ap_expr 使用此模組獨有的表達式函數 hc() 來檢查該內文。

以下範例中,會傳送一個 GET 要求給後端,如果回應內文包含 進行維護 字眼,我們希望停用後端。

ProxyHCExpr:檢查回應內文

ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/}
ProxyPass "/apps"     "balancer://foo"

<Proxy balancer://foo>
  BalancerMember http://www.example.com/ hcexpr=in_maint hcmethod=get hcuri=/status.php
</Proxy>

注意:由於回應內文可能很大,建議用於特定狀態頁。

top

ProxyHCTemplate 指令

說明建立一個命名範本,以設定各種健檢參數
語法ProxyHCTemplate 名稱 參數=設定 [...]
內容伺服器設定、虛擬主機
狀態擴充功能
模組mod_proxy_hcheck

使用 ProxyHCTemplate 指令可以建立一組命名的健檢參數(範本),然後可透過 hctemplate 參數將此組參數指定給負載平衡成員。

ProxyHCTemplate

ProxyHCTemplate tcp5 hcmethod=tcp hcinterval=5
ProxyPass "/apps"     "balancer://foo"

<Proxy balancer://foo>
  BalancerMember http://www2.example.com/ hctemplate=tcp5
</Proxy>
top

ProxyHCTPsize 指令

說明設定用於健檢工作階段的伺服器端執行緒池總大小
語法ProxyHCTPsize 大小
預設ProxyHCTPsize 16
內容伺服器設定
狀態擴充功能
模組mod_proxy_hcheck

如果 Apache httpd 和 APR 是使用執行緒支援建置,此健檢模組將會卸載實際檢查工作至與 Watchdog 程序關聯的執行緒池,這樣就可以進行平行檢查。 ProxyHCTPsize 指令用來決定這個執行緒池的大小。如果設定為 0,將不會使用任何執行緒池,因此會產生序列化健檢。

ProxyHCTPsize

ProxyHCTPsize 32

支援的語言有:  en  |  fr 

top

留言

注意事項
此處並非問答區段。在此發表的留言應著重於對文件或伺服器的改善建議,而我們的管理員可能會移除已實作的留言,或是被視為無效/離題的留言。關於如何管理 Apache HTTP Server 的問題,應導向我們的 IRC 頻道 #httpd(位於 Libera.chat 上),或寄送至我們的郵件列表