Apache HTTP Server 第 2.4 版
說明 | mod_proxy 的負載平衡成員 (工作元件) 的動態健康檢查 |
---|---|
狀態 | 擴充功能 |
模組識別碼 | proxy_hcheck_module |
原始檔 | mod_proxy_hcheck.c |
相容性 | 適用於 Apache 2.4.21 及後續版本 |
此模組提供負載平衡成員 (工作元件) 的動態健康檢查。此檢查可以在每個工作元件的基礎上啟用。這些健康檢查會獨立於實際的反向代理要求執行。
此模組需要mod_watchdog
的服務。
健康檢查機制是透過使用額外的BalancerMember
來啟用的,而這些參數會透過 ProxyPass
以標準的方式設定。
此模組透過status 狀態 (標記) 定義新的負載平衡成員:C
。
當這個工作元件因為在健康檢查模組判定有故障而被標示為離線時,將設定此標記,而且可以透過 balancer-manager
來檢視(以及修改)。
參數 | 預設 | 說明 | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
hcmethod | 無 | 未執行動態健康檢查。選擇如下
| |||||||||||||||||||||||||||||||||
hcpasses | 1 | 工作元件再次啟用前,通過的健康檢查測試次數 | |||||||||||||||||||||||||||||||||
hcfails | 1 | 工作元件停用前,失敗的健康檢查測試次數 | |||||||||||||||||||||||||||||||||
hcinterval | 30 | 健康檢查週期,單位為秒數(例如:每 30 秒執行一次) | |||||||||||||||||||||||||||||||||
hcuri | 要附加到 worker URL 的 URI,用於執行健康檢查。 | ||||||||||||||||||||||||||||||||||
hctemplate | 範本名稱,透過 ProxyHCTemplate 產生,用來為此 worker 設定健康檢查參數 | ||||||||||||||||||||||||||||||||||
hcexpr | 表示式名稱,透過 ProxyHCExpr 產生,用來檢查回應標頭的健康狀況。若未使用,狀態碼為 2xx 到 3xx 表示成功 |
OPTIONS11
、HEAD11
和 GET11
可在 2.4.55 及更新版本中使用。
下列範例示範如何為各式後端伺服器設定健康檢查
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/
完全不會執行動態檢查。
說明 | 建立命名條件表示式,用於根據後端的回應來判斷其健康狀況 |
---|---|
語法 | ProxyHCExpr 名稱 {ap_expr 表示式} |
內容 | 伺服器設定、虛擬主機 |
狀態 | 擴充功能 |
模組 | mod_proxy_hcheck |
ProxyHCExpr
指令可以用來建立命名條件表示式,會檢查後端伺服器的回應標頭來判斷其健康狀況。這個命名條件之後可以透過 hcexpr
參數指派給平衡器成員。
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 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>
注意:由於回應內文可能很大,建議用於特定狀態頁。
說明 | 建立一個命名範本,以設定各種健檢參數 |
---|---|
語法 | ProxyHCTemplate 名稱 參數=設定 [...] |
內容 | 伺服器設定、虛擬主機 |
狀態 | 擴充功能 |
模組 | mod_proxy_hcheck |
使用 ProxyHCTemplate
指令可以建立一組命名的健檢參數(範本),然後可透過 hctemplate
參數將此組參數指定給負載平衡成員。
ProxyHCTemplate tcp5 hcmethod=tcp hcinterval=5 ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www2.example.com/ hctemplate=tcp5 </Proxy>