閱讀919 返回首頁    go windows


同一客戶端訪問多個負載均衡實例失敗或超時__異常排查_負載均衡-阿裏雲

應用場景

將相同ECS同時掛載在多個負載均衡實例的後端,並在這些負載均衡實例下創建相同的後端端口的四層監聽。在這種場景下,用戶用同一台客戶端去同時訪問這些負載均衡實例時,有時會出現失敗或超時。

架構圖

架構圖

如上圖所示,用戶有兩個負載均衡實例SLB1和SLB2,分別有兩個TCP監聽,其前端端口不一致,但後端端口一致,並且這兩個監聽後端掛載了相同的雲服務器ECS。當一個用戶Client去訪問這兩個SLB實例時,訪問可能會失敗。

具體原因

  1. 四層 (TCP協議) 負載均衡會對用戶的訪問流量在入方向做DNAT
  2. 當客戶端訪問SLB1時,CIP:CPORT->VIP1:VPORT1的連接在到達後端ECS的時候,會被轉換成CIP:CPORT->DIP:DPORT。
  3. 當客戶端訪問SLB2時,CIP:CPORT->VIP2:VPORT2的連接在到達後端ECS的時候,也會被轉換成CIP:CPORT->DIP:DPORT;
  4. 兩條TCP連接的序列號和TCP狀態在後端服務器上互相幹擾,導致建連失敗,即Client建立的兩條連接在後端服務器上變成了同樣的五元組TCP:CIP:CPORT:DIP:DPORT

    注⚠:

    CIP: Client IP (客戶端IP);

    VIP1: 負載均衡實例SLB1的IP地址;

    VIP2: 負載均衡實例SLB2的IP地址;

    VPORT1: 負載均衡實例SLB1的監聽前端端口;

    VPORT2: 負載均衡實例SLB2的監聽前端端口;

    DIP: 後端服務器的IP地址;

    DPORT: 後端服務器的端口;

    解決思路

在這樣的場景下,需要在後端服務器上避免出現同樣的五元組,因協議類型固定為TCP,則需要調整後麵的四元組組成。

1.避免CIP衝突: 如果後端服務是HTTP服務,可將其中一個SLB實例的四層監聽切換為七層監聽,七層SLB監聽通過HTTP頭部的X-Forward-For字段獲取客戶端源地址,二者不會產生衝突;另外,使用不同的Client訪問這兩個監聽也可避免此問題出現。

2.避免CPORT衝突: 在Client發起針對VIP1、 VIP2的TCP建連請求時,指定源端口CPORT進行訪問(如訪問VIP1時使用CPORT範圍是10000 – 29999,訪問VIP2時使用CPORT範圍是30000 – 49999)。

3.避免DIP衝突:即避免同一個後端服務器掛載在多個SLB實例後麵。

4.避免DPORT衝突:如果後端服務非HTTP服務,則可將其中一個SLB實例四層監聽的後端服務器服務端口修改,也可以避免該問題。

最後更新:2016-12-20 19:37:08

  上一篇:go 部署負載均衡集群支持會話同步__常見問題_負載均衡-阿裏雲
  下一篇:go curl正常但健康檢查異常__異常排查_負載均衡-阿裏雲