首先讓我們來看看下面這張大家都非常熟悉的TCP/IP協(xié)議族的分層圖:

關于每層在網(wǎng)絡數(shù)據(jù)包傳輸過程中所起到的作用不是本文的重點唬滑,本文主要是講解如何在網(wǎng)絡層中使用IP來做服務器集群的負載均衡它掂,為什么可以在這一層來做負載均衡。下面在來看IP協(xié)議的報頭格式:

內(nèi)紅色框內(nèi)的源地址和目的地址是IP負載均衡功能的關鍵所在帆啃,IP負載均衡又可以稱之為網(wǎng)絡層負載均衡瞬女,其核心原理就是通過內(nèi)核驅(qū)動更改IP的目的地址來完成數(shù)據(jù)負載均衡的,如下圖:

如上圖所示努潘,用戶請求數(shù)據(jù)包(源地址為200.10.10.1)到達負載均衡服務器114.100.80.10后诽偷,負載均衡服務器在內(nèi)核進程獲取網(wǎng)絡數(shù)據(jù)包,根據(jù)一定的負載均衡算法得到一臺內(nèi)部的真實服務器10.0.0.1疯坤,然后將數(shù)據(jù)包的目的IP修改為10.0.0.1报慕,此后數(shù)據(jù)包將會被發(fā)往10.0.0.1的服務器上,服務器處理完后压怠,將向負載均衡服務器返回相應的數(shù)據(jù)包眠冈,負載均衡服務器在把源地址修改為200.10.10.1后將數(shù)據(jù)包傳輸給用戶瀏覽器。在這一整個過程中菌瘫,數(shù)據(jù)包沒有通過用戶的應用進程蜗顽,因此該負載均衡的性能是非常之高的。
根據(jù)以上的圖和上文的講解雨让,大家可能會覺得這很容易實現(xiàn)雇盖,其實不然,在這里需要處理關鍵的地方就是如何將集群內(nèi)部服務器處理完后的數(shù)據(jù)返回給負載均衡服務器栖忠。因為崔挖,用戶請求的數(shù)據(jù)包到達負載均衡服務器前的目的地址是114.100.80.10贸街,源地址是200.10.10.1,通過負載均衡服務器修改后的目的地址是10.0.0.1狸相,源地址還是200.10.10.1匾浪,所以處理后返回的數(shù)據(jù)包目的地址將是200.10.10.1,源地址是10.0.0.1卷哩,最終返回的數(shù)據(jù)包要回到負載均衡服務器就成了問題蛋辈。
解決的辦法大概有如下兩種:
一、負載均衡服務器使用雙網(wǎng)卡将谊,一個對內(nèi)一個對外冷溶,在修改請求數(shù)據(jù)包的目的IP的同時也修改源地址,將源地址設為自身的IP尊浓,即源地址轉(zhuǎn)換(SNAT)逞频,這樣內(nèi)部集群服務器響應會再回到負載均衡服務器;
二栋齿、將負載均衡服務器作為真實物理服務器集群的網(wǎng)關服務器苗胀,這樣所有的響應都將通過負載均衡服務器。
IP負載均衡在內(nèi)核進程完成數(shù)據(jù)分發(fā)瓦堵,處理性能得到了很好的提高基协。但是由于所有請求和響應都要經(jīng)過負載均衡服務器,集群的最大響應數(shù)據(jù)吞吐量將受到負載均衡服務器網(wǎng)卡帶寬的限制菇用,對于提供下載服務或者視頻服務等需要大量傳輸數(shù)據(jù)的站點而言澜驮,這是難以滿足需求的。要是能讓響應數(shù)據(jù)包繞過負載均衡服務器直接發(fā)往用戶機器上就好了惋鸥,有什么辦法可以做到呢杂穷?當然有,那就是鏈路層的負載均衡卦绣。
參考網(wǎng)站: