基于Nginx的軟件負載均衡實現解讀
2.5 TCP/UDP流量的負載均衡
通常,HTTP和HTTPS的負載均衡叫做七層負載均衡,而TCP和UDP協議的負載均衡叫做四層負載均衡。因為七層負載均衡通常都是HTTP和HTTPS協議,所以這種負載均衡相當于是四層負載均衡的特例化,均衡器可以根據HTTP/HTTPS協議的頭部(User-Agent、Language等)、響應碼甚至是響應內容做額外的規則,達到特定條件特定目的的backend轉發的需求。
除了Nginx所專長的HTTP負載均衡,Nginx還支持TCP和UDP流量的負載均衡,適用于LDAP/MySQL/RTMP和DNS/syslog/RADIUS各種應用場景。這類情況的負載均衡使用stream來配置,Nginx編譯的時候需要支持–with-stream選項。查看手冊,其配置原理和參數和HTTP負載均衡差不多。
因為TCP、UDP的負載均衡都是針對通用程序的,所以之前HTTP協議支持的match條件(status、header、body)是沒法使用的。TCP和UDP的程序可以根據特定的程序,采用send、expect的方式來進行動態健康檢測。
2.6 其他特性
slow_start=30s:防止新添加/恢復的主機被突然增加的請求所壓垮,通過這個參數可以讓該主機的weight從0開始慢慢增加到設定值,讓其負載有一個緩慢增加的過程。
max_conns=30:可以設置backend的最大連接數目,當超過這個數目的時候會被放到queue隊列中,同時隊列的大小和超時參數也可以設置,當隊列中的請求數大于設定值,或者超過了timeout但是backend還不能處理請求,則客戶端將會收到一個錯誤返回。通常來說這還是一個比較重要的參數,因為Nginx作為反向代理的時候,通常就是用于抗住并發量的,如果給backend過多的并發請求,很可能會占用后端過多的資源(比如線程、進程非事件驅動),最終反而會影響backend的處理能力。