LINUX虛擬服務器--LVS的搭建
本次實驗做得是章文嵩博士創立的開源項目LVS(LinuxVirtual Server)。 Linux虛擬服務器,是一個虛擬的集羣系統,目的是爲了加強系統的可用性以及可伸縮性。本次實驗使用四臺虛擬機,其中兩臺作爲提供服務的真機(real server)另外兩臺作調度器,實現ip負載均衡,其實實現ip負載均衡主要是有ipvs這個模塊來實現的。LVS中有四種ip負載均衡技術,(“VS/NAT”、“VS/TUN”、“VS/DR”、“VS/FULLNAT”)以及相應的10種調度算法:輪叫算法(RR)、加權輪叫算法(WRR)、目標地址散列(DH)、源地址散列(SH)等屬於靜態調度算法,動態調度算法有:最少鏈接(LC)、加權最少鏈接(WLC)、最短期望鏈接(SED)、從不排隊never quene (NQ)、基於局部性的最少鏈接(LBLC)、帶複製的基於局部的最少鏈接(LBLCR)等動態調度算法。
本次實驗使用IPVS模塊實現ip負載均衡且使用VS/RR模式的rr輪叫算法實現調度。
本次試驗拓撲圖
具體上步驟:(VM1 VM2用來做調度器,VM3VM4用來做real server提供服務。)
調度器:VM1 、VM2 首先需要安裝IPVS軟件來實現ip負載均衡。
#yum intall –y ipvsadm #安裝ipvsadm 服務
#ip addr add 172.25.45.100/24 dev eth0 :首先需要添加虛擬ip地址;
#ipvsadm -A -t 172.25.10.100:80 -s rr :添加虛擬服務和rr輪叫算法
#ipvsadm -a -t172.25.10.100:80 -r 172.25.10.55:80 -g :-r 添加realserver 地址,-g表示添加VS/DR模式,-t :添加調度器地址;
#ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.56:80 -g :添加另外一臺真機
(
ipvsadm -l :查看添加的工作模式
ipvsadm -C :清除之前的算法和模式
)
realserver: VM 3、VM4真機服務
#yum install -y httpd #真機提供HTTPD服務,
#/etc/init.d/httpd start
#ip addr add 172.25.10.100/32 dev eth0 #真機同樣需要添加虛擬ip地址,與調度器的虛擬Ip地址一致。
#yum install -y arptables_jf #安裝arp防火牆,用來屏蔽數據包,攔截ip衝突,因爲虛擬機與real server的地址一致啊,所以進入real-server時就需要把虛擬ip DROP掉,也就就是攔截掉real-server的虛擬ip,;
#arptables -A IN -d 172.25.10.100 -j DROP #拒絕客戶端訪問realserver的虛擬IP,只要輸入進來直接DROP掉。
#arptables -A OUT -s 172.25.10.100 -j mangle --mangle-ip-s172.25.10.55
#由於tcp三次握手原因,所以出去的時候仍要以vip地址出去纔會實現握手,而真正將數據傳輸給客戶端的就是realserver, mangle參數就是這個功能;
#/etc/init.d/arptables_jf save
VM3 :#echoserver55.example.com > /var/www/html/index.html
VM4:#echo server56.example.com > /var/www/html/index.html
兩臺真機服務器的配置一樣操作;提供httpd服務;
優點:爲什麼lvs vs/dr比路由要先進,因爲他是直接在第四層將數據轉發,而路由是經過網絡層,將數據怎樣進,再怎樣通過路由出去,吞吐率不高;VS/NAT模式爲:client àvs ànat àrs ànat àvs àclient
VS/DR模式調度器直接在數據鏈路層通過同一網段ip地址獲得realserver的MAC地址,直接將數據包扔給realserver,而real -server再將服務直接提供給客戶端,因此數據吞吐率較高,VS/DR模式爲:client à vs à rs à client
工作在DR模式時,要求處在同一虛擬局域網VLAN內;
驗證:在Firefox裏面輸入虛擬ip進行訪問,刷新網頁,可以不同的real-server提供apache服務。還可以通過真機輸入命令:arp -an查看虛擬Ip的MAC地址,再去找到該MAC地址對應的調度器。如果MAC地址是real-server的,這說明調度器沒有工作,需要查找原因了,我遇到的情況原因是因爲調度器忘了添加虛擬ip.
添加健康檢查功能模塊,此時如果哪臺real-server停止服務了,則該調度器實驗並不能判斷出來哪臺real-server不能工作,仍然回去調度那臺不能工作的real-server.因此需要添加健康檢查功能,使得後臺的real-server壞了,能夠及時發現,並且從調度器中移除該損壞的real-server主機。
LVS健康檢查:也就是說一臺real server 壞了,調度器只能顯示好的在工作,壞了就直接能發現。ipvsadm -l 顯示出正在執行的real-server
#cd /usr/share/doc/ldirectord-3.9.5/
#cp ldirectord.cf /etc/ha.d/
#vim ldirectord.cf
virtual=172.25.10.100:80 #虛擬ip
real=172.25.10.55:80 gate #提供服務的real-serverIp
real=172.25.10.56:80 gate
fallback=127.0.0.1:80 gate #如果兩臺real-server都壞了,則只能自己提供該服務。前提是的有該服務哦。
service=http
scheduler=rr #調用輪叫算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html" #查詢內容
#/etc/init.d/ldirectord start #ldirectored服務啓動
VM 1、VM2#yum install -y httpd
#echo www.westos.com > /var/www/html/index.html
/etc/init.d/httpd start #注意該服務只能手動啓動,
現在就可以進行健康檢查了;使兩個真機realserver依次停止httpd服務,然後再在服務調度器上進行查看:ipvsadm -l
接下來與開源heartbeat集羣進行整合,使得系統的穩定性更高,因爲現在使用的是一臺調度服務,我們使用heartbeat做一個雙機集羣的調度服務器,從而避免調度器的單機故障發生。
與開源heartbeat整合的目的是爲了決調度器的單點故障,即使調度器所在的一臺主機發生錯誤了,另外一臺就可以直接接管調度其的功能服務.
heartbeat的雙機集羣:
#/etc/init.d/ldirectord stop #首先使健康檢查功能停止,因爲heartbeat自動起
#/etc/init.d/httpd stop #httpd服務停止
#ip addr del 172.25.10.100/24 dev eth0 #去掉虛擬ip,因爲heartbeat能自動產生虛擬ip
#scp ldirectord.cf [email protected]:/etc/ha.d/ #將健康檢查功能傳送到雙機集羣中的另一臺虛擬機裏面去,
#vim /etc/ha.d/haresource #編輯配置文件
server51.example.com IPaddr::172.25.10.100/24/eth0 httpd ldirectord
# scp/etc/ha.d/haresource [email protected]:/etc/ha.d/
雙機集羣都啓動,保證調度器的高可用性,不會因爲一臺主機服務器宕掉而無法進行調度。
VM1 、VM2.
#/etc/init.d/heartbeat start
驗證:首先查看運行的虛擬ip,以及ipvsadm -l 查看運行的兩個real-server,最後依次關閉兩個realserver,停止httpd服務.刷新網頁查看內容變化.最後依次再關掉兩個調度器,在刷新網頁查看狀態。