java編程——Nginx轉發TCP如何實現負載均衡

通常我們會使用Nginx做反向代理和負載均衡,都是http協議,其實Nginx還可以轉發TCP,而且配置基本很相似

(下面的原理也適用於http)。

原理圖如下:

java編程——Nginx轉發TCP如何實現負載均衡

正向代理和反向代理

正向代理:就是我們所說的代理,例如客戶向服務器A發請求,但是A不接受除了服務器B以外的請求,然後客戶委託服務器B向服務器A發請求,然後通過服務器B做中間人傳輸信息。這個過程是對服務器A是透明的,它只知道和服務器B通信。

反向代理:正向代理是客戶委託,那麼反向代理就是服務器做委託。例如客戶向服務器A做請求,但是服務器A不知道怎麼處理,那麼A就委託服務器B處理,然後把結果返回給客戶,這個過程對客戶是透明的。

所有負載均衡就是利用了反向代理,把客戶的請求分發到不同的主機上處理,客戶並不需要知道處理的過程。

負載均衡策略

Nginx 提供輪詢(round robin)、IP 哈希(client IP)和加權輪詢 3 種方式,默認情況下,Nginx 採用的是輪詢。

輪詢(默認)

每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

加權輪詢

指定輪詢幾率,weight和訪問比率成正比,用於後端服務器性能不均的情況。

ip_hash

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。

重試策略

可以為每個 backserver 指定最大的重試次數,和重試時間間隔,所使用的關鍵字是 max_fails 和 fail_timeout。

熱機策略

當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就會使用由 backup 標註的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。

在nginx.conf文件配置,是和http同級的

stream {

upstream backend {

#hash $remote_addr consistent;

server 10.118.12.92:10001 weight=5;

#server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;

#server unix:/tmp/backend3;

}

server {

listen 10001;

proxy_connect_timeout 5s;

proxy_timeout 3600s;

proxy_pass backend;

}

}

注意如果放在http裡面,那麼這個配置就是負載均衡http了。

java編程——Nginx轉發TCP如何實現負載均衡


分享到:


相關文章: