nginx tcp負載均衡(Stream模塊)配置說明

    nginx-1.9.0 已發佈,該版本增加了stream 模塊用於一般的TCP 代理和負載均衡,ngx_stream_core_module 這個模塊在1.90版本後將被啓用。但是並不會默認安裝,
    需要在編譯時通過指定 --with-stream 參數來激活這個模塊。
      
    1)配置Nginx編譯文件參數

./configure --with-stream


    2)編譯、安裝,make && make install

make & make install

 
    3)配置nginx.conf文件

stream {
     upstream kevin {
     server 192.168.10.10:8080; #這裏配置成要訪問的地址
     server 192.168.10.20:8081;
     server 192.168.10.30:8081; #需要代理的端口,在這裏我代理一一個kevin模塊的接口8081
     }
     server {
     listen 8081; #需要監聽的端口
     proxy_timeout 20s;
     proxy_pass kevin;
     }
}


      
    創建最高級別的stream(與http同一級別),定義一個upstream組 名稱爲kevin,由多個服務組成達到負載均衡 定義一個服務用來監聽TCP連接(如:8081端口),
    並且把他們代理到一個upstream組的kevin中,配置負載均衡的方法和參數爲每個server;配置些如:連接數、權重等等。
      
    首先創建一個server組,用來作爲TCP負載均衡組。定義一個upstream塊在stream上下文中,在這個塊裏面添加由server命令定義的server,指定他的IP地址和
    主機名(能夠被解析成多地址的主機名)和端口號。下面的例子是建立一個被稱之爲kevin組,兩個監聽1395端口的server ,一個監聽8080端口的server。
      
    upstream kevin {
     server 192.168.10.10:8080; #這裏配置成要訪問的地址
     server 192.168.10.20:8081;
     server 192.168.10.30:8081; #需要代理的端口,在這裏我代理一一個kevin模塊的接口8081
     }
      
      
    需要特別注意的是:
    你不能爲每個server定義協議,因爲這個stream命令建立TCP作爲整個 server的協議了。
      
    配置反向代理使Nginx能夠把TCP請求從一個客戶端轉發到負載均衡組中(如:kevin組)。在每個server配置塊中 通過每個虛擬server的server的配置信息和在
    每個server中定義的監聽端口(客戶端需求的代理端口號,如我推流的的是kevin協議,則端口號爲:8081)的配置信息和proxy_passs 命令把TCP通信發送到
    upstream的哪個server中去。下面我們將TCP通信發送到kevin 組中去。
      
     server {
     listen 8081; #需要監聽的端口
     proxy_timeout 20s;
     proxy_pass kevin;
     }
      
    當然我們也可以採用單一的代理方式:
      
    server {
     listen 8081; #需要監聽的端口
     proxy_timeout 20s;
     proxy_pass 192.168.10.30:8081; #需要代理的端口,在這裏我代理一一個kevin模塊的接口8081
    }
    ------------------------------------------------------------------
      
    4)改變負載均衡的方法:
    默認nginx是通過輪詢算法來進行負載均衡的通信的。引導這個請求循環的到配置在upstream組中server端口上去。 因爲他是默認的方法,這裏沒有輪詢命令,
    只是簡單的創建一個upstream配置組在這兒stream山下文中,而且在其中添加server。


    a)least-connected :對於每個請求,nginx plus選擇當前連接數最少的server來處理:

upstream kevin {
 least_conn;
 server 192.168.10.10:8080; #這裏配置成要訪問的地址
 server 192.168.10.20:8081;
 server 192.168.10.30:8081; #需要代理的端口,在這裏我代理一一個kevin模塊的接口8081
}


    b)least time :對於每個鏈接,nginx pluns 通過幾點來選擇server的: 最底平均延時:通過包含在least_time命令中指定的參數計算出來的:
    connect:連接到一個server所花的時間
    first_byte:接收到第一個字節的時間
    last_byte:全部接收完了的時間 最少活躍的連接數:

upstream kevin {
 least_time first_byte;
 server 192.168.10.10:8080; #這裏配置成要訪問的地址
 server 192.168.10.20:8081;
 server 192.168.10.30:8081; #需要代理的端口,在這裏我代理一一個kevin模塊的接口8081
}


    c)普通的hash算法:nginx plus選擇這個server是通過user_defined 關鍵字,就是IP地址:$remote_addr;

upstream kevin {
 hash $remote_addr consistent;
 server 192.168.10.10:8080 weight=5; #這裏配置成要訪問的地址
 server 192.168.10.20:8081 max_fails=2 fail_timeout=30s;
 server 192.168.10.30:8081 max_conns=3; #需要代理的端口,在這裏我代理一一個kevin模塊的接口8081
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章