負載均衡:通過反向代理來實現
Nginx的七層代理和四層代理:
七層是最常用的反向代理方式,只能配置在nginx配置文件的http模塊當中?;配置的方法名稱為:upstream模塊,不能寫在server中也不能寫在location中,在http模塊當中是獨立的一個配置
七層代理:代理的是http的請求和響應
客戶端————發起http請求————七層代理(代理服務器)————代理服務器轉發http請求到內部的一組服務器(web集群)
????????過程中客戶端并不知道請求的是代理服務器還是內部服務器,而且通過代理服務器隱藏了內部服務器的ip
????????實際上,客戶端訪問的是代理服務器;請求通過代理服務器轉發給web服務器,web服務器響應;
四層代理:
是基于tcp/ip協議層的代理轉發方式;可以實現基于IP地址和端口進行負載均衡轉發
四層代理無法獲取http請求當中的URL信息,只能對tcp/udp數據包進行轉發;也就是對流量轉發
配置方法:stream;stream不能配置在http模塊中,配置在全局當中,是屬于一個獨立的模塊,不屬于其他任何模塊
1.四層代理和七層代理的區別(面試***)
? ? ? ? 四層代理是基于IP地址和端口號進行的,只負責轉發請求,速度較快;
? ? ? ? 四層代理不能進行流量控制,也沒辦法對內容進行過濾
????????七層代理是通過http請求,四層走的是tcp/udp的數據包,轉發的是流量
????????七層代理的特點:基于http協議進行;可以對請求進行深入地解析和處理(流量控制、內容的過濾)
????????四層:適用于需要高效處理大量連接請求的場景:?TCP 和 UDP 協議的負載均衡;
????????七層:適用于對請求進行精確處理和控制的場景:Web 應用程序的負載均衡
2.四層和七層哪個速度更快(面試)
????????四層代理相比七層更快;
????????四層只是流量轉發,不能對請求進行解析和控制;快
????????四層代理是通過內核轉發的流量;快
????????七層代理,需要對請求進行處理和解析;慢
????????七層的 訪問控制、流量處理 是通過用戶態進行的;慢
????????七層代理可以提供更高級的服務和用戶體驗
正向代理:
????????正向代理是面向客戶端的;當客戶端的IP地址被web服務器禁止訪問后,(客戶端)可以通過代理服務器去訪問web服務器;
????????web服務器只會知道是代理服務器的ip訪問的它,而不知道是客戶端
proxy_pass #配置代理服務器訪問的地址;只能寫在location模塊中
應用:正向代理更多的用在公司內網,公司內員工的主機都通過一個代理服務器訪問互聯網,而互聯網上被訪問的服務器,只知道代理服務器的ip,不知道公司內員工的ip,主要作用:加速,翻墻
反向代理:***
? ? ? ??客戶端直接訪問代理服務器
????????兩者都是通過客戶端訪問代理服務器,代理服務器轉發請求或者流量到后端服務器,后端的web服務器會有多臺,用戶并不知道最終訪問的是哪一臺服務器
????????負載均衡具有:高可用、可擴展、提高可維護性
工作中你是怎么做反向代理的(面試*)
反向代理就是負載均衡,根據場景的并發量來確定負載均衡的算法
并發量小:可以使用默認輪詢,配合最小連接數使用即可
高并發:ip_hash或者url_hash來實現,訪問一次之后,就不會再切換后端web服務器,下一次訪問的就是緩存,速度快、后臺web服務器的請求壓力也會變小
upstream? ? ? ? 基于http實現負載均衡;反向代理;
特點:
http請求的負載均衡方式
沒有緩存
默認為輪詢算法
1.輪詢算法(rr)
會將請求輪流分配給后端服務器,輪詢算法適用于 web服務器 處理能力相近的情況;默認算法,可以不加
vim /usr/local/nginx/conf/nginx.conf#gzip on;upstream ky30 {server 192.168.220.20;server 192.168.220.30;#指定通過代理服務器10,會把http的請求轉發到20或者30上}location / {root html;index index.html index.htm;proxy_pass http://ky30;}
2.加權輪詢算法
????????建立在輪詢算法的基礎之上,通過給不同的web服務器分配權重,讓處理能力更強的服務器可以分配到更多的請求;
????????雖然配置了權重值,但是輪詢的結果未必準確
vim /usr/local/nginx/conf/nginx.conf#keepalive_timeout 0;keepalive_timeout 65;#gzip on;upstream ky30 {server 192.168.220.20 weight=2;server 192.168.220.30 weight=3;#通過代理服務器10,轉發http請求時,網權重高的服務器上轉發的次數會更多,權重少的轉發就少}
3.ip_hash算法
????????會根據IP地址計算出一個hash值,使用ip_hash算法,同一個客戶端的請求會被分配到同一個后端服務器,可以保證會話的穩定性;
????????如果后端服務器的數量發生變化,hash值會重新計算,請求的服務器也會發生變化
4.最少連接數算法least_conn
????????可以輪詢,會將請求發送到當前連接數最少的web服務器
????????主要適用于后端服務器處理 任務耗時不同 的情況,避免了所有請求集中在處理能力更強的后端服務器上,可以和加權輪詢配合使用
5.url_hash算法
根據uri地址計算hash值;使用url_hash,相同請求的uri會分配到同一個后端web服務器
vim /usr/local/nginx/conf/nginx.conf#gzip on;upstream ky30 {hash $request_uri consistent;server 192.168.220.20 weught=2;server 192.168.220.30 weight=3;}
負載均衡的核心就是各類算法
????????小場景:并發量很小,默認算法就可以滿足適應條件
????????中等:后端web服務器的處理能力有差異:加權輪詢,和最小連接數配合使用
????????大型并發:使用ip_hash或者url_hash;第一次請求之后會有本地緩存,可以提高后續訪問速度,因為hash算法的原因,請求的后臺web服務器不會發生變化;減輕了后臺服務器的請求壓力
????????ip_hash;后端服務器數量發生變化,請求的服務器也會發生變化
????????url_hash;請求的地址發生變化,請求的服務器也可能會發生變化
stream
默認不帶輪詢;可以使用的輪詢方式
算法:除不支持url_hash外,其他與upstream相同
實驗
1.七層:
http? ? ? ? IP地址
http? ? ? ? 域名
2.四層:
stream