初級篇:藉助LVS+Keepalived實現負載均衡

一,負載均衡:必不可少的基礎手段

1.1找更多的牛來拉車吧

  當前大多數的互聯網系統都使用了服務器集羣技術,即集羣將相同服務部署在多臺服務器上構成一個集羣本世紀的牛頓對外提供服務,這些集羣可以是網絡應用服務器集羣,也可以是數據庫服務器集羣,還可以是分佈式緩存服務器集羣等等。

古人有云:當一頭牛拉不動車的時候,不要去尋找一頭更強壯的牛,而是用兩頭牛來拉車

負載均衡

  在實際應用中,在網絡服務器集羣之前總會有一臺負載均衡服務器,負載均衡設備的任務就是作爲網絡服務器流量的入口,挑選最合適的一臺網絡服務器,將客戶端的請求轉發給它處理,實現客戶端到真實服務端的透明轉發。最近幾年很火的「雲計算」以及分佈式架構,本質上也是將後端服務器作爲計算資源,存儲資源,由某臺管理服務器封裝成一個服務對外提供,客戶端不需要關心真正提供服務的是哪臺機器,在它看來,就好像它面對的是一臺擁有近乎無限能力的服務器,而本質上,真正提供服務的,是後端的集羣。

1.2負載均衡的類型

  負載均衡可以採用硬件設備(例如常常聽見的F5),也可以採用軟件負載。

  商用硬件負載設備成本通常較高(一臺幾十萬上百萬很正常),所以在條件允許的情況下我們會採用軟件負載;

  軟件負載解決的兩個核心問題是:選誰,轉發,其中最冒名的是LVS(Linux虛擬服務器)。

傳送門 - >關於負載均衡的實現方式類型等介紹請瀏覽我的另一篇博文:“大型網站技術架構”讀書筆記之六:永無止境之網站的伸縮性架構

二,初識LVS:Linux虛擬服務器

2.1 LVS是神馬東西

  LVS是Linux虛擬服務器的簡稱,也就是Linux虛擬服務器,是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從在Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。

2.2 LVS有神馬作用

  LVS用於主要服務器集羣的負載均衡。它工作在網絡層,可以實現高性能,高可用的服務器集羣技術。它廉價,可把許多低性能的服務器組合在一起形成一個超級服務器,它易用,配置非常簡單,且有多種負載均衡的方法。它穩定可靠,即使在集羣的服務器中某臺服務器無法正常工作,也不影響整體效果。另外可擴展性也非常好。

  LVS自從1998年年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的,高可用的網絡服務,例如WWW服務,緩存服務,DNS服務,FTP服務,MAIL服務,視頻/音頻點播服務等等,有許多比較着名網站和組織都在使用LVS架設的集羣系統,例如:Linux的門戶網站(www.linux.com),向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com),全球最大的開源網站(sourceforge.net)等。

2.3 LVS的體系結構

  使用LVS架設的服務器集羣系統有三個部分組成:

  (1)最前端的負載均衡層,用Load Balancer表示;

  (2)中間的服務器集羣層,用服務器陣列表示;

  (3)最底端的數據共存存儲層,用Shared Storage表示;

  在用戶看來,所有的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。

傳送門 - >關於體系結構的詳細介紹,請瀏覽南飛螞蟻的博客:http://ixdba.blog.51cto.com/2895551/552947

2.4 LVS負載均衡機制

  (1)LVS的英文四層負載均衡,也就是說建立在OSI模型的第四層-傳輸層之上,傳輸層上有我們熟悉的TCP / UDP,LVS支持TCP / UDP的負載均衡因爲LVS是四層負載均衡,因此它相對於其它高層負載均衡的解決辦法,比如DNS域名輪流解析,應用層負載的調度,客戶端的調度等,它的效率是非常高的。

  (2)LVS的轉發主要通過修改IP地址(NAT模式,分爲源地址修改SNAT和目標地址修改DNAT),修改目標MAC(DR模式)來實現。

  ①NAT模式:網絡地址轉換

NAT

  NAT(網絡地址轉換)是一種外網和內網地址映射的技術.NAT模式下,網絡數據報的進出都要經過LVS的處理.LVS需要作爲RS(真實服務器)的網關。當包到達LVS時,LVS做目標地址轉換(DNAT),將目標IP改爲RS的IP.RS接收到包以後,彷彿是客戶端直接發給它的一樣.RS處理完,返回響應時,源IP是RS IP ,目標IP是客戶端的IP地址。這時RS的包通過網關(LVS)中轉,LVS會做源地址轉換(SNAT),將包的源地址改爲VIP,這樣,這個包對客戶端看起來就彷彿是LVS直接返回給它的。客戶端無法感知到後端RS的存在。

  ②DR模式:直接路由

DR

  DR模式下需要LVS和RS集羣綁定同一個VIP(RS通過將VIP綁定在loopback實現),但與NAT的不同點在於:請求由LVS接受,由真實提供服務的服務器(RealServer,RS)直接返回給用戶,返回的時候不經過LVS。詳細來看,一個請求過來時,LVS只需要將網絡幀的MAC地址修改爲某一臺RS的MAC,該包就會被轉發到相應的RS處理,注意此時的源IP和目標IP都沒變,LVS只是做了一下移花接木.RS收到LVS轉發來的包時,鏈路層發現MAC是自己的,到上面的網絡層,發現IP也是自己的,於是這個包被合法地接受,RS感知不到前面有LVS的存在。而當RS返回響應時,只要直接向源IP(即用戶的IP)返回即可,不再經過LVS。

  (3)DR負載均衡模式數據分發過程中不修改IP地址,只修改mac地址,由於實際處理請求的真實物理IP地址和數據請求目的IP地址一致,所以不需要通過負載均衡服務器進行地址轉換,可將響應數據包直接返回給用戶瀏覽器,避免負載均衡服務器網卡帶寬成爲瓶頸。因此,DR模式具有較好的性能,目前也是網站大型使用最廣泛的一種負載均衡手段。

三,構建實戰:LVS + KEEPALIVED實現負載均衡

3.1實驗結構總覽

  (1)本次基於VMware工作站搭建一個四臺Linux(CentOS 6.4)系統所構成的一個服務器集羣,其中兩臺負載均衡服務器(一臺爲主機,另一臺爲備機),另外兩臺作爲真實的網絡服務器(向外部提供HTTP服務,這裏僅僅使用了CentOS的默認自帶的HTTP服務,沒有安裝其他的類似的Tomcat,Jexus服務)。

  (2)本次實驗基於DR負載均衡模式,設置了一個VIP(虛擬IP)爲192.168.80.200,用戶只需要訪問這個IP地址即可獲得網頁服務。其中,負載均衡主機爲192.168.80.100,備機爲192.168.80.101.Web服務器一個爲192.168.80.102,網站服務器乙爲192.168.80.103。

3.2基礎準備工作

  以下工作針對所有服務器,也就是說要在四臺服務器中都要進行配置:

  (1)綁定靜態IP地址

  命令模式下可以執行setup命令進入設置界面配置靜態IP地址; x-window界面下可以右擊網絡圖標配置;配置完成後執行服務網絡重啓啓動網絡服務;

  驗證:執行命令的ifconfig

  (2)設定主機名

  ①修改當前會話中的主機名,執行命令hostname xxxx(這裏xxxx爲你想要改爲的名字)

  ②修改配置文件中的主機名,執行命令vi / etc / sysconfig / network(√一般需要進行此步湊才能永久更改主機名)

  驗證:重啓系統重啓

  (3)IP地址與主機名的綁定

  執行命令vi / etc / hosts,增加一行內容,如下(下面的從節點以你自己的爲主,本實驗搭建了兩個從節點):

  192.168.80.100 lvs-master

  192.168.80.101 lvs-slave

  #下面是本次試驗的兩個真實服務器節點

  192.168.80.102 lvs-webserver1

  192.168.80.103 lvs-webserver2

  保存後退出

  驗證:ping lvs-master

  (4)關閉防火牆

  ①執行關閉防火牆命令:服務iptables停止

      驗證:service iptables stauts

  ②執行關閉防火牆自動運行命令:chkconfig iptables off

  驗證:chkconfig --list | grep iptables

