一文詳解負載均衡和反向代理的真實區別

2021-12-24 良許Linux


連結:https://www.zhihu.com/question/20553431/answer/130698230

一、SLB 產生背景SLB(伺服器負載均衡):在多個提供相同服務的伺服器的情況下,負載均衡設備存在虛擬服務地址,當大量客戶端從外部訪問虛擬服務IP位址時,負載均衡設備將這些報文請求根據負載均衡算法,將流量均衡的分配給後臺伺服器以平衡各個伺服器的負載壓力,避免在還有伺服器壓力較小情況下其他服務達到性能臨界點出現運行緩慢甚至宕機情況,從而提高服務效率和質量。因此對客戶端而言,RS(real server 實際伺服器)的IP位址即是負載均衡設備VIP(虛擬服務地址IP)地址,真正的RS伺服器IP位址對於客戶端是不可見的。二、SLB 的三種傳輸模式四層SLB:配置負載均衡設備上服務類型為tcp/udp,負載均衡設備將只解析到4層,負載均衡設備與client三次握手之後就會和RS建立連接;七層SLB:配置負載均衡設備服務類型為 http/ftp/https 等,負載均衡設備將解析報文到7層,在負載均衡設備與client三次握手之後,只有收到對應七層報文,才會跟RS建立連接。在負載均衡設備中,SLB主要工作在以下的三種傳輸模式中:根據不同的模式,負載均衡設備的工作方式也不盡相同,但無論在哪種模式下,客戶端發起的請求報文總是需要先到達負載均衡設備進行處理,這是負載均衡設備正常工作的前提。模擬網絡拓撲環境:在整個報文交互過程中,採用 Tcpdump 和 Wireshark 分別在 RS 和 Client 處抓包,然後使用 Wireshark 進行報文解析。三、 反向代理模式反向代理:普通的代理設備是內網用戶通過代理設備出外網進行訪問,而工作在這種模式下的負載均衡設備,則是外網用戶通過代理設備訪問內網,因此稱之為反向代理。當負載均衡設備收到客戶端請求後,會記錄下此報文( 源IP位址、目的IP位址、協議號、源埠、目的埠,服務類型以及接口索引),將報文目的地址更改為優選後的RS設備的IP位址,目的埠號不變,源地址修改為負載均衡設備下行與對應RS設備接口的IP位址,源埠號隨機發送給RS;當RS收到報文後,會以源為RS接口IP位址,目的IP設備地址回復給負載均衡設備,負載均衡設備將源修改為VIP,目的埠號修改為客戶端的源埠號,目的IP修改為Client的源IP回復報文。配置完成後,Client 訪問 RS 伺服器,返回成功,整個報文交互過程如下 :TCP握手過程:首先Client向負載均衡設備發送TCP SYN報文請求建立連接,源IP為Client的IP 10.8.21.40,源埠號50894,目的IP為VIP位址172.16.75.84,目的埠號80;收到請求報文後,負載均衡設備會以源IP為VIP位址172.16.75.84,埠號80,目的IP 10.8.21.40,目的埠號50894回應SYN ACK報文;Client收到報文後回復ACK報文,TCP三次握手成功。當負載均衡設備與client完成三次握手後,因為配置的七層SLB,如果收到HTTP請求,就會根據負載均衡算法和伺服器健康狀態優選出對應的RS(在這次過程中選擇的RS設備為172.16.75.82),然後與RS建立TCP連接:負載均衡設備發送 TCP SYN 報文請求連接,源IP為負載均衡設備與RS相連接口IP 172.16.75.83,源埠號隨機4574,目的IP為RS的IP 172.16.75.82,目的埠號80;RS 收到報文後,以源 IP 172.16.75.82,埠號80,目的IP 172.16.75.83,目的埠號4574回復SYN ACK報文,負載均衡設備回復ACK報文建立三次握手;之後,負載均衡設備再將收到的HTTP報文源IP修改為與RS相連下行接口IP位址172.16.75.83,源埠號為隨機埠號,將報文發送給RS;當RS收到報文後,使用源為本地IP 172.16.75.82,目的IP為172.16.75.83進行回復,所以報文直接回復給負載均衡設備;當負載均衡設備收到RS的回應報文後,將報文的源修改為VIP位址172.16.75.84,目的IP為10.8.21.40發送回 Client,再將目的埠號修改為HTTP請求報文中的源埠號,伺服器訪問成功。由上述的過程可以看出,在RS端上,client的真實IP位址被負載設備修改成與RS相連接口的IP位址,所以RS無法記錄到Client的訪問記錄,為了解決這個問題,可以採用在HTTP報文頭中添加X-Forwarded-For欄位,本文不做贅述,可以自行查詢。四、透傳模式當負載均衡設備工作在透傳模式中時,RS無法感知到負載均衡設備的存在,對於Client來說,RS的IP位址就是負載均衡設備的VIP位址。在這種模式下,當負載均衡設備收到源為 Client 的 IP,目的 IP 為本地 VIP 地址的報文時,會將報文根據負載均衡策略和健康狀況發送給最優的 RS 設備上,繼而RS設備會收到目的為本地IP,源為Client實際IP的請求報文;然後RS將會直接回應此請求,報文的目的 IP 地址為 Client 的 IP 地址,當負載均衡設備收到此報文後,將源 IP 地址修改為 VIP 地址,然後將報文發送給 Client。同樣在 RS 端和 Client 端抓取交互報文:

