負載調度器,已經集成到內核nginx
工做原理:VS根據請求報文的目標IP和目標協議及端口將其調度轉發至某RS,根據調度算法來挑選RS 算法
iptables/netfilter: 瀏覽器
iptables:用戶空間的管理工具 服務器
netfilter:內核空間上的框架 網絡
流入:PREROUTING --> INPUT 框架
流出:OUTPUT --> POSTROUTING 分佈式
轉發:PREROUTING --> FORWARD --> POSTROUTING 函數
DNAT:目標地址轉換; PREROUTING 工具
VS:Virtual Server,Director Server(DS) Dispatcher(調度器),Load Balancerspa
RS:Real Server(lvs), upstream server(nginx) backend server(haproxy)
CIP:Client IP
VIP: Virtual serve IP VS 的外網的IP
DIP: Director IP VS 的內網的IP
RIP: Real server IP
一個Virtual Server通常會有兩個IP地址,一個公網IP地址,一個私網IP地址.全部的用戶都是經過這個公網IP來訪問相關服務,Virtual Server經過公網IP接收到用戶請求後把數據轉發到內網IP再經過調度算法把數據調度到內網不一樣的主機上進行處理.內網主機處理完後把響應數據返回給Virtual Server.
訪問流程:CIP <--> VIP == DIP <--> RIP
集羣系統: 許多機器都在執行一個相同的任務
分佈式系統: 許多機器中每臺機器執行同一個大任務下的不一樣的子任務
ipvsadm:用戶空間的命令行工具,規則管理器 用於管理集羣服務及RealServer
ipvs: 工做於內核空間netfilter的INPUT鉤子上的框架
用戶是經過lvs服務器的公網IP來進行訪問的,當用戶請求到達路由表後發現請求的地址是本身就會把數據包轉向INPUT,若是數據經過了INPUT的話將直接到達本機進程空間,而lvs只是個調度器,不提供任何服務.因此lvs必須在數據到達INPUT以前對數據進行攔截處理.
本質是多目標IP的DNAT,經過將請求報文中的目標地址和目標端口修改成某挑出的RS的RIP和PORT實現轉發 (修改網絡層的數據包)
(1)RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP 這樣的話RIP響應的報文才能流向到LVS服務器
(2)請求報文和響應報文都必須經由Director轉發,Director易於成爲系統瓶頸 Director就是LVS服務器
(3)支持端口映射,可修改請求報文的目標PORT
(4)VS必須是Linux系統 RS能夠是任意OS系統
詳細說明:
1. 互聯網用戶在瀏覽器中輸入域名地址如http://www.yxh.com
2. 瀏覽器經過向DNS服務器發起請求把www.yxh.com主機名解析成LVS服務器的公網IP地址
3. 瀏覽器向LVS服務器的公網IP發起http請求
4. LVS服務器接收數據到內核後經過查看路由表發現數據是請求本身IP的因而轉向INPUT鏈條,在數據到達INPUT鉤子函數前LVS服務器中的IPVS會攔截數據
IPVS會把數據包中的目標IP(即LVS服務器的公網IP)修改爲某臺內網服務器的IP 具體修改成哪一個內網IP由特定的調度算法決定
IPVS把數據包的目標IP修改後再也不通過INPUT鏈條而是通過系統路由錶轉到POSTROUTING鏈上,最後轉發到內網IP的主機上
5. 內網IP的主機處理後封裝響應報文 源地址是內網主機IP,目標地址是互聯網用戶IP
6. 由於內網IP的主機的網關都是設置成LVS服務器的內網IP 因此響應報文都會流向LVS服務器
7. LVS服務器在接收到內網IP主機發送的響應報文後會在數據到POSTROUTING鏈以前把響應報文的源IP(內網主機IP)改爲本身的公網IP,而後經過互聯網路由轉發
8. 數據最終到達的互聯網用戶的主機並顯示
以一個路由器爲示例,講解詳細步驟
請求數據包流向
源地址 目標地址
ipclient mac_client vip mac1(網關)
ipclient mac2(網關) vip maclvs (客戶端數據到達LVS服務器)
理論上LVS服務器收到數據包以後會經過路由錶轉到本身內核的INPUT鏈條而後把數據複製到本地的進程空間可是LVS服務的IPVS會在數據到達INPUT以前把數據報文的目標MAC地址進行修改,不讓這些數據進入INPUT而是把它們轉發到其它RS上
LVS服務器處理(修改源MAC和目標MAC)
ipclient maclvs vip macRS1(LVS服務器把數據調度給RS1)
響應數據包流向
源地址 目標地址
vip macRS1 ipclient mac2
vip mac1 ipclient mac_client(RS1直接把處理結果返回給客戶端)
總結:
只有請求報文通過了LVS服務器,響應報文直接由RS服務器直接轉給路由器發送給客戶端 下降了LVS的負載
只要是請求報文都必須通過LVS服務器,而後經過LVS服務器轉發給RS服務器.只要是響應報文都無需通過LVS服務器
RealServer和LVS服務器必須在同一個網段,由於LVS須要發送arp廣播經過IP地址找到RealServer的MAC地址
不支持端口映射,由於這種模式沒有修改IP報文 底層修改的是MAC地址
LVS服務器必須使用LINUX操做系統(須要內核支持),RealServer可使用大多數操做系統
在同一個網段如何給多臺主機配置同一個IP地址
緣由:
當給某個主機分配好一個IP地址啓動網絡服務的時候,這臺主機會經過arp協議向網絡中發送arp廣播詢問當前本身的IP是否被其它主機所佔用 若是有其它主機已經使用了此IP,那麼就會迴應此arp廣播包.這樣就形成的IP地址的衝突
解決辦法:
1.當主機設置好IP後不進行arp廣播詢問地址是否被佔用 /proc/sys/net/ipv4/conf/all/arp_announce
2.對網絡中全部的arp詢問IP是否佔用廣播包不進行任何迴應 /proc/sys/net/ipv4/conf/all/arp_ignore