通過UDP健全狀態檢查排查異常伺服器
對於線上遊戲、即時通訊等依賴UDP協議的業務,您可以使用UDP健全狀態檢查功能。該功能通過發送UDP資料包來監測後端伺服器的響應情況,及時發現異常伺服器並進行故障隔離。
使用者情境
某線上遊戲公司營運著多台後端伺服器,這些伺服器通過UDP協議處理玩家的遊戲資料。為了確保玩家體驗的流暢性,公司希望即時監控每台伺服器的健康狀態。當某台伺服器出現異常時,能夠及時檢測並隔離該伺服器,此時新的玩家請求不會被發送到異常的伺服器上,一旦伺服器恢複正常,自動將其重新納入服務,繼續處理玩家請求。
該公司可以使用NLB的UDP健全狀態檢查功能,定期檢查每台後端伺服器的狀態。當檢測到異常伺服器時,NLB會自動停止向其轉寄新的請求,並在伺服器恢複後自動重新啟用。
前提條件
-
您已在華東1(杭州)地區建立Virtual Private Cloud,並在兩個可用性區域內建立兩台交換器VSW1、VSW2。具體操作,請參見建立和管理專用網路。
-
您已分別在VSW1和VSW2建立ECS01和ECS02執行個體。
-
您已在VPC中建立一個處於運行中狀態的NLB執行個體。本文以私網NLB執行個體為例進行配置說明。具體操作可參考建立和管理NLB執行個體。
注意事項
-
後端伺服器部署UDP業務時,可以通過UDP、TCP或HTTP健全狀態檢查方式監測其狀態。然而,採用TCP或HTTP健全狀態檢查需要額外開放TCP連接埠,這可能導致網路設定複雜並增加潛在的安全風險。特別是在CLB遷移到NLB的情境中,為了確保服務能力的一致性,建議您使用UDP健全狀態檢查。
-
請確保後端伺服器的安全性群組已允許存取用於UDP健全狀態檢查的連接埠。
操作步驟
步驟一:部署服務
本文以CentOS 7.9為樣本,示範使用Python快速部署一個可以響應UDP請求的服務。樣本僅供參考,實際使用過程中以您自己開發的程式和服務為準。
在ECS01上部署服務響應UDP請求
-
登入ECS01服務後台。
-
執行
vi udp_server.py,按i鍵進入編輯模式。複製並粘貼如下代碼:
-
按
Esc鍵,輸入:wq儲存修改。 -
執行
sudo python3 udp_server.py命令,即可運行指令碼。 -
當收到
UDP server up and listening響應時,表示UDP後端服務已開啟。
如果出現啟動失敗,需要排查下連接埠是否已被佔用,或者命令及代碼是否複製粘貼錯誤。
在ECS02上部署服務響應UDP請求
-
登入ECS02服務後台。
-
執行
vi udp_server.py,按i鍵進入編輯模式。複製並粘貼如下代碼:
-
按
Esc鍵,輸入:wq儲存修改。 -
執行
sudo python3 udp_server.py命令,即可運行指令碼。 -
當收到
UDP server up and listening響應時,表示UDP後端服務已開啟。
如果出現啟動失敗,需要排查下連接埠是否已被佔用,或者命令及代碼是否複製粘貼錯誤。
步驟二:建立伺服器組並開啟健全狀態檢查
-
在頂部功能表列,選擇NLB執行個體所屬的地區。
-
在左側導覽列,選擇。
-
在伺服器組頁面,單擊建立伺服器組。
-
在建立伺服器組對話方塊,配置以下資訊。關鍵配置資訊參考下表配置,其餘配置項保持預設值即可,如需修改可參考NLB伺服器組。
配置
說明
伺服器群組類型
選擇伺服器類型。
選擇後端協議
本文選擇UDP協議。
配置健全狀態檢查
開啟健全狀態檢查,並在健全狀態檢查配置右側單擊編輯。
健全狀態檢查協議
本文選擇UDP協議。
健全狀態檢查連接埠
本文選擇使用後端伺服器連接埠。
-
伺服器組資訊配置完成後,單擊建立。待伺服器組建立成功後,在彈窗中單擊添加後端伺服器。
-
在添加後端伺服器配置面板,選擇ECS01和ECS02,然後單擊下一步。
-
在配置連接埠和權重設定精靈,輸入連接埠
161,權重保持預設值,然後單擊確定,完成伺服器添加。
步驟三:建立UDP監聽
-
在頂部功能表列,選擇NLB執行個體所屬的地區。
-
在執行個體頁面,找到目標NLB執行個體,然後在操作列單擊建立監聽。
-
在負載平衡業務設定精靈頁面,配置以下資訊。關鍵配置資訊參考下表配置,其餘配置項保持預設值即可,如需修改可參考添加UDP監聽。配置完成後單擊提交。
配置監聽:
配置
說明
選擇監聽協議
本文選擇UDP監聽。
監聽連接埠
本文輸入
161。選擇伺服器組:
配置
說明
選擇伺服器組
選擇添加了ECS01與ECS02的伺服器組。
步驟四:測實驗證
-
檢測正常伺服器
-
以該VPC內的任意一台Linux用戶端為例進行測實驗證。
-
執行
vi udp_client.py,按i鍵進入編輯模式。複製並粘貼如下代碼:
-
按
Esc鍵,輸入:wq儲存修改。
-
-
執行
sudo python3 udp_client.py命令,收到如下所示的回複報文PONG1,表示ECS01伺服器可以正常接收請求。[root@xxx ~]# python3 udp_client.py Received data from server: PONG1 -
執行
sudo python3 udp_client.py命令,收到回複報文PONG2,表示ECS02伺服器可以正常接收請求。
-
-
故障類比
停止後端伺服器ECS01上的UDP後端服務。在指令碼運行介面按下Ctrl+C終止指令碼運行,命令列回到可輸入狀態,說明UDP後端服務已停止。
回到Linux用戶端,多次執行
sudo python3 udp_client.py命令,收到回複報文PONG2,表示NLB仍在將請求轉寄到ECS02,ECS02可以正常響應請求。 -
登入網路型負載平衡NLB控制台查看健全狀態檢查異常的原因。
-
在執行個體頁面,單擊目標執行個體ID。
-
單擊監聽頁簽,在UDP監聽的健全狀態檢查狀態列查看健全狀態檢查狀態為異常。
-
單擊異常,可以在彈出的對話方塊中查看異常的伺服器和異常原因。
伺服器組 nlb_udp_sg 中雲端服務器 udp_server_1 的連接埠 161 健全狀態檢查異常,異常原因為串連中斷。
-
在彈出的對話方塊中,單擊執行個體診斷,在執行個體健康診斷面板查看診斷項詳情。
診斷項詳情中,健全狀態檢查診斷 下的 健全狀態檢查異常監測 顯示為 嚴重 層級,問題描述為"健全狀態檢查發現異常",建議排查異常後端伺服器並通過"進一步診斷"發起即時探測。表格顯示監聽 ID 為
nlb-執行個體ID@udp-161,伺服器連接埠和健全狀態檢查連接埠均為 161,私網 IP 為 172.16.100.120,診斷結果提示"僅Linux類型作業系統支援進一步診斷"。
-
-
重新在ECS01上執行
sudo python3 udp_server.py開啟UDP後端服務。看到UDP server up and listening的輸出,確認UDP後端服務已開啟。 -
回到監聽頁簽下確認,此時健全狀態檢查狀態已恢複正常。
關閉健全狀態檢查
您可以關閉健全狀態檢查功能,但關閉健全狀態檢查後,當後端某個ECS出現異常時,NLB還是會把請求轉寄到該異常的ECS上,造成部分業務不可訪問。因此一般情況下建議不要關閉健全狀態檢查。
-
在頂部功能表列,選擇NLB執行個體所屬的地區。
-
在左側導覽列,選擇網路型負載均衡 NLB> 伺服器組。
-
在伺服器組頁面,找到目標伺服器組,在操作列單擊編輯健全狀態檢查。
-
在編輯健全狀態檢查對話方塊,關閉健全狀態檢查,然後單擊儲存。
相關文檔
如果您想要瞭解UDP健全狀態檢查的概述和原理,請參見NLB健全狀態檢查。