對 Network Load Balancer 進行故障診斷 - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對 Network Load Balancer 進行故障診斷

以下資訊有助於您就 Network Load Balancer 的問題進行故障診斷。

已註冊目標處於非服務中狀態

如果目標進入 InService 狀態所花的時間超過預期,表示該目標可能未通過運作狀態檢查。您的目標將處於非服務中狀態,除非通過一次運作狀態檢查。如需詳細資訊,請參閱 目標群組運作狀態檢查

確認您的執行個體是否未通過運作狀態檢查,然後檢查以下各項:

安全群組不允許流量

與執行個體相關聯的安全群組必須允許由負載平衡器使用運作狀態檢查連接埠和運作狀態檢查通訊協定傳來的流量。如需詳細資訊,請參閱 目標安全群組

網路存取控制清單 (ACL) 不允許流量

與執行個體的子網路相關聯的網路 ACL 以及負載平衡器的子網路相關聯的網路 ACL 必須允許透過負載平衡器進行流量和運作狀態檢查。如需詳細資訊,請參閱 網路 ACL

請求未路由至目標

檢查以下各項:

安全群組不允許流量

與執行個體相關聯的安全群組必須允許透過接聽程式連接埠來自用戶端 IP 地址的流量 (若目標是由執行個體 ID 指定) 或來自負載平衡器節點的流量 (若目標是由 IP 地址指定)。如需詳細資訊,請參閱 目標安全群組

網路存取控制清單 (ACL) 不允許流量

與 VPC 的子網路相關聯的網路 ACL 必須允許負載平衡器和目標透過接聽程式連接埠進行雙向通訊。如需詳細資訊,請參閱 網路 ACL

目標位於未啟用的可用區域

如果您在某個可用區域內註冊目標但未啟用該可用區域,這些已註冊目標將不會接收來自負載平衡器的流量。

執行個體位於對等的 VPC

如果您在與負載平衡器 VPC 對等的 VPC 中有執行個體,您必須依 IP 地址向負載平衡器註冊這些執行個體,而不是依執行個體 ID。

目標接收到比預期更多的運作狀態檢查請求

Network Load Balancer 的運作 Health 態檢查為分散式,採用共識機制判定目標的運作狀態。因此,目標會接收超過由 HealthCheckIntervalSeconds 所設定次數的運作狀態檢查。

目標接收到比預期更少的運作狀態檢查請求

檢查是否已啟用 net.ipv4.tcp_tw_recycle。此設定已知將導致負載平衡器出問題。使用 net.ipv4.tcp_tw_reuse 設定是較為安全的替代方法。

運作狀態不佳的目標接收到來自負載平衡器的請求

如果您的負載平衡器至少有一個運作狀態良好的已註冊目標,負載平衡器只會將請求路由至運作狀態良好的已註冊目標。若只有運作狀態不佳的已註冊目標存在,負載平衡器則會將請求路由至所有已註冊目標。

目標因為主機標頭不相符而無法進行 HTTP 或 HTTPS 運作狀態檢查

運作狀態檢查請求中的 HTTP 主機標頭包含負載平衡器節點的 IP 位址和接聽程式連接埠 (而不是目標的 IP 位址和運作狀態檢查連接埠)。如果您透過主機標頭映射傳入請求,則必須確保運作狀態檢查符合任何 HTTP 主機標頭。另一個選項是在不同的連接埠上新增個別的 HTTP 服務,並將目標群組設定為使用該連接埠進行運作狀態檢查。或者,請考慮使用 TCP 運作狀態檢查。

TCP_ELB_ 重設計數量指標的增加

對於用户端透過 Network Load Balancer 執行的每個 TCP 請求,將會追蹤該連線的狀態。如果在比閒置逾時更長的時間內沒有由用户端或目標透過連線傳送的資料,連線將關閉。如果用戶端或目標閒置逾時時間經過後傳送資料,就會收到一個 TCP RST 封包,表示連線不再有效。此外,如果目標變得狀態不良,負載平衡器會針對在與目標相關聯的用户端連線上接收的封包傳送 TCP RST,除非目標觸發負載平衡器失效打開。