RS和負載均衡設備之間的報文交互過程

結果分析:

TCP握手過程:同反向代理模式交互過程

HTTP報文交互過程:

Client向負載均衡設備的VIP位址172.16.75.84以源IP 10.8.21.40發送HTTP請求,當負載均衡設備收到報文後,與優選後的RS進行TCP三次握手,過程同反向代理模式,然後將收到的HTTP報文,不改變報文的源IP位址和源/目的埠號,只修改目的IP修改為優選後的RS地址172.16.75.82;

當RS收到源來自IP 10.8.21.40的報文後,回復報文給IP位址10.8.21.40,此時要注意,必須在RS上配置回復報文經過負載均衡設備,負載均衡設備會將源IP修改為VIP位址172.16.75.84,然後轉發給Client,否則Client將會收到源IP為172.16.75.82的HTTP報文,伺服器訪問失敗。

五、 三角模式在三角模式下,當客戶端發送請求到負載設備上時,負載均衡設備會計算出最優RS,然後直接根據MAC地址將報文轉發給RS,在RS上配置報文的源IP為VIP位址(一般配置在loopback口上),因此在這種情況下,RS會直接將報文發送給Client,即使回復報文經過負載均衡設備,此設備不做任何處理。由於報文在整個過程中傳輸途徑類似於三角形,因此稱之為三角模式。結果分析由於採用了4層SLB,所以在TCP握手過程中與上述的7層SLB有些不同,當Client和RS完成三次握手之後,此時負載均衡設備會直接選擇RS,然後跟RS建立TCP三次握手;在三角模式環境中,由於RS的Loopback口和負載均衡設備上都存在著VIP位址172.16.75.84,當負載均衡設備經過負載均衡算法選擇出對應的RS後,會根據實際配置的RS的IP位址對應的mac地址,將報文以目的mac為RS,目的IP為VIP的方式建立TCP連接。首先Client向負載均衡設備的VIP發送HTTP請求,源為10.8.21.40,當負載均衡設備收到報文後,將報文直接轉發給RS,當RS收到源IP為10.8.21.40,目的IP為本地Loopback口IP位址172.16.75.84的報文後,直接將報文回復給10.8.21.40,同樣源為IP位址172.16.75.84,由此訪問伺服器成功。在三角模式中,由於回復報文負載均衡設備不做任何處理,所以非常適合於RS到Client方向流量較大或者連接數目較多的組網環境。採用三角模式時,必須注意RS有路由可以到達Client,並且在RS的Loopback接口上必須有負載均衡設備的VIP位址,否則即使RS設備收到Client的請求報文也會直接丟棄報文,不作回應。六、總結由於反向代理模式中在RS側只能收到源為負載均衡設備IP的報文,因此可以使用防火牆增加安全性,只允許源IP為負載均衡設備的IP位址的報文通過,同時增加X-Forwarded-For欄位也可以讓RS只允許有此欄位的報文進行訪問,因此安全性相對較高。

