負載平衡器探查是客戶定義的健康情況探查,可探查 UDP 端點和角色執行個體中的端點。
LoadBalancerProbe
不是獨立元素;其會與 Web 角色或背景工作角色在服務定義檔中組合。 多個角色可以使用 LoadBalancerProbe
。
服務定義檔的預設副檔名稱為 .csdef。
負載平衡器探查的函式
Azure Load Balancer 會負責將連入流量路由至角色執行個體。 負載平衡器會定期探測每個執行個體,以判斷其健康狀況,從而確定哪些執行個體能夠接收流量。 負載平衡器每分鐘會探查每個執行個體多次。 有兩個不同的選項可以向負載平衡器提供執行個體的健康狀態:預設負載平衡器探測器,或自訂負載平衡器探測器,後者是通過在 .csdef 檔案中定義 LoadBalancerProbe 來實現的。
預設的負載平衡器探查會利用虛擬機器中的客體代理程式,當且僅當執行個體處於「就緒」狀態時,其才會接聽並以「HTTP 200 OK」作為回應(例如當執行個體不處於「忙碌」、「回收」、「停止」等狀態時)。 如果客體代理程式無法以「HTTP 200 確定」回應,則 Azure Load Balancer 會將執行個體標示為沒有回應,並停止傳送流量到該執行個體。 Azure Load Balancer 會繼續 ping 執行個體,如果客體代理程式以 HTTP 200 回應,Azure Load Balancer 會再次將流量傳送至該執行個體。 使用 Web 角色時,您的網站程式碼通常會在不受 Azure 網狀架構或客體代理程式監視的 w3wp.exe 中執行,這表示 w3wp.exe 中的失敗 (例如 HTTP 500 回應) 不會向客體代理程式回報,而且負載平衡器不知道要將該執行個體退出循環。
自訂負載平衡器探查會覆寫預設客體代理程式探查,可讓您建立自己的自訂邏輯來判斷角色執行個體的健康情況。 負載平衡器會定期探查您的端點 (預設為每 15 秒),如果執行個體在逾時期間 (預設為 31 秒) 內以 TCP ACK 或 HTTP 200 回應,則會將執行個體列入循環。 這有助於您實作自己的邏輯以從負載平衡器輪轉中移除執行個體。例如,如果執行個體的 CPU 使用率超過 90%,則傳回非 200 狀態。 針對使用 w3wp.exe 的 Web 角色,這也表示您能夠自動監視您的網站,因為網站程式碼中的錯誤會將非 200 狀態傳回給負載平衡器探查。 如果您未在 .csdef 檔案中定義 LoadBalancerProbe,則會使用預設負載平衡器行為 (如先前所述)。
如果您使用自訂負載平衡器探查,請確保您的邏輯會將 RoleEnvironment.OnStop 方法列入考量。 使用預設負載平衡器探查時,呼叫 OnStop 之前,執行個體即會退出循環,但是在 OnStop 事件期間,自訂負載平衡器探查可能會繼續傳回「200 確定」。 如果您使用 OnStop 事件來清除快取、停止服務,或者進行會影響服務執行階段行為的變更,則您需要確保自訂負載平衡器探查邏輯會從循環中移除執行個體。
負載平衡器探測的基本服務定義模式
包含負載平衡器探查之服務定義檔的基本格式如下所示。
<ServiceDefinition …>
<LoadBalancerProbes>
<LoadBalancerProbe name="<load-balancer-probe-name>" protocol="[http|tcp]" path="<uri-for-checking-health-status-of-vm>" port="<port-number>" intervalInSeconds="<interval-in-seconds>" timeoutInSeconds="<timeout-in-seconds>"/>
</LoadBalancerProbes>
</ServiceDefinition>
架構元素
服務定義檔的 LoadBalancerProbes
元素包含下列元素:
LoadBalancerProbes 元素
LoadBalancerProbes
元素會說明負載平衡器探查的集合。 此元素是 LoadBalancerProbe 元素的父代元素。
LoadBalancerProbe 元素
LoadBalancerProbe
元素會定義模型的健康探測。 您可以定義多個負載平衡器探查。
下表說明 LoadBalancerProbe
元素的屬性:
屬性 | 類型 | 描述 |
---|---|---|
name |
string |
必要。 負載平衡器探查的名稱。 名稱必須是唯一的。 |
protocol |
string |
必要。 指定端點的通訊協定。 可能的值為 http 或 tcp 。 如果已指定 tcp ,則需要接收到的 ACK,探查才會成功。 如果已指定 http ,則需要來自指定 URI 的「200 確定」回應,探查才會成功。 |
path |
string |
用來檢查 VM 健康狀態的 URI。 如果將 path 設為 protocol ,則需要 http 。 否則這是不允許的。沒有預設值。 |
port |
integer |
選擇性。 用於與探測設備進行通訊的端口。 此屬性在任何端點皆為可選擇,因為探測會使用相同的端口。 您也可以針對其探查設定不同的連接埠。 可能的值範圍從 1 到 65535 (含)。 預設值會由端點設定。 |
intervalInSeconds |
integer |
選擇性。 探查端點健康情況狀態的頻率間隔 (以秒為單位)。 一般而言,間隔略小於配置逾時期間 (以秒為單位) 的一半,可允許在執行個體退出循環之前進行兩個完整探查。 預設值為 15。 最小值為 5。 |
timeoutInSeconds |
integer |
選擇性。 套用至探查的逾時期間 (以秒為單位),在此期間若無回應,會導致停止將更多流量傳遞至端點。 此值可以讓端點退出循環的速度比在 Azure 中使用的一般時間 (此為預設值) 更快或更慢。 預設值為 31。 最小值為 11。 |