如果您在TCP_ELB_Reset_Count指標之前或只是與UnhealthyHostCount度量增加,則可能發送 TCP RST 數據包是因為目標開始失敗,但尚未標記為運行狀況不佳。如果您看到TCP_ELB_Reset_Count而不會將目標標記為運行狀況不佳,則可以檢查 VPC 流日誌中發送過期流中的數據的客户端。

目標向其負載平衡器發出的請求連線逾時

檢查目標組是否啟用了用户端 IP 保留。啟用了用户端 IP 保留功能的負載平衡器不支援迴轉傳輸 (Hairpinning) 或回送。如果執行個體是執行個體註冊為負載平衡器的用户端,且啟用了用户端 IP 保留,則唯有當請求路由至另一執行個體時連線才會成功。否則,來源與目的地 IP 地址將相同,以致連線逾時。

如果執行個體必須傳送請求至其註冊的負載平衡器,請執行以下其中一項操作:

  • 禁用客户端 IP 保留。

  • 確保必須相互通訊的容器位於不同的容器執行個體。

將目標移至 Network Load Balancer 時效能下降

經典負載均衡器和應用程序負載均衡器都使用連接多路複用,但網絡負載均衡器不使用。因此,您的目標在 Network Load Balancer 後方可能會接收到更多 TCP 連線。請確定您的目標已準備好處理其可能接收到的連線請求量。

如果 Network Load Balancer 與 VPC 端點服務相關聯,它支援 55,000 條同時連線,或每分鐘 55,000 條連線連至唯一目標 (IP 地址和連接埠)。若超過上述連線數量,將提高連接埠配置錯誤機率。端口分配錯誤可以使用PortAllocationErrorCount指標。若發生連接埠配置錯誤,請將更多目標新增至目標組。如需詳細資訊,請參閱 Network Load Balancer 的 CloudWatch 指標

啟用了用户端 IP 保留時間歇性連線失敗

啟用客户端 IP 保留後,您可能會遇到與目標上觀察到的套接字重複使用相關的 TCP/IP 連接限制。當客户端或客户端前面的 NAT 設備在同時連接到多個負載均衡器節點時使用相同的源 IP 地址和源端口時,可能會發生這些連接限制。如果負載均衡器將這些連接路由到同一個目標,則連接在目標位置看起來就好像它們來自同一個源套接字,從而導致連接錯誤。如果發生這種情況,客户端可以重試(如果連接失敗)或重新連接(如果連接中斷)。您可以通過增加源臨時端口數或增加負載均衡器的目標數來減少此類連接錯誤。您可以通過禁用客户端 IP 保留或禁用跨區域負載平衡來防止此類連接錯誤。

此外,當啟用了客户端 IP 保留時,如果連接到 Network Load Balancer 的客户端也連接到負載均衡器後面的目標,則連接可能會失敗。要解決此問題,您可以在受影響的目標組上禁用客户端 IP 保留。或者,讓您的客户端僅連接到 Network Load Balancer,或僅連接到目標,但不能同時連接到兩者。

TCP 連線延遲

當同時啟用跨區域負載平衡和客户端 IP 保留時,連接到同一負載均衡器上不同 IP 的客户端可能會被路由到同一個目標。如果客户端為這兩個連接使用相同的源端口,則目標將收到看起來是重複的連接,這可能導致連接錯誤和 TCP 延遲建立新連接。通過禁用跨區域負載平衡功能,您可以防止此類型的連線錯誤。如需詳細資訊,請參閱 跨區域負載平衡 (Cross-zone load balancing)

配置負載平衡器時潛在的故障

配置 Network Load Balancer 失敗的原因之一是,如果您使用的 IP 地址已在其他位置分配或分配(例如,分配為 EC2 實例的輔助 IP 地址)。此 IP 地址阻止負載均衡器設置,其狀態為failed。您可以通過取消分配關聯的 IP 地址並重試創建過程來解決此問題。