一.LVS是什嗎?
LVS的英文全稱是Linux Virtual Server,即Linux虛擬伺服器。它是我們國家的章文嵩博士的一個開源項目。在linux記憶體2.6中,它已經成為核心的一部分,在此之前的核心版本則需要重新編譯核心。
二.LVS能幹什嗎?
LVS主要用於多伺服器的負載平衡。它工作在網路層,可以實現高效能,高可用的伺服器叢集技術。它廉價,可把許多低效能的伺服器組合在一起形成一個超級伺服器。它易用,配置非常簡單,且有多種負載平衡的方法。它穩定可靠,即使在叢集的伺服器中某台伺服器無法正常工作,也不影響整體效果。另外可擴充性也非常好。
三.工作原理
如,LVS可分為三部分:
1.Load Balancer:這是LVS的核心部分,它好比我們網站MVC模型的Controller。它負責將客戶的請求按照一定的演算法分發到下一層不同的伺服器進行處理,自己本身不做具體業務的處理。另外該層還可用監控下一層的狀態,如果下一層的某台伺服器不能正常工作了,它會自動把其剔除,恢複後又可用加上。該層由一台或者幾台Director Server組成。
2.Server Array:該層負責具體業務。可有WEB Server、mail Server、FTP Server、DNS Server等組成。注意,其實上層的Director Server也可以當Real server用的。
3.Shared Storage:主要是提高上一層資料和為上一層保持資料一致。
四.負載平衡機制
前面我們說了LVS是工作在網路層。相對於其它負載平衡的解決辦法,比如DNS網域名稱輪流解析、應用程式層負載的調度、用戶端的調度等,它的效率是非常高的。LVS的通過控制IP來實現負載平衡。IPVS是其具體的實現模組。IPVS的主要作用:安裝在Director Server上面,在Director Server虛擬一個對外訪問的IP(VIP)。使用者訪問VIP,到達Director Server,Director Server根據一定的規則選擇一個Real Server,處理完成後然後返回給用戶端資料。這些步驟產生了一些具體的問題,比如如何選擇具體的Real Server,Real Server如果返回給用戶端資料等等。IPVS為此有三種機制:
1.VS/NAT(Virtual Server via Network Address Translation),即網路地址翻轉技術實現虛擬伺服器。當請求來到時,Diretor server上處理的程式將資料報文中的目標地址(即虛擬IP地址)改成具體的某台Real Server,連接埠也改成Real Server的連接埠,然後把報文發給Real Server。Real Server處理完資料後,需要返回給Diretor Server,然後Diretor server將資料包中的源地址和源連接埠改成VIP的地址和連接埠,最後把資料發送出去。由此可以看出,使用者的請求和返回都要經過Diretor Server,如果資料過多,Diretor Server肯定會不堪重負。
2.VS/TUN(Virtual Server via IP Tunneling),即IP隧道技術實現虛擬伺服器。它跟VS/NAT基本一樣,但是Real server是直接返回資料給用戶端,不需要經過Diretor server,這大大降低了Diretor server的壓力。
3.VS/DR(Virtual Server via Direct Routing),即用直接路由技術實現虛擬伺服器。跟前面兩種方式,它的報文轉寄方法有所不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中效能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。
五.負載調度演算法
前面我們都知道Director Server要選擇不同的Real server,那麼它具體的如果選擇Real Server以達到負載平衡的呢,IPVS實現了八種調度方法,具體演算法可以查看官網或者百度,這裡就不一一列出了。官網:www.linuxvirtualserver.org。
六、具體配置操作
首先我們這裡有三台機子,IP分別是192.168.132.30(Diretor server),192.168.132.64(Real server 1),192.168.132.68(real server 2)。在real server 1和2上面,已經配置好了web服務,並且我們假設還有一個對外訪問的虛擬IP是192.168.132.254(VIP)。另外在Diretor server上面已經安裝好了ipvsadm。
下面我們VS/DR介紹詳細的配置過程。
Diretor server上面的配置:
//首先在Director Server上綁定一個虛擬IP(也叫VIP),此IP用於對外提供服務:Ifconfig eth0:0 192.168.132.254 broadcast 192.168.132.254 netmask 255.255.255.255 up//給裝置eth0:0指定一條路由route add -host 192.168.132.254 dev eth0:0//啟用系統的包轉寄功能echo "1">/proc/sys/net/ipv4/ip_forward//清楚ipvsadm以前的設定ipvsadm -C//添加一個新的虛擬IP記錄192.168.132.254,其持續服務之間是120秒ipvsadm -A -t 192.168.132.254:80 -s rr -p 120//在新增的虛擬IP記錄中新增兩天real server記錄,-g即為使用VS/DR模式ipvsadm -a -t 192.168.132.254:80 -r 192.168.132.64:80 -gipvsadm -a -t 192.168.132.254:80 -r 192.168.132.68:80 -g//啟用LVS服務ipvsadm
兩台real server上的配置:
/*在迴環裝置上綁定了一個虛擬IP地址,並設定其子網路遮罩為255.255.255.255,與Director Server上的虛擬IP保持互連*/ifconfig lo:0 192.168.132.254 broadcast 192.168.132.254 netmask 255.255.255.255 uproute add -host 192.168.132.254 dev lo:0//禁用原生ARP請求echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce
之後在其他用戶端機子上面,訪問http://192.168.132.254/,則可以看到結果了。
最後我把這個寫出了SHELL指令碼,可以下載使用。