用通俗的話來講負載均衡,就是經過不一樣的調度機制將用戶的請求分派到後端不一樣的服務器。緩解服務器的請求壓力,實現負載均衡的方案有多種,下面簡單說說了解的幾種方式:前端
LVS由兩部分組成,包括ipvs和ipvsadm:linux
ipvs:ipvs是工做在內核空間netfilter的input鏈上的框架,經過用戶空間工具進行管理,是真正生效實現調度的代碼。nginx
ipvsadm:ipvsadm負責爲ipvs內核框架編寫規則,管理配置內核中ipvs程序的用戶空間的管理工具算法
LVS是工做在linux內核空間的tcp/ip棧的應用程序,其程序名稱爲ipvs,ipvs會監聽input鏈上的請求,一旦請求的是集羣服務的話,ipvs鉤子函數會將請求拉出並進行報文修改,強制轉發到postrouting處理,關係圖以下圖所示:後端
在客戶端看來,負載層的LVS 就是一個真實的應用服務器,客戶端向LVS發送請求信息,LVS接收數據報文至內核空間,工做在input鏈上的ipvs模塊會判斷用戶請求是否是定義的後端服務器,若是用戶請求的就是定義的後端集羣服務,數據報文傳送到input鏈上時,input鏈會強行將數據報文轉發給postrouting,postrouting將數據報文傳送給後端真實服務器緩存
LVS有多種工做模式,類型以下:服務器
NAT:修改請求報文的目標IP,多目標IP的DNAT網絡
DR:操縱封裝新的MAC地址session
TUN:在原請求IP報文以外新加一個IP首部架構
FullNAT:修改請求報文的源和目標IP
生產環境中大多使用DR模型工做
在客戶端看來,負載層的Director server 就是一個真實的應用服務器,客戶端向LVS發送請求信息,Director server接收數據報文至內核空間,工做在input鏈上的ipvs模塊會判斷用戶請求是否是定義的後端服務器,若是用戶請求的就是定義的後端集羣服務,數據報文傳送到input鏈上時,input鏈會強行將數據報文轉發給postrouting,postrouting將數據報文傳送給後端真實服務器。
LVS-NAT模型運行原理
NAT模式工做過程描述
1, Client向Director server發送帶有 [CIP-VIP] 的請求數據報文,PREROUTING 連接收數據報文發現目標ip是本機ip,隨後將報文轉發值INPUT鏈
2,工做在INPUT鏈上的IPVS比對數據包請求的服務是否爲集羣服務,若是是,修改數據包的目標IP地址爲後端服務器IP,而後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP
3, POSTROUTING根據選路發給後端realy server,realy server收到數據包發現目標ip是本身,而後向Director響應請求,此時響應報文中的源IP地址信息爲 RIP,目標地址IP爲CIP
4,Director server在響應Client以前再將報文中ip信息源IP地址改成 VIP,目標IP仍爲CIP
NAT模式特色
本質是多目標IP的DNAT,經過將請求報文中的目標地址和目標端口修改成挑出的某個RS的RIP和PORT實現轉發
在DR工做模型中,Director收到請求經過修改數據數據報文中目的地址的MAC地址實現數據報文的轉發。在該模式下,Director和後端realy server都有一個相同VIP,且在同一物理網絡中,所以Client發送的請求報文到達INPUT鏈時,只要將報文中的[CIP-VIP]的MAC信息改爲【DIP-MAC | RIP-MAC】,後端realy server接收報文並構建響應,此時,響應報文再也不通過Director,realy server直接響應客戶端。
LVS-DR模型運行原理
DR模式工做流程
1,當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
2, PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
3, IPVS比對數據包請求的服務是否爲集羣服務,如果,將請求報文中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,而後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址
4, 因爲DS和RS在同一個網絡中,因此是經過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
5, RS發現請求報文的MAC地址是本身的MAC地址,就接收此報文。處理完成以後,將響應報文經過lo接口傳送給eth0網卡而後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP
DR模式的特色
在TUN工做模式下,Client向Director server 發送請求報文,報文到達Director 內核空間不修改請求報文的ip首部,而是經過在原有ip首部[CIP-VIP]以外,再封裝一個ip首部[DIP-RIP],RS收到報文後發現是本身的IP地址,就會將報文接受下來,拆除最外層的IP後,會發現裏面還有一層IP首部,並且目標地址是本身的lo接口VIP,那麼此時RS開始處理此請求,處理完成滯後,經過lo接口送給eth0網卡,而後向外傳遞。此時的源IP地址爲VIP,目標IP爲CIP
LVS-TUN模型運行原理
TUN模式工做流程
TUN模型特色
調度器將請求調度至後端服務器(這種方式最簡單,不考慮後端主機性能等因素,公平調度)
在輪詢的基礎上,調度器能夠給後端主機指定權重,考慮到後端主機性能不均衡的問題,可讓性能強的主機響應更多的請求
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務 器,將請求發送到該服務器。
它與LBLC算法的不一樣之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小鏈接"原則從服務器組中選出一臺服務器,
若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。
目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,如:寬帶運營商
實現session sticky,源IP地址hash;未來自於同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定