標籤:架構設計 負載平衡
轉載請說明出處:http://blog.csdn.net/cywosp/article/details/38036537
首先讓我們來看看下面這張大家都非常熟悉的TCP/IP協議族的分層圖: 關於每層在網路資料包傳輸過程中所起到的作用不是本文的重點,本文主要是講解如何在網路層中使用IP來做伺服器叢集的負載平衡,為什麼可以在這一層來做負載平衡。下面在來看IP協議的前序格式: 內紅色框內的源地址和目的地址是IP負載平衡功能的關鍵所在,IP負載平衡又可以稱之為網路層負載平衡,其核心原理就是通過核心驅動更改IP的目的地址來完成資料負載平衡的,如: 如所示,使用者請求資料包(源地址為200.110.50.1)到達負載平衡伺服器114.100.20.200後,負載平衡伺服器在核心進程擷取網路資料包,根據一定的負載平衡演算法得到一台內部的真實伺服器192.168.1.1,然後將資料包的目的IP修改為192.168.1.1,此後資料包將會被發往192.168.1.1的伺服器上,伺服器處理完後,將向負載平衡伺服器返回相應的資料包,負載平衡伺服器在把源地址修改為114.100.20.200後將資料包傳輸給使用者瀏覽器。在這一整個過程中,資料包沒有通過使用者的應用進程,因此該負載平衡的效能是非常之高的。 根據以上的圖和上文的講解,大家可能會覺得這很容易實現,其實不然,在這裡需要處理關鍵的地方就是如何將叢集內部伺服器處理完後的資料返回給負載平衡伺服器。因為,使用者請求的資料包到達負載平衡伺服器前的目的地址是114.100.20.200,源地址是200.110.50.1,通過負載平衡伺服器修改後的目的地址是192.168.1.1,源地址還是200.110.50.1,所以處理後返回的資料包目的地址將是200.110.50.1,源地址是192.168.1.1,最終返回的資料包要回到負載平衡伺服器就成了問題。解決的辦法大概有如下兩種:一、負載平衡伺服器使用雙網卡,一個對內一個對外,在修改請求資料包的目的IP的同時也修改源地址,將源地址設為自身的IP,即源地址轉換(SNAT),這樣內部叢集伺服器響應會再回到負載平衡伺服器;二、將負載平衡伺服器作為真實物理伺服器叢集的閘道伺服器,這樣所有的響應都將通過負載平衡伺服器。 IP負載平衡在核心進程完成資料分發,處理效能得到了很好的提高。但是由於所有請求和響應都要經過負載平衡伺服器,叢集的最大響應資料輸送量將受到負載平衡伺服器網卡頻寬的限制,對於提供下載服務或者視頻服務等需要大量傳輸資料的網站而言,這是難以滿足需求的。要是能讓響應資料包繞過負載平衡伺服器直接發往使用者機器上就好了,有什麼辦法可以做到呢?當然有,那就是鏈路層的負載平衡,這將在下一博文中講解。
參考:[1] 《TCP/IP詳解,卷1:協議》[2] 《大型網站技術架構——核心原理與案例分析》
每天進步一點點——負載平衡之IP