LVS基礎知識
LVS介紹(Linux Virtual Server)
負載調度器,已經集成到內核
工作原理:VS根據請求報文的目標IP和目標協議及端口將其調度轉發至某RS,根據調度算法來挑選RS
iptables/netfilter:
iptables:用戶空間的管理工具
netfilter:內核空間上的框架
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
轉發:PREROUTING --> FORWARD --> POSTROUTING
DNAT:目標地址轉換; PREROUTING
lvs集群類型中的術語
VS:Virtual Server,Director Server(DS) Dispatcher(調度器),Load Balancer
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
集群和分布式概念的區別
集群系統: 許多機器都在執行一個相同的任務
分布式系統: 許多機器中每臺機器執行同一個大任務下的不同的子任務
lvs: ipvsadm/ipvs
ipvsadm:用戶空間的命令行工具,規則管理器 用於管理集群服務及RealServer
ipvs: 工作於內核空間netfilter的INPUT鉤子上的框架
用戶是通過lvs服務器的公網IP來進行訪問的,當用戶請求到達路由表後發現請求的地址是自己就會把數據包轉向INPUT,如果數據通過了INPUT的話將直接到達本機進程空間,而lvs只是個調度器,不提供任何服務.所以lvs必須在數據到達INPUT之前對數據進行攔截處理.
lvs集群類型
lvs-nat模式
本質是多目標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. 數據最終到達的互聯網用戶的主機並顯示
LVS-DR模式 (修改數據鏈路層報文頭部)
以一個路由器為示例,講解詳細步驟
請求數據包流向
源地址 目標地址
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地址
原因:
當給某個主機分配好一個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
LVS基礎知識