LVS 是 Linux Virtual Server ,Linux 虛擬服務器;是一個虛擬的服務器集羣【多臺機器 LB IP】。LVS 集羣分爲三層結構:前端
a. 負載調度器(load balancer):它是整個LVS 集羣對外的前端機器,負責將client請求發送到一組服務器[多臺LB IP]上 執行,而client端認爲是返回來一個同一個IP【一般把這個IP 稱爲虛擬IP/VIP】web
b. 服務器池(server pool):一組真正執行client 請求的服務器,通常是咱們的web服務器;除了web,還有FTP,MAIL,DNS算法
c. 共享存儲(shared stored):它爲 server pool 提供了一個共享的存儲區,很容易讓服務器池擁有相同的內容,提供相 同的服務服務器
共有4中模式:LVS-DR,LVS-NAT,LVS-FULLNAT,LVS-TUN負載均衡
client發送一個請求到VIP,LVS服務器根據VIP選擇對應的realServer的pool,根據算法,在pool中選擇一臺realServer,將包廣播到vip的局域網,同時LVS在hash表中記錄該次鏈接,realServer收到包以後,處理完請求,把應答包直接傳給client;當client繼續發包過來時,LVS根據更才記錄的hash表的信息,將屬於這次鏈接的請求直接發到剛纔選擇的realServer上;當鏈接停止或者超時,hash表中的記錄將被刪除。運維
假設client,director,vip,realServer的ip及mac地址以下性能
client | director | vip | realServer | |
IP | 192.168.138.20 | 192.168.143.231 | 192.168.143.122 | 192.168.143.82 |
MAC | X:X:X:X:X:5d | X:X:X:X:X:96 | X:X:X:X:X:96 | X:X:X:X:X:82 |
第一步:client向vip發起請求,director接收到請求,ip包頭的信息以下spa
source mac | dst mac | ... | source ip | dst ip | ... |
X:X:X:X:X:5d | X:X:X:X:X:96 | ... | 192.168.138.20 | 192.168.143.122 | ... |
第二步:LVS根據負載均衡算法,選擇一臺realServer,修改dst mac地址爲realServer的mac地址,將數據包轉發到局域網,此時ip包頭信息以下orm
source mac | dst mac | ... | source ip | dst ip | ... |
X:X:X:X:X:96 | X:X:X:X:X:82 | ... | 192.168.138.20 | 192.168.143.122 | ... |
第三步:realServer接收到包,拆開後發現目標IP(VIP)與本地匹配,因而處理這個報文。隨後從新封裝報文,發送到局域網,IP包頭及數據幀頭信息以下server
source mac | dst mac | ... | source ip | dst ip | ... |
X:X:X:X:X:82 | X:X:X:X:X:5d | ... | 192.168.143.122 | 192.168.138.20 | ... |
第四步:若是,經過路由將包路由到client
a. LVS必須與realServer在同一個局域網,由於LVS收到數據包後,只修改了dst mac地址,而後廣播出去,若是LVS與realServer不在統一網段,realServer永遠收不到數據包
b. LVS-DR不須要路由轉發,同一局域網內,不通過路由
c. realServer需呀配置 vip
假設client,vip,realServer的ip地址以下
client | vip | realServer | |
IP | 192.168.138.20 | 192.168.143.122 | 192.168.143.82 |
第一步:client 發送包到LVS服務器的VIP上
... | source ip | dst ip | ... |
... | 192.168.138.20 | 192.168.143.122 | ... |
第二步:VIP選擇一個realServer,並記錄鏈接信息到hash表中,而後修改client的request的目的IP地址爲realServer的地址,將請求發給realServer
... | source ip | dst ip | ... |
... | 192.168.138.20 | 192.168.143.82 | ... |
第三步:realServer收到請求包後,發現目的IP是本身的IP,因而處理請求,而後發送reply給LVS,回覆包以下
... | source ip | dst ip | ... |
... | 192.168.143.82 | 192.168.138.20 | ... |
第四步:LVS收到reply包後,修改reply包的的源地址爲VIP,發送給client;之後從client來的屬於本次鏈接的包,查hash表,而後發給對應的realServer
... | source ip | dst ip | ... |
... | 192.168.143.122 | 192.168.138.20 | ... |
a. NAT修改的是dst ip,不須要vip與realserver在同一個網段內
b. NAT模式包的進出都須要通過LVS ;所以LVS 的可能會成爲一個系統瓶頸問題
LVS-FULLNAT在client請求VIP 時,不只替換了數據包的dst ip,還替換了數據包的 source ip;但VIP 返回給client時也替換了source ip
假設client,vip,realServer的ip地址以下
client vip realServer
IP 192.168.138.20 192.168.143.122 192.168.143.82
第一步:client 發送包到LVS服務器的VIP上
... source ip dst ip ...
... 192.168.138.20192.168.143.122 ...
第二步:VIP 收到數據包後,會根據LVS設置的LB算法選擇一個合適的realserver,而後把數據包的dst ip修改成realserver的ip;把sorce ip 改爲 LVS的vip
... source ip dst ip ...
... 192.168.143.122 192.168.143.82 ...
第三步: realserver 收到這個數據包後判斷dst ip 是本身,處理完後把這個包發送給LVS VIP
... source ip dst ip ...
... 192.168.143.82 192.168.143.122 ...
第四步: LVS 收到這個數據包後把sorce ip改爲VIP的IP,dst ip改爲 client ip而後發送給client
... source ip dst ip ...
... 192.168.143.122 192.168.138.20 ...
3.2 注意事項
a. FULLNAT修改的是dst ip,不須要vip與realserver在同一個網段內
b. FULLNAT能保證回包必定能回到LVS
c. 由於FULLNAT要更新sorce ip 因此性能NAT模式低
假設client,vip,realServer的ip地址以下
client vip realServer
IP 192.168.138.20 192.168.143.122 192.168.143.82
第一步:client 發送包到LVS服務器的VIP上
... source ip dst ip ...
... 192.168.138.20 192.168.143.122 ...
第二步:VIP 收到數據包後,會根據LVS設置的LB算法選擇一個合適的realserver;並把client發送的數據包包裝到一個新的IP包裏面;新的IP包的dst是realserver的IP
... source ip dst ip ...
... 192.168.143.122 192.168.143.82 ...
第三步: realserver 收到這個數據包後判斷dst ip 是本身,而後解析出來的數據包的dst是VIP;會檢測網卡上是否幫了VIP的ip地址;若是幫了就會處理這個包,若是沒有直接丟掉。 通常在realserver上面 lo:0 綁定了VIP的ip地址,就能夠處理。處理完成後,直回給client
... source ip dst ip ...
... 192.168.143.82 192.168.138.20 ...
a. TUN模式必須在全部的realserver機器上面綁定VIP的IP地址
b. TUN模式的包通訊經過TUN模式,無論是內網和外網都能通訊,因此不須要lvsvip跟realserver 在同一個網段內
c. TUN模式 realserver會把數據包直接發給client 不會給lvs了
d. TUN模式走的隧道模式,因此運維起來比較難,因此通常不用