簡單測試nginx1.90做TCP協議負載均衡的功能

桃子夭夭發表於2015-05-07

最近工作中需要做TCP層面的負載均衡,以前網站用的反向代理nginx只支援應用層的負載均衡,對於TCP協議是無能為力的,需要使用LVS(linux虛擬伺服器)。

LVS的特點是高效能和極複雜的配置、對網路環境的要求比較高。最近苦於LVS的配置測試,網上的文件和社群都比較少,按照各種教程配置,TCP報文均無法連通,再往下深究就要去研究公司虛機的網路結構了...

在尋找LVS配置除錯方法時,看到一篇最近的文章講4月28日剛剛釋出的nginx1.90,新增了支援TCP協議的負載均衡的,如果只是需要做TCP協議的負載均衡的話,這個是可以滿足需求的。如果涉及到UDP或者傳輸層以上的其他協議,那就必須得繼續死磕LVS了。

下面測試nginx代理TCP協議的配置。

realserver : 10.134.241.68

nginx :10.134.72.166

客戶端:10.129.157.168

TCP監聽埠:2014

一、配置nginx

看官網上的文件 http://nginx.org/en/docs/stream/ngx_stream_core_module.html

nginx1.90對TCP協議的代理並不是預設開啟的,需要在編譯的時候配置 --with-stream 引數:

nginx.config檔案參照官網:

 

stream {
    upstream cloudsocket {
        hash $remote_addr consistent;
        server 10.134.241.68:2014 weight=5 max_fails=3 fail_timeout=30s;
    }
    server {
        listen 2014;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass cloudsocket;
    }
}

啟動nginx,發現nginx已經開始監聽2014埠了

 

 

二、測試客戶端連realserver

在客戶端通過telnet連線realserver的2014埠:

在realserver上檢視網路連線:

可以正常連線

 

三、測試客戶端連線nginx

在客戶端通過telnet連線nginx所在伺服器的2014埠

在nginx機器上檢視網路連線

在realserver上檢視網路連線

可以注意到nginx是給做了一個TCP連線的中轉。

 

實際上這種負載均衡的方式有點像LVS的  VS/NAT 工作模式,資料包文的傳送和接收都要經過負載均衡器,有需要替換的話這兩種技術是可以平滑過渡的。

它可以運算處理能力的瓶頸,但是當使用者請求越來越多時,nginx的處理能力將成為瓶頸

相關文章