?
Nginx 1.9.13開始支持UDP負載勻衡,現代應用通常使用多種協議,很多核心Internet協議都早于HTTP,支持UDP勢在必行。
UDP常用于非事務性的輕量級協議,如:DNS、syslog、RADIUS。
這些協議對可靠性沒有嚴格要求,若UDP消息(數據報)丟失,客戶端可在超時后重新發送。
UDP配置
# Load balance UDP-based DNS traffic across two servers stream {upstream dns_upstreams {server 192.168.136.130:53;server 192.168.136.131:53;}server {listen 53 udp;proxy_pass dns_upstreams;proxy_timeout 1s;proxy_responses 1;error_log logs/dns.log;} }
NGINX在53端口接收到UDP數據報,使用負載平衡算法(默認:輪詢/Round Robin)選擇后端服務,等待后端服務響應,并將響應返回客戶端。
若后端服務無法響應,NGINX將其標記為“失敗”,并暫停向此服務發送數據報。每隔幾秒鐘,NGINX會向服務器發送較小流量檢查服務狀態,確認服務是否恢復。
UDP不保證數據的端到端傳遞,要求客戶端能夠處理網絡級錯誤和重傳。
當客戶端無法連接到首選服務器時,則必須等待超時才能嘗試其他服務器。這會在UDP事務中引入冗長的延遲。
NGINX高可用性和負載平衡可消除或減少此類延遲。
客戶端將UDP請求發送到NGINX,負載均衡器監視UDP服務器運行狀況和可用性,避免將請求發送到故障或過載服務器。