相關焦點

  • 反向代理、負載均衡!優秀的 Nginx 是如何做到的?
    Nginx 是一款自由的、開源的、高性能的 HTTP 伺服器和反向代理伺服器;同時也是一個 IMAP、POP3、SMTP 代理伺服器。Nginx 可以作為一個 HTTP 伺服器進行網站的發布處理,另外 Nginx 可以作為反向代理進行負載均衡的實現。
  • Nginx 反向代理與負載均衡
    作者:chenhongdong連結:juejin.im/post/5b01336af265da0b8a67e5c9什麼是反向代理與負載均衡
  • Nginx 反向代理、負載均衡圖文教程 !
    當然很多都是隨便一說的玩笑話,聽過一笑便可,不必當真,也不必抱怨了好了,今天就直接來說一下主題吧,前端要了解一些運維的Nginx用法,內容不多,簡單看看就好,這兩個功能在工作當中就夠用了,那麼首先來看個問題,什麼是反向代理與負載均衡什麼是反向代理與負載均衡什麼是反向代理當我們有一個伺服器集群,並且伺服器集群中的每臺伺服器的內容一樣的時候,同樣我們要直接從個人電腦訪問到伺服器集群伺服器的時候無法訪問
  • 一文詳解HAProxy負載均衡,看完後醍醐灌頂!(內附網盤連結和提取碼)
    HAProxy 跟 LVS 類似,是一款負載均衡軟體;從效率上來講 HAProxy
  • (實用篇)詳解 Nginx代理功能與負載均衡
    本篇文章主要介紹了詳解 Nginx代理功能與負載均衡,先描述一些關於代理功能的配置,再說明負載均衡詳細,有興趣的可以了解一下。 序言Nginx的代理功能與負載均衡功能是最常被用到的,關於nginx的基本語法常識與配置已在上篇文章中有說明,這篇就開門見山,先描述一些關於代理功能的配置,再說明負載均衡詳細。
  • 正向代理、反向代理、Nginx負載均衡方式
    訪問原來無法訪問的資源,如google (常用軟體:VPN)可以做緩存,加速訪問資源對客戶端訪問授權,上網進行認證 (常用軟體:CCProxy,只讓部分IP可以上外網)代理可以記錄用戶訪問記錄(上網行為管理),對外隱藏用戶信息(常用軟體:CCProxy)正向代理是一個位於客戶端和原始伺服器(origin server
  • 圖文講解,如何使用 Nginx 反向代理、負載均衡
    來源:http://t.cn/AiKual8Y學到老活到老什麼是反向代理與負載均衡Nginx反向代理與負載均衡的實現nginx配置proxy_passUpstream模塊實現負載均衡工作中的簡單使用學到老活到老前端圈一直很新
  • 負載均衡詳解
    以上模式適合有動靜分離的場景,反向代理伺服器(集群)可以起到緩存和動態請求分發的作用,當時靜態資源緩存在代理伺服器時,則直接返回到瀏覽器。如果動態頁面則請求後面的應用負載均衡(應用集群)。(2)網際網路公司一般使用開源軟體,因此大部分應用採用軟體負載均衡;部分採用硬體負載均衡。比如某網際網路公司,目前是使用幾臺F5做全局負載均衡,內部使用Nginx等軟體負載均衡。二、Ngnix負載均衡Ngnix是一款輕量級的Web伺服器/反向代理伺服器,工作在七層Http協議的負載均衡系統。具有高性能、高並發、低內存使用等特點。
  • 一文詳解負載均衡原理
    隨著業務流量越來越大,單臺伺服器無論如何優化,無論採用多好的硬體,總會有性能天花板,當單伺服器的性能無法滿足業務需求時,就需要把多臺伺服器組成集群系統提高整體的處理性能。基於上述需求,我們要使用統一的流量入口來對外提供服務,本質上就是需要一個流量調度器,通過均衡的算法,將用戶大量的請求流量均衡地分發到集群中不同的伺服器上。這其實就是我們今天要說的負載均衡。
  • Nginx 反向代理和負載均衡策略實戰案例
    首先,nginx能做反向代理【關於反向代理和正向代理此處不做說明了,感興趣的小夥伴自行谷歌】;比方說,我想在本地使用 www.glmapper1.com 的域名去訪問www.taobao.com。 那麼這個時候我們就可以通過nginx去實現。再者,nginx能實現負載均衡,什麼是負載均衡呢?
  • 掃盲負載均衡
    負載均衡器和反向代理的區別反向代理是指一類負責接收客戶端請求,轉發給後端伺服器,然後當後端伺服器處理完請求之後,再把後端伺服器的響應轉發給用戶的系統。為什麼叫反向代理呢?這是一個視角和定義的問題,「正向代理」或者「代理」是為客戶端服務,目的是隱藏真正的客戶端,「反向代理」是為伺服器端服務,目的是隱藏真正的伺服器端。負載均衡器它的主要是任務是將用戶的請求分發給後端伺服器,也是需要將響應發回客戶端。
  • Nginx負載均衡與反向代理—《億級流量網站架構核心技術》
    Nginx目前提供了HTTP(ngx_http_upstream_module)七層負載均衡,而1.9.0版本也開始支持TCP(ngx_stream_upstream_module)四層負載均衡。此處再澄清幾個概念。二層負載均衡是通過改寫報文的目標MAC地址為上遊伺服器MAC地址,源IP位址和目標IP位址是沒有變的,負載均衡伺服器和真實伺服器共享同一個VIP,如LVS DR工作模式。
  • 誰說前端不需要懂-Nginx反向代理與負載均衡
    當然很多都是隨便一說的玩笑話,聽過一笑便可,不必當真,也不必抱怨了。今天就直接來說一下主題吧,前端要了解一些運維的Nginx用法,內容不多,簡單看看就好,這兩個功能在工作當中就夠用了,那麼首先來看個問題,什麼是反向代理與負載均衡什麼是反向代理與負載均衡什麼是反向代理當我們有一個伺服器集群,並且伺服器集群中的每臺伺服器的內容一樣的時候,同樣我們要直接從個人電腦訪問到伺服器集群伺服器的時候無法訪問
  • 負載均衡基礎知識
    七層負載均衡工作在OSI模型的應用層,因為它需要解析應用層流量,所以七層負載均衡在接到客戶端的流量以後,還需要一個完整的TCP/IP協議棧。七層負載均衡會與客戶端建立一條完整的連接並將應用層的請求流量解析出來,再按照調度算法選擇一個應用伺服器,並與應用伺服器建立另外一條連接將請求發送過去,因此七層負載均衡的主要工作就是代理。二、四層和七層負載均衡的區別?
  • 詳解Keepalived和HAProxy高可用負載均衡
    概述軟體負載均衡技術是指可以為多個後端伺服器節點提供前端IP流量分發調度服務的軟體技術。Keepalived和HAProxy是眾多軟負載技術中的兩種,其中Keepalived既可以實現負載均衡也可以實現高可用,而HAProxy則更加專注於提供高性能TCP和HTTP反向代理和負載均衡能力。
  • 編譯安裝nginx並實現反向代理負載均衡和緩存功能
    ngx_http_ssl_module #啟用ssl模塊 --with-http_v2_module enable ngx_http_v2_module #源自spdy協議,優先請求瀏覽器最繼續的內容 --with-http_realip_module enable ngx_http_realip_module #反向代理時把真實訪問
  • 終於有人把正向代理和反向代理解釋的明明白白了!
    對於常用的場景,就是我們在Web開發中用到的負載均衡伺服器(二房東),客戶端(租客)發送請求到負載均衡伺服器(二房東)上,負載均衡伺服器(二房東)再把請求轉發給一臺真正的伺服器(房東)來執行,再把執行結果返回給客戶端(租客)。
  • Nginx代理功能與負載均衡詳解
    ,再說明負載均衡詳細。首先給大家說下upstream這個配置的,這個配置是寫一組被代理的伺服器地址,然後配置負載均衡的算法。這裡的被代理伺服器地址有2中寫法。到這裡你是不是感覺nginx的負載均衡配置特別簡單與強大,那麼還沒完,咱們繼續哈,這裡扯下蛋。關於nginx負載均衡配置的幾個狀態參數講解。down,表示當前的server暫時不參與負載均衡。backup,預留的備份機器。
  • 一文秒懂分布式架構下的「負載均衡」
    三層負載均衡和二層負載均衡類似,負載均衡伺服器對外依然提供一個 VIP(虛IP),但集群中不同的機器採用不同的 IP 地址。當負載均衡伺服器接受到請求之後,根據不同的負載均衡算法,通過 IP 將請求轉發至不同的真實伺服器。
  • 漫話:如何給女朋友解釋什麼是反向代理?
    對於常用的場景,就是我們在Web開發中用到的負載均衡伺服器(二房東),客戶端(租客)發送請求到負載均衡伺服器(二房東)上,負載均衡伺服器(二房東)再把請求轉發給一臺真正的伺服器(房東)來執行,再把執行結果返回給客戶端(租客)。