負載均衡,無論是否真正了解過,但我相信所有跟編程打交道的讀者都有聽說。同時,它(負載均衡)也是被認為一個大型網站的標識性技術之一(但負載均衡的作用肯定不止這點用途)。雖然網上也有不少關於LVS配置實用的教程或帖子,但總的來說幾乎都是以快餐式文化為主,內容參差不齊,不少教程本身也存在不少錯誤,對讀者不僅沒有幫助,反而造成了視線干擾。因此,本系列,我們將使用較大的篇幅(60%左右)來講對LVS的前提知識的進行補充以及其原理進行講解,然后用較少的篇幅(30%左右)來講解具體操作,最用用剩余的篇幅(10%左右)來講解需要注意的地方。希望借此讓各位讀者能夠從真正意義上了解LVS。
好的,作為本系列的開篇,本章內容中,我們將講述:
(1)、LVS的簡介
(2)、LVS的優勢
一、LVS簡介
負載均衡是什么我就懶得解析了,目前市面上的負載均衡設備主要分為兩個方面,其一就是基於硬件的負載均衡設備,譬如Cisco(思科)的交換機、華為的硬件機器、F5、梭子魚等。這些設備通常以整套產品(軟+硬+服務)的方式進行出售,用戶按照自身需求購買,一般均能達到良好的預期結果,此外這些設備的設備商也提供了一站式服務,讓您的后期的維護省下不少的煩惱。不過由於這些設備一般售價較高,后期的維護也可能需要支付一筆不菲的費用,這也使得不少的中小企業因無法承擔這筆開支而選擇放棄。
而另外一種則是軟件型的負載均衡,這一類的負載均衡都是基於操作系統內核或者是以運行於操作系統中的軟件服務的形式提供負載均衡服務。比較經典的是LVS、NLB以及某些提供輪詢或代理功能的軟件等。這種方式最大的好處就是能夠以相對低廉的價格獲得同樣的服務,但這種方式通常沒有任何的機構提供任何的支持服務(給維護費除外),也難以獲得任何所謂的一站式服務,對使用者本身的技術掌握能力要求也較高。
我們再用一句話來概括LVS:LVS,全稱是“Linux Virtual Server”,它是我國(中國)國內最早出現的自由軟件項目之一,在1998年5月由章文嵩先生立項成立,通過基於內容的分發的形式讓多台真實服務器同時處理來自外部的多個請求,從而提升整體服務的吞吐性能,其核心為ipvsadm,目前LVS的使用已經遍布互聯網的每個角落,幾乎所有有使用Linux作為服務器的大型企業都有使用。
二、LVS的優勢
LVS的初次配置使用並算不上特別的容易,而后期的維護就更加考驗經驗,與之同時,也有不少用戶在使用一些其他軟件來提供負載均衡功能,比較經典的例子就是PHPer們號稱的最強webserver服務器Nigix,用它來做代理(咳咳,Linux中沒有比Jexus更強的WebServer)。這些后者的方式相對來說操作更加簡單,因此有很多的負載均衡均是使用一台裝有Nginx之類的服務器來充當。不過即便如此,LVS仍然均有它們所的無法比擬的好處。
為了說清楚它的優勢,我們需要先回顧一下OSI七層網絡模型的知識。
上圖為大家所熟知的OSI七層模型,數據從應用程序發出經由應用層、表示層、會話層(目前上面三層可以合並為一層)……經過層層封裝到達鏈路層,然后再化為0101二進制,再以比特流的形式在物理線路上進行傳輸。數據流到達目的計算機后,也按照相反的步驟從下往上的層層解包,最后到達應用層並把數據傳遞給應用程序。
普通的負載均衡軟件,主要都是工作在三層到頂層之間,從理論上來講越是工作在上層的服務就意味着數據包的傳輸需要進行越多的打包和拆包工作,性能的消耗也越是厲害(當然,單個數據包的消耗極小,幾乎可以忽略,這里指海量數據包),代理軟件一般工作在三層/四層之中,WebServer工作在五到七層之中,而LVS則可以工作在二層之中(數據鏈路層),我想剩余的不用我多說,讀者們也應該馬上意識到它的將會有多高效。
此外,由於OSI網絡具有透明性(上層對下層說:數據給你,剩下的我不管了【不管你怎么傳輸,也不管是否可達】),所有上層協議都是建立在透明的下層的基礎上,我們只要把下層搞定了,上層協議也自然“被”兼容,因此LVS可以無需擔心任何Http協議、Telnet協議、Https協議等高層協議的問題,具有極強的兼容能力。
最后,一般的高層網絡負載均衡設備主要使用NAT技術來實現負載均衡,所有的數據請求與應答的流量都需要經過負載均衡服務器,這不僅相當容易給負載均衡服務器造成巨大的壓力、造成性能上的瓶頸,而且由於數據經過NAT的轉換,數據包中源IP將發生改變,這也很容易造成“后方”服務器上的安全監控設備產生誤判,造成誤殺。而LVS不僅可以使用NAT的方式進行負載均衡,使用非NAT的方式,利用三角網絡的形式進行負載均衡,應答的數據不再經由負載均衡服務器(一般情況,應答才是流量的大頭),並且LVS此時不改變數據包的源IP,僅僅通過改變MAC的方式,以廣播的方式直接向“后方”服務器發送數據,避免了監控的誤殺。
好的,關於LVS的介紹,我們就暫且告一段落,下一篇,我們將開始進入到LVS的學習使用當中,我們下篇見。