IPVS三種機(jī)制:
VS/NAT蚜点,VS/TUN帝璧,VS/DR
一.LVS是什么先誉?
LVS的英文全稱是Linux?Virtual?Server,即Linux虛擬服務(wù)器的烁。它是我們國家的章文嵩博士的一個開源項(xiàng)目褐耳。在linux內(nèi)存2.6中,它已經(jīng)成為內(nèi)核的一部分渴庆,在此之前的內(nèi)核版本則需要重新編譯內(nèi)核铃芦。二.LVS能干什么?
LVS主要用于多服務(wù)器的負(fù)載均衡襟雷。它工作在網(wǎng)絡(luò)層刃滓,可以實(shí)現(xiàn)高性能,高可用的服務(wù)器集群技術(shù)耸弄。它廉價咧虎,可把許多低性能的服務(wù)器組合在一起形成一個超級服務(wù)器。它易用计呈,配置非常簡單砰诵,且有多種負(fù)載均衡的方法。它穩(wěn)定可靠捌显,即使在集群的服務(wù)器中某臺服務(wù)器無法正常工作茁彭,也不影響整體效果。另外可擴(kuò)展性也非常好扶歪。
三.工作原理
如上圖理肺,LVS可分為三部分:
1.Load?Balancer:這是LVS的核心部分,它好比我們網(wǎng)站MVC模型的Controller。它負(fù)責(zé)將客戶的請求按照一定的算法分發(fā)到下一層不同的服務(wù)器進(jìn)行處理哲嘲,自己本身不做具體業(yè)務(wù)的處理贪薪。另外該層還可用監(jiān)控下一層的狀態(tài),如果下一層的某臺服務(wù)器不能正常工作了眠副,它會自動把其剔除画切,恢復(fù)后又可用加上。該層由一臺或者幾臺Director?Server組成囱怕。
2.Server?Array:該層負(fù)責(zé)具體業(yè)務(wù)霍弹。可有WEB?Server娃弓、mail?Server典格、FTP?Server、DNS?Server等組成台丛。注意耍缴,其實(shí)上層的Director?Server也可以當(dāng)Real?server用的。
3.Shared?Storage:主要是提高上一層數(shù)據(jù)和為上一層保持?jǐn)?shù)據(jù)一致挽霉。四.負(fù)載均衡機(jī)制前面我們說了LVS是工作在網(wǎng)絡(luò)層防嗡。相對于其它負(fù)載均衡的解決辦法,比如DNS域名輪流解析侠坎、應(yīng)用層負(fù)載的調(diào)度蚁趁、客戶端的調(diào)度等,它的效率是非常高的实胸。LVS的通過控制IP來實(shí)現(xiàn)負(fù)載均衡他嫡。IPVS是其具體的實(shí)現(xiàn)模塊。IPVS的主要作用:安裝在Director?Server上面庐完,在Director?Server虛擬一個對外訪問的IP(VIP)钢属。用戶訪問VIP,到達(dá)Director?Server门躯,Director?Server根據(jù)一定的規(guī)則選擇一個Real?Server淆党,處理完成后然后返回給客戶端數(shù)據(jù)。這些步驟產(chǎn)生了一些具體的問題生音,比如如何選擇具體的Real?Server,Real?Server如果返回給客戶端數(shù)據(jù)等等窒升。IPVS為此有三種機(jī)制:
1.VS/NAT(Virtual?Server?via?Network?Address?Translation)缀遍,即網(wǎng)絡(luò)地址翻轉(zhuǎn)技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。當(dāng)請求來到時饱须,Diretor?server上處理的程序?qū)?shù)據(jù)報文中的目標(biāo)地址(即虛擬IP地址)改成具體的某臺Real?Server,端口也改成Real?Server的端口域醇,然后把報文發(fā)給Real?Server。Real?Server處理完數(shù)據(jù)后,需要返回給Diretor?Server譬挚,然后Diretor?server將數(shù)據(jù)包中的源地址和源端口改成VIP的地址和端口锅铅,最后把數(shù)據(jù)發(fā)送出去。由此可以看出减宣,用戶的請求和返回都要經(jīng)過Diretor?Server盐须,如果數(shù)據(jù)過多,Diretor?Server肯定會不堪重負(fù)漆腌。
2.VS/TUN(Virtual?Server?via?IP?Tunneling),即IP隧道技術(shù)實(shí)現(xiàn)虛擬服務(wù)器贼邓。它跟VS/NAT基本一樣,但是Real?server是直接返回數(shù)據(jù)給客戶端闷尿,不需要經(jīng)過Diretor?server,這大大降低了Diretor?server的壓力塑径。
3.VS/DR(Virtual?Server?via?Direct?Routing),即用直接路由技術(shù)實(shí)現(xiàn)虛擬服務(wù)器填具。跟前面兩種方式统舀,它的報文轉(zhuǎn)發(fā)方法有所不同,VS/DR通過改寫請求報文的MAC地址劳景,將請求發(fā)送到Real?Server誉简,而Real?Server將響應(yīng)直接返回給客戶,免去了VS/TUN中的IP隧道開銷枢泰。這種方式是三種負(fù)載調(diào)度機(jī)制中性能最高最好的描融,但是必須要求Director?Server與Real?Server都有一塊網(wǎng)卡連在同一物理網(wǎng)段上。五.負(fù)載調(diào)度算法前面我們都知道Director?Server要選擇不同的Real?server衡蚂,那么它具體的如果選擇Real?Server以達(dá)到負(fù)載均衡的呢窿克,IPVS實(shí)現(xiàn)了八種調(diào)度方法,具體算法可以查看官網(wǎng)或者百度,這里就不一一列出了毛甲。官網(wǎng):www.linuxvirtualserver.org年叮。六、具體配置操作
首先我們這里有三臺機(jī)子玻募,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上面七咧,已經(jīng)配置好了web服務(wù)跃惫,并且我們假設(shè)還有一個對外訪問的虛擬IP是192.168.132.254(VIP)。另外在Diretor?server上面已經(jīng)安裝好了ipvsadm艾栋。下面我們VS/DR介紹詳細(xì)的配置過程爆存。Diretor?server上面的配置:
//首先在Director Server上綁定一個虛擬IP(也叫VIP),此IP用于對外提供服務(wù):
Ifconfig eth0:0 192.168.132.254 broadcast 192.168.132.254 netmask 255.255.255.255 up
//給設(shè)備eth0:0指定一條路由
route add -host 192.168.132.254 dev eth0:0
//啟用系統(tǒng)的包轉(zhuǎn)發(fā)功能
echo "1">/proc/sys/net/ipv4/ip_forward
//清楚ipvsadm以前的設(shè)置
ipvsadm -C
//添加一個新的虛擬IP記錄192.168.132.254蝗砾,其持續(xù)服務(wù)之間是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 -g
ipvsadm -a -t 192.168.132.254:80 -r 192.168.132.68:80 -g
//啟用LVS服務(wù)
ipvsadm
兩臺real?server上的配置:
/*在回環(huán)設(shè)備上綁定了一個虛擬IP地址携冤,并設(shè)定其子網(wǎng)掩碼為255.255.255.255,與Director Server上的虛擬IP保持互通*/
ifconfig lo:0 192.168.132.254 broadcast 192.168.132.254 netmask 255.255.255.255 up
route add -host 192.168.132.254 dev lo:0
//禁用本機(jī)的ARP請求echo "1"?>/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1"?>/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2"?>/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2"?>/proc/sys/net/ipv4/conf/all/arp_announce
之后在其他客戶端機(jī)子上面闲勺,訪問http://192.168.132.254/曾棕,則可以看到結(jié)果了。
最后我把這個寫出了SHELL腳本菜循,可以下載使用翘地。