實驗說明:負載均衡,從字面意義來理解是多個後臺服務器來支撐一個訪問的服務正常運行,也就是說單個重負載的節點分擔到多臺設備上並行處理,減小用戶等待的相應時間,也就是咱們說的集羣技術,但負載均衡不等於羣集,這種技術主要針對企業中WEB服務器和FTP服務器等關鍵應用html
實驗原理:linux
LVS的全稱Linux vitual system,
LVS工做在一臺server上提供Directory(負載均衡器)的功能,自己並不提供服務,只是把特定的請求轉發給對應的realserver(真正提供服務的主機),從而實現集羣環境中的負載均衡。
LVS的核心組件ipvs工做在kernel中,是真正的用於實現根據定義的集羣轉發規則把客戶端的請求轉發到特定的realserver。而另外一個組件ipvsadm是工做在用戶空間的一個讓用戶定義ipvs規則的工具。故咱們只要在server上裝了ipvsadm軟件包就能夠定義ipvs規則,而在linux kernel的2.6版本以後kernel是直接支持ipvs的。算法
lvs 三種模型 (NAT DR TUN)vim
NAT 的架構的特色 服務器
工做原理:基於NAT機制實現。當用戶請求到達director以後,director將請求報文的目標地址(即VIP)改爲選定的realserver地址,同時將報文的目標端口也改爲選定的realserver的相應端口,最後將報文請求發送到指定的realserver。在服務器端獲得數據後,realserver將數據返給director,而director將報文的源地址和源端口改爲VIP和相應端口,而後把數據發送給用戶,完成整個負載調度過程。
特色:
1,全部的realserver和director要在同一個網段內
2,RIP是私有地址,僅用於集羣節點之間進行通訊
3,director同時處理請求和應答數據包
4,realserver的網關要指向DIP
5,能夠實現端口映射
6,readlserver能夠是任意操做系統
7,director極可能成爲系統性能瓶頸網絡
TUN架構的優缺點 架構
工做原理:這種方法經過ip隧道技術實現虛擬服務器。當用戶請求到達director以後,director將請求報文的目標地址(即VIP)改爲選定的realserver地址.而後,調度器採用ip隧道技術將用戶請求發送到某個realserver,而這個realserver將直接相應用戶的請求,再也不通過director。此外,對realserver的地域位置沒有要求。和director在不在同一網段均可以。
特色:
1,realserver和director能夠不在一個物理網絡中,能夠跨越互聯網
2,RIP必定不能是私有地址(由於要用到隧道傳輸)
3,director僅處理入站請求
4,realserver的網關不能指向DIP
5,不支持端口映射
6,支持ip隧道功能的操做系統才能做爲realserver負載均衡
DR架構的優缺點(生產環境用的最多) ide
工做原理:基於直接路由來實現。當用戶請求到達director以後,director將請求報文的目標地址(即VIP)改爲選定的realserver地址,還要改寫請求報文的mac地址,將請求發送到指定mac的realserver,而realserver將響應直接返回給客戶端,不通過director。這個方式是三種調度中性能最好的,也是咱們生產環境中使用最多的。
特色:
1,集羣節點和director必須在一個物理網絡內
2,RIP可使用公網地址或私有地址
3,director僅處理入站請求
4,集羣節點網關不指向director,故出站不通過director
5,不支持端口映射
6,大多數操做系統能夠做爲realserver,要支持隔離arp廣播
7,director服務器的壓力比較小工具
實驗環境:RHEL5.5
實驗所需安裝包:http安裝包 位於光盤server目錄內 ipvsadm-1.24-10.i386.rpm 位於光盤Cluster目錄內
實驗前的準備:建立5臺機器 分別爲ROUTER LVS RS1 RS2 client 所有關閉防火牆!!
實驗拓撲圖以下
如圖 要實現客戶機訪問
客戶機訪問http服務時是經過LVS服務器由兩臺服務器提供服務,客戶機訪問時只須要輸入一個虛擬出來的IP地址就能夠訪問到了
在client中IP配置以下:
客戶機的做用只起到訪問服務而且驗證做用 因此不作過多配置
ROUTER IP配置以下:
eth0網卡IP配置
eth1網卡IP配置
其餘配置:
echo 1 > /proc/sys/net/ipv4/ip_forward 開啓網卡轉發功能
LVS的IP配置
LVS的其餘設置:
rpm -ivh /mnt/Cluster/ipvsadm-1.24-10.i386.rpm 安裝包後就能夠試用ipvsadm命令了
ifconfig eth0:1 192.168.19.250 開啓一個虛擬網卡地址
ipvsadm -A -t 192.168.19.250:80 -s rr //詳看 man ipvsadm
ipvsadm -a -t 192.168.19.250:80 -r 192.168.19.3 –g
ipvsadm -a -t 192.168.19.250:80 -r 192.168.19.4 –g
至此LVS配置完成
RS1的IP配置
RS1的其餘配置
安裝HTTP服務
rpm -ivh /mnt/Server/httpd-2.2.3-43.el5.i386.rpm
vim /var/www/html/index.html
i am rs1
保存退出
ifconfig lo:1 192.168.19.250 netmask 255.255.255.255 broadcast 192.168.19.255 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
經過設置arp_ignore使RS服務器忽略收到的ARP廣播,使網絡中雖然LVS和RS所有配置了VIP,可是客戶端在使用ARP查找目標服務器時,只有LVS能迴應ARP廣播,RS沉默。
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
經過設置 arp_announce的值來決定RS處理完LVS轉給它來自客戶端的請求後數據包的封裝。2是忽略源IP,只選擇一個合理的源IP來封裝,因此會忽略192.168.19.3這個本應該封裝的eth0地址,而是將VIP封裝爲源地址(將受到的數據包的源和目標對換)。保證了數據包的合法性和有效性
RS2的IP配置
其餘配置:
安裝HTTP服務
rpm -ivh /mnt/Server/httpd-2.2.3-43.el5.i386.rpm
vim /var/www/html/index.html
i am rs2
保存退出
ifconfig lo:1 192.168.19.250 netmask 255.255.255.255 broadcast 192.168.19.255 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
至此,全部配置已經完成,用client測試效果
讓咱們再看看LVS服務器上數據流向
關於LVS的算法有
1 rr算法,如上述實驗所作,缺點是數據包的流向是平均分配的,不能作一些須要輸入用戶名和密碼的網站,固然 hao123仍是能夠用這種算法實現的,當羣中有的機器性能好,有的性能壞,壞的扛不住
2 wrr基於權重的rr算法,缺點是新加的RS不會分擔舊RS的負載。
如RS1 負載100
RS2 負載100
RS3(new) 1 RS3永遠比舊RS少負擔100
3 lc 最少連接新加入的RS會主動承擔負載,lvs會將新的請求所有分給新RS,直到新RS的負載和舊的大體相等的時候在分發
4 wlc基於權重的lc
5 lblc 儘量讓同一個訪問分到同一個RS上,CDN經常使用,能夠提升命中
6 sh 基於源IP的hash算法,保證同一個源IP的請求分到同一臺RS上。主要用在會話鏈接中,如輸入帳號密碼,若是用rr,兩次請求就會切換到不一樣的RS上,就會須要從新輸入帳號密碼,除非用cookice。
dh基於目標IP的hash算法