負載均衡之IP

首先讓我們來看看下面這張大家都非常熟悉的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] 《大型網站技術架構——核心原理與案例分析》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章