負載均衡依靠反向代理實現。nginx的代理分為七層代理與四層代理:
????????七層代理:七層代理的就是http請求和響應。七層代理是最常用的反向代理方式,只能配置在nginx配置文件的http模塊。而且配置方法名稱:upstream模塊,不能寫在server重,也不能在location重,在http模塊中是一個獨立的配置。七層代理:七層代理的就是http請求和響應。
? ? ? ? ? ? ? ? 過程:客戶端----http請求----七層代理(代理服務器上)----代理服務器轉發http請求到內部的一組服務器(web集群)----客戶端不知道請求的是代理服務器還是內部服務器,而且通過代理服務器隱藏了內部服務器ip。
? ? ? ? ????????客戶機實際上訪問的是代理服務器,請求到代理,代理轉發給web服務器。Web服務器響應。
? ? ? ? 四層代理:基于tcp/ip協議層的代理轉發方式。可以基于ip地址和端口進行負載均衡轉發。四層代理無法獲取http請求中的url信息,只能對tcp/udp數據包進行流量轉發。Stream,stream不能配置在http模塊中,只能配置在全局中。是一個獨立的模塊。
四層代理與七層代理區別:
????????1,七層走的是http請求,四層走的tcp/udo數據包,轉發的是流量。
????????????????七層代理,http請求,可以對請求進行深入的解析和處理。流量控制,內容過濾。四層代理不能進行流量控制,也沒辦法對內容進行過濾。四層代理適用于需要處理大量連接請求的場景。七層要求對請求進行精確處理和控制的場景。實際工作中,四層和七層可以配合使用。
????????2,四層代理速度比七層代理速度快:
? ? ? ? ? ? ? ? 四層:
????????????????1,四層只是流量轉發,不能對請求進行解析和控制
????????????????2,四層代理走到是內核,內核轉發流量。
? ? ? ? ? ? ? ? 七層:
????????????????1,七層需要對請求進行處理和解析,速度會比較慢
????????????????2,七層走的是用戶態,訪問控制,流量處理。
七層代理可以提供更高級的服務和更高的用戶體驗。
正向代理:proxy_pass配置代理服務器訪問的地址,只能寫在location模塊中。
反向代理:客戶端訪問代理服務器,代理服務器轉發請求或者流量到后端服務器,后端的web服務器會有多臺,用戶并不知道最終訪問的是哪一臺。
負載均衡:高可用,可擴展,提高維護性。
反向代理的實現:
Upstream:基于http實現負載均衡,反向代理。
????????特點:
????????????????1,http請求的負載均衡方式
????????????????2,沒有緩存
????????????????3,負載均衡的算法
? ? ? ? 1,默認算法:輪詢 rr 請求輪流分配給后端服務器,適用于web服務器處理能力相近的情況,默認算法可以不加。
upstream kuai {server 192.168.48.16;server 192.168.48.14;
}
? ? ? ? 2,加權輪詢:建立在輪詢算法上,根據不同的web服務器權重,讓處理能力更強的服務器可以分配到更多的請求。雖然配置了權重值,但是輪詢的結果未必準確。
upstream kuai {server 192.168.48.16 weight=2;server 192.168.48.14 weight=3;
}
? ? ? ? 3,最小連接數:least_conn:會輪詢,請求發送給當前連接數最少的后端web服務器。適用于后端服務器處理任務耗時不同的情況,避免了所有請求集中在處理能力更強的后端服務器上。會和加權輪詢一起使用。
upstream kuai {least_conn;server 192.168.48.16;server 192.168.48.14;
}
? ? ? ? 4,ip_hash:根據ip地址計算出一個哈希值,根據ip_hash算法,同一個客戶端的請求會被分配到同一個后端服務器,保證會話的穩定性。后端服務器數量發生變化,哈希值會重新計算,請求的服務器也會發生變化。
upstream kuai {ip_hash;server 192.168.48.16;server 192.168.48.14;
}
? ? ? ? 5,url_hash:根據uri地址計算哈希值,使用url_hash會把相同請求的uri會分配到同一個后端web服務器。
upstream kuai {hash $request_uri consistent;server 192.168.48.16;server 192.168.48.14;
}
????????6,fair:根據流量大小,請求次數智能化轉發,需要硬件支持。
使用場景:
小場景:并發量很小,默認算法就可以滿足適應條件。后端web服務器的處理能力有差異:加權輪詢,和最小鏈接數配合使用。
大型并發: ip_hash ,url_hash。第一次請求之后,會有本地緩存,而且因為hash算法的原因,請求的后臺web服務器不會發生變化,可以提噶訪問速度,訪問的是緩存。減輕了后臺服務器的請求壓力。
????????Ip_hash,后端web服務器數量發生變化,請求的服務器也會發生變化。
????????Url_hash,請求的地址發生變化,請求的服務器也可能發生變化。