爲何須要使用負載均衡呢?這是一個必較重要的問題 實際生產環境中某單臺服務器已不能負載平常用訪問壓力時,就須要使用負載均衡,把用戶的請求數據分擔到(儘量平均分配)後端全部功能同等的集羣的節點上,一樣也是爲了解決單臺服務器故障問題,從而提升用戶的訪問體驗。linux
**一、LVS的介紹 ** LVS(linux virtual server)LINUX虛擬服務器,是一個虛擬的服務器集羣系統,能夠在linux和unix系統中運行,1985年開發研究的項目 http://www.linuxvirtualserver.org/zh/ 官方網站算法
IPVS(lvs)發展史後端
在linux2.2內核時,IPVS就已經之內核補丁的形式出現
從2.4。24版本之後IPVS已經成爲linux內核官方標準內核的一部分
複製代碼
***LVS工做原理 *** LVS負載均衡調度技術是在linux內核中實現的,咱們使用配置LVS時,不是直接配置內核中的IPVS,而是經過IPVS的管理工具IPVSADM來管理配置,LVS集羣負載均衡器接受全部入站客戶端的請求,並根據算法來決定由哪一個集羣的節點來處理請求。bash
LVS相關術語介紹服務器
虛擬IP地址(VIP)
用於向客戶端提供服務的IP地址(配置於負載均衡器上)
真實的IP地址(RIP)
集羣中節點服務器的IP地址
負載均衡器IP地址(DIP)
負載均衡器的IP地址,物理網卡上的IP,用與同外網鏈接的地址
客戶端主機IP地址(CIP)
終端請求用戶的主機IP地址
複製代碼
**二、LVS負載均衡工做模式介紹 ** ***NAT網絡地址轉換模式(VS/NAT) *** 經過網絡地址轉換,調度器LB重寫請求報文的目標地址,根據算法將請求分配給後端的真實主機服務器,真實服務器響應處理報文後返回給調度器LB,通過LB的報文源地址被重寫,再返回給請求的客戶端用戶網絡
TUN隧道模式(VS/TUN) LB將請求的報文經過IP隧道轉發給真實服務器,這樣LB只要須要處理請求入站報文,所以可提升訪問效率負載均衡
注:這時確定有朋友發現這裏會有一個問題,每臺服務器上都綁定了一個相同VIP地址,用戶訪問時的目的地址也是VIP,當數據包達到路由器後通過轉發至內網,內網可能會產生多臺迴應數據包的機器,而後用戶收到的最快回應的內網機器發來的數據,這樣一來數據包也就沒有通過LB,就不是負載均衡了,因此須要作抑制ARP的功能,使全部真實服務器再也不響應目的地址是VIP的請求,只要LB來響應請求,從而達到負載均衡。在實際生產環境中不多使用這種模式工具
***DR模式(Direct Routing)直接路由模式 *** 此模式是經過改寫請求報文的目標MAC地址,將請求發給真實服務器,而真實服務器將響應後的數據直接回應給請求的客戶端,此模式要求LB與真實服務器須要有一塊物理網卡都是鏈接在同一網段上 網站
過程詳解: 1:客戶端發出請求數據包(源CIP 10.10.1.1:80 目的 VIP1.1.1.1:80) 2:LB接收到數據包後,不轉換地址及端口,也不從新封裝,只是將數據幀中的目的地址的MAC地址改寫算法調度的真實機的MAC地址,將數據包轉發出去 3:真實機收到數據後,可是發現數據包中目的地址不是本身(因此事先也得在LO上綁定一個VIP地址,同時配置抑制ARP),這樣真實機作出響應直接回復客戶端 4:客戶端收到回覆的數據包(源VIP 1.1.1.1:80 目的CIP 10.10.1.1:80),完成整個訪問過程spa
注:LB只能改寫目的MAC地址,所以它不能改變請求報文的目的端口端口,LVS只支持unix和linux,但集羣節點服務器能夠是win系統,此種模式配置至關麻煩
***FULLNAT模式(淘寶開源) ***
**三、LVS調度算法介紹 ** LVS的調度算法決定了如何在集羣節點之間分配負載壓力(訪問請求)
調度算法: rr輪循調度:將請求依次分配給集羣的節點,這種算法適用於各個節點處理能力基本相同的狀況下 wrr加權輪循調度:根據節點的權重來分配,權重較高的優先分配 wlc加權最小鏈接數調度:按權重和鏈接數的數量來分配 lc最小鏈接數調度:按鏈接數的數量來分配
**實際生產環境LVS調度算法選型 ** 通常網絡服務,如HTTP、MAIL、MYSQL經常使用的調度算法有:rr、wlc、wrr