1. 程式人生 > >LVS基礎知識

LVS基礎知識

命令行 集成 必須 規則 haproxy pos tro 解決 廣播

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基礎知識