3.3配置兩臺Web服務器

  以下操作需要在角色爲網絡服務器的兩臺中進行,不需要在負載均衡服務器中進行操作:

  (1)開啓HTTP服務

  命令:service httpd start

  補充:chkconfig httpd on - >將httpd設爲自啓動服務

  (2)在宿主機訪問的Web網頁,並通過FTP工具上傳自定義網頁:這裏上傳一個靜態網頁,並通過更改其中的HTML來區別兩臺網絡服務器,以下圖所示爲例,其中一臺顯示從192.168.80.102,而另一臺顯示自192.168.80.103;

  (3)編輯的realserver腳本文件

  ①進入指定文件夾:cd /etc/init.d/

  ②編輯腳本文件:vim realserver

複製代碼


複製代碼

  這裏我們設置虛擬IP爲:192.168.80.200

  ③保存腳本文件後更改該文件權限:chmod 755 realserver

  ④開啓realserver服務:服務realserver啓動

3.4配置主負載服務器

  (1)安裝KEEPALIVED相關包


  在CentOS下,通過yum install命令可以很方便地安裝軟件包,但是前提是你的虛擬機要聯網;

  (2)編輯keepalived.conf配置文件

  ①進入keepalived.conf所在目錄:cd / etc / keepalived

  ②首先清除掉keepalived原有配置:> keepalived.conf

  ③重新編輯keepalived配置文件:vi keepalived.conf

複製代碼


複製代碼

  (3)開啓KEEPALIVED服務


3.5配置從負載服務器

  從負載服務器與主負載服務器大致相同,只是在KEEPALIVED的配置文件中需要改以下兩處:

  (1)將狀態由MASTER改爲BACKUP

  (2)將優先級由100改爲99

複製代碼


複製代碼

3.6驗證性測試

  (1)指定請求的均衡轉發:因爲兩個網絡服務器的權重都一樣,所以會依次轉發給兩個網絡服務器;

  (2)網絡服務器發生故障時:

  ①A發生故障後,只從乙獲取服務;

  這裏模擬192.168.80.102發生故障,暫停其http服務:服務httpd停止

  再來看看這時從外部訪問VIP時,便會只從192.168.80.103獲取網頁:

  ②A故障修復後,又從甲獲取服務;

  這裏模擬192.168.80.102修復完成,重啓其http服務:service httpd start

  再來看看這時從外部訪問VIP,又可以從192.168.80.102獲取網頁:

  (3)主負載均衡服務器發生故障時,備機立即充當主機角色提供請求轉發服務:

  這裏模擬192.168.80.100發生故障,暫停其keepalived服務:service keepalived stop

  再來看看這時從外部訪問VIP,還是可以正常獲取網頁:

學習小結

  LVS是目前廣爲採用的軟件負載均衡解決方案,在一些大型企業級系統及互聯網系統中應用。本次,簡單地瞭解了一下LVS,並在Linux的下搭建了一個小小的測試環境,藉助KEEPALIVED實現了一個最小化的負載均衡測試環境.LVS是一個可以工作在網絡第四層的負載均衡軟件,因此它相對於Nginx的一類工作在第七層的負載均衡軟件有着無可比擬的性能優勢,而且它還是我國的章文嵩博士(現在阿里的副總裁,淘寶的技術專家)作爲創始人發起的,現已經成爲Linux的內核的組成部分。

  當然,目前流行的LVS解決方案中,在網站服務器端也有采用了Nginx的+ Tomcat的這樣的搭配類型,靜態文件和動態文件分開進行處理,也不失爲一種有效的嘗試。在以後的日子裏,我還會話試下在Linux下藉助Jexus跑ASP.NET MVC項目,試試.NET項目在Linux下的運行效果,希望到時也可以做一些分享。好了,今天就到此停筆。

參考資料

(1)王晨純,“Web基礎架構:負載均衡和LVS”:http//www.importnew.com/11229.html

(2)win_xp,“LVS簡介及使用”:http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html

(3)jiwang1980,“LVS + KEEPALIVED”:http://7567567.blog.51cto.com/706378/578289

(4)南飛螞蟻的博客,“Linux負載均衡軟件LVS之概念篇”:http://ixdba.blog.51cto.com/2895551/552947

(5)AKing王國,“四層和七層負載均衡的區別”:http://kb.cnblogs.com/page/188170/

 

作者:周旭龍

出處:http//edisonchou.cnblogs.com/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。

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