全部產品
Search
文件中心

Server Load Balancer:通過UDP健全狀態檢查排查異常伺服器

更新時間:Nov 15, 2025

對於線上遊戲、即時通訊等依賴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請求

  1. 登入ECS01服務後台。

  2. 執行vi udp_server.py,按i鍵進入編輯模式。

    複製並粘貼如下代碼:

    部署測試服務代碼參考

    說明

    第4行中的UDP_IP的IP,需要修改為後端伺服器ECS01的私網IP。

    import socket
    
    # 配置UDP伺服器的IP地址和連接埠號碼
    UDP_IP = "10.1.*.*"      # 替換為後端伺服器IP
    UDP_PORT = 161            
    
    # 建立一個UDP通訊端
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
        # 將通訊端綁定到指定的IP地址和連接埠號碼
        sock.bind((UDP_IP, UDP_PORT))
        print("UDP server up and listening ")
    
        # 伺服器持續運行
        while True:
            # 接收來自用戶端的資料(資料緩衝區大小為1024位元組)
            data, addr = sock.recvfrom(1024)
            print(f"Received message: {data} from {addr}")
    
            # 檢查接收到的資料內容
            if data == b"PING":
                sock.sendto(b"PONG1", addr)
                print("Sent PONG1")
    
    
  3. Esc鍵,輸入:wq儲存修改。

  4. 執行sudo python3 udp_server.py命令,即可運行指令碼。

  5. 當收到UDP server up and listening響應時,表示UDP後端服務已開啟。

如果出現啟動失敗,需要排查下連接埠是否已被佔用,或者命令及代碼是否複製粘貼錯誤。

在ECS02上部署服務響應UDP請求

  1. 登入ECS02服務後台。

  2. 執行vi udp_server.py,按i鍵進入編輯模式。

    複製並粘貼如下代碼:

    部署測試服務代碼參考

    說明

    第4行中的UDP_IP的IP,需要修改為後端伺服器ECS02的私網IP。

    import socket
    
    # 配置UDP伺服器的IP地址和連接埠號碼
    UDP_IP = "10.2.*.*"   # 替換為後端伺服器IP
    UDP_PORT = 161        
    
    # 建立一個UDP通訊端
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
        # 將通訊端綁定到指定的IP地址和連接埠號碼
        sock.bind((UDP_IP, UDP_PORT))
        print("UDP server up and listening ")
    
        # 伺服器持續運行
        while True:
            # 接收來自用戶端的資料(資料緩衝區大小為1024位元組)
            data, addr = sock.recvfrom(1024)
            print(f"Received message: {data} from {addr}")
    
            # 檢查接收到的資料內容
            if data == b"PING":
                sock.sendto(b"PONG2", addr)
                print("Sent PONG2")
    
    
  3. Esc鍵,輸入:wq儲存修改。

  4. 執行sudo python3 udp_server.py命令,即可運行指令碼。

  5. 當收到UDP server up and listening響應時,表示UDP後端服務已開啟。

如果出現啟動失敗,需要排查下連接埠是否已被佔用,或者命令及代碼是否複製粘貼錯誤。

步驟二:建立伺服器組並開啟健全狀態檢查

  1. 登入網路型負載平衡NLB控制台

  2. 在頂部功能表列,選擇NLB執行個體所屬的地區。

  3. 在左側導覽列,選擇網路型負載平衡NLB > 伺服器組

  4. 伺服器組頁面,單擊建立伺服器組

  5. 建立伺服器組對話方塊,配置以下資訊。關鍵配置資訊參考下表配置,其餘配置項保持預設值即可,如需修改可參考NLB伺服器組

    配置

    說明

    伺服器群組類型

    選擇伺服器類型

    選擇後端協議

    本文選擇UDP協議。

    配置健全狀態檢查

    開啟健全狀態檢查,並在健全狀態檢查配置右側單擊編輯

    健全狀態檢查協議

    本文選擇UDP協議。

    健全狀態檢查連接埠

    本文選擇使用後端伺服器連接埠

  6. 伺服器組資訊配置完成後,單擊建立。待伺服器組建立成功後,在彈窗中單擊添加後端伺服器

  7. 添加後端伺服器配置面板,選擇ECS01和ECS02,然後單擊下一步

  8. 在配置連接埠和權重設定精靈,輸入連接埠161,權重保持預設值,然後單擊確定,完成伺服器添加。

步驟三:建立UDP監聽

  1. 登入網路型負載平衡NLB控制台

  2. 在頂部功能表列,選擇NLB執行個體所屬的地區。

  3. 執行個體頁面,找到目標NLB執行個體,然後在操作列單擊建立監聽

  4. 負載平衡業務設定精靈頁面,配置以下資訊。關鍵配置資訊參考下表配置,其餘配置項保持預設值即可,如需修改可參考添加UDP監聽。配置完成後單擊提交

    配置監聽:

    配置

    說明

    選擇監聽協議

    本文選擇UDP監聽。

    監聽連接埠

    本文輸入161

    選擇伺服器組:

    配置

    說明

    選擇伺服器組

    選擇添加了ECS01與ECS02的伺服器組。

步驟四:測實驗證

  1. 檢測正常伺服器

    1. 以該VPC內的任意一台Linux用戶端為例進行測實驗證。

      1. 執行vi udp_client.py,按i鍵進入編輯模式。

        複製並粘貼如下代碼:

        部署測實驗證代碼參考

        import socket
        
        # 建立 UDP 通訊端
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        
        server_address = ('10.0.*.*', 161)  # IP替換為NLB執行個體的VIP
        
        # 發送資料
        message = "PING"
        client_socket.sendto(message.encode(), server_address)
        
        # 接收響應
        data, address = client_socket.recvfrom(1024)
        print(f"Received data from server: {data.decode()}")
        
        # 關閉通訊端
        client_socket.close()
        
      2. Esc鍵,輸入:wq儲存修改。

    2. 執行sudo python3 udp_client.py命令,收到如下圖示的回複報文PONG1,表示ECS01伺服器可以正常接收請求。

      image

    3. 執行sudo python3 udp_client.py命令,收到如下圖示的回複報文PONG2,表示ECS02伺服器可以正常接收請求。

      image

  2. 故障類比

    停止後端伺服器ECS01上的UDP後端服務。在指令碼運行介面按下Ctrl+C終止指令碼運行,命令列回到可輸入狀態,說明UDP後端服務已停止。

    image

    回到Linux用戶端,多次執行sudo python3 udp_client.py命令,收到如下圖示的回複報文PONG2,表示NLB仍在將請求轉寄到ECS02,ECS02可以正常響應請求。

    image

  3. 登入網路型負載平衡NLB控制台查看健全狀態檢查異常的原因。

    1. 執行個體頁面,單擊目標執行個體ID。

    2. 單擊監聽頁簽,在UDP監聽的健全狀態檢查狀態列查看健全狀態檢查狀態為異常

    3. 單擊異常,可以在彈出的對話方塊中查看異常的伺服器和異常原因。

      image

    4. 在彈出的對話方塊中,單擊執行個體診斷,在執行個體健康診斷面板查看診斷項詳情

      image

  4. 重新在ECS01上執行sudo python3 udp_server.py開啟UDP後端服務。看到UDP server up and listening的輸出,確認UDP後端服務已開啟。

  5. 回到監聽頁簽下確認,此時健全狀態檢查狀態已恢複正常。

    image

關閉健全狀態檢查

重要

您可以關閉健全狀態檢查功能,但關閉健全狀態檢查後,當後端某個ECS出現異常時,NLB還是會把請求轉寄到該異常的ECS上,造成部分業務不可訪問。因此一般情況下建議不要關閉健全狀態檢查。

  1. 登入網路型負載平衡NLB控制台

  2. 在頂部功能表列,選擇NLB執行個體所屬的地區。

  3. 在左側導覽列,選擇網路型負載平衡 NLB伺服器組

  4. 伺服器組頁面,找到目標伺服器組,在操作列單擊編輯健全狀態檢查

  5. 編輯健全狀態檢查對話方塊,關閉健全狀態檢查,然後單擊儲存

相關文檔

如果您想要瞭解UDP健全狀態檢查的概述和原理,請參見NLB健全狀態檢查