淺淡負載均衡集群之LVS
集群基礎
1.服務器硬件性能不足,策略:
1.scale on 向上擴展 加大cpu 內存等硬件-----------這種方式不可能無限擴展,而且到一定程度,性能可能會下降
2.scale out 向外擴展 ------------------多臺服務器對外提供服務-------------------》-目前使用的方法
cluster
1.LB 負載均衡 提高並發處理能力
2.HA 高可用集群 提升服務可用性
在線時間/(在線時間+故障處理時間)
99% 99.9% 99.99% 99.999%
3.HP(HPC)高性能集群 high performance
並行處理集群
分布式文件系統
平常工作場景,用的最多的還是負載均衡及高可用集群,一般兩者結合使用。
負載均衡(Load Balance)集群提供了一種廉價、有效、透明的方法,來擴展網絡設備和服務器的負載、帶寬,增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。
1.單臺計算機無法承受大規模的並發訪問或數據流量了,此時需要搭建負載均衡集群把流量分攤到多臺節點設備上分別處理,
減少用戶等待時間提升用戶體驗
2.7*24小時的服務保證,任意一個或多個有限後端節點設備宕機,不能影響整個業務的運行。
一般負載均衡使用較多的就是LVS(四層代理,工作在OSI7層模型中的網絡層和傳輸層,可以對IP地址及端口作分流策略)及nginx(7層代理,工作OSI7層模型中的應用層,可以對請求內容作分流策略)。
LVS(linux virtual server)
-
LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。
1.ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼。
- ipvsadm(命令行集群管理工具,需要單獨安裝):另外一段是工作在用戶空間,叫ipvsadm,負責為ipvs內核框架編寫規則,定義誰是集群服務,而誰是後端真實的服務器(Real Server)
現在我們使用的linux發行版,內核基本都是2.6的,內核中都已集成ipvs模塊,ipvs在內核空間處理應用程序層發過來的請求。
- ipvsadm(命令行集群管理工具,需要單獨安裝):另外一段是工作在用戶空間,叫ipvsadm,負責為ipvs內核框架編寫規則,定義誰是集群服務,而誰是後端真實的服務器(Real Server)
-
LVS工作原理
-
當用戶向負載均衡調度器(Director Server)發起請求,調度器將請求發往至內核空間
-
PREROUTING鏈首先會接收到用戶請求,判斷目標IP確定是本機IP,將數據包發往INPUT鏈
- IPVS是工作在INPUT鏈上的,當用戶請求到達INPUT時,IPVS會將用戶請求和自己已定義好的集群服務進行比對,如果用戶請求的就是定義的集群服務,那麽此時IPVS會強行修改數據包裏的目標IP地址及端口,並將新的數據包發往POSTROUTING鏈
-
- POSTROUTING鏈接收數據包後發現目標IP地址剛好是自己的後端服務器,那麽此時通過選路,將數據包最終發送給後端的服務器
-
-
LVS相關術語
- DS:Director Server。指的是前端負載均衡器節點。
- RS:Real Server。後端真實的工作服務器。
- VIP:向外部直接面向用戶請求,作為用戶請求的目標的IP地址。
- DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
- RIP:Real Server IP,後端服務器的IP地址。
- CIP:Client IP,訪問客戶端的IP地址。
- LVS類型
NAT:地址轉換-------------------進行IP地址修改
DR:直接路由---------------------------MAC地址修改為後端的RS的mac地址
TUN:隧道------------------------------------把原有報文重新封裝一層IP首部(內部IP首部(源地址為CIP,目標IIP為VIP),外層IP首部(源地址為DIP,目標IP為RIP)
client ip----->VIP---DIP--------->real server
5 . LVS/NAT原理和特點
(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c). IPVS比對數據包請求的服務是否為集群服務,若是,修改數據包的目標IP地址為後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP
(d). POSTROUTING鏈通過選路,將數據包發送給Real Server
(e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP
(f). Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP
NAT特點
NAT:集群節點跟director必須在同一個IP網絡中
RIP通常是私有地址,僅用於各集群間的通信
director位於client和real server之間,並負責處理進出的所有通信
real server必須將網關指向DIP
支持端口映射
real server可以使用任意OS
較大規模中,director容易成為系統瓶頸(因為處理後的響應都要經過director)
6 . LVS/DR原理和特點
(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否為集群服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址
(d) 由於DS和RS在同一個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麽此時數據包將會發至Real Server。
(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址為VIP,目標IP為CIP
(f) 響應報文最終送達至客戶端
DR特點
DR------》直接路由 通過修改數據包目的mac地址,註意RS的 arp抑制問題
集群節點跟director必須在同一個物理網絡中
real server可以使用公網地址,實現便捷的遠程管理
director僅負責處理入站請求,響應報文直接由real server發給客戶端,不經過director。
real server不能將網關指向DIP
不支持端口映射
可以處理更多的用戶請求
7 . LVS/Tun原理和特點
(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP 。
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否為集群服務,若是,在請求報文的首部再次封裝一層IP報文,封裝源IP為為DIP,目標IP為RIP。然後發至POSTROUTING鏈。 此時源IP為DIP,目標IP為RIP
(d) POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因為在外層封裝多了一層IP首部,所以可以理解為此時通過隧道傳輸)。 此時源IP為DIP,目標IP為RIP
(e) RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面還有一層IP首部,而且目標是自己的lo接口VIP,那麽此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞。 此時的源IP地址為VIP,目標IP為CIP
(f) 響應報文最終送達至客戶端
TUN特點
集群節點可以跨越internet
real server IP必須是公網地址
director僅處理入站請求,響應報文由real server直接發往客戶端
不支持端口映射
企業中常用的還是DR直接路由
-
調度方法
可以man ipvsadm查看相關算法
1.輪叫調度 rr
這種算法是最簡單的,就是按依次循環的方式將請求調度到不同的服務器上,
該算法最大的特點就是簡單。輪詢算法假設所有的服務器處理請求的能力都是一樣的,
調度器會將所有的請求平均分配給每個真實服務器,不管後端 RS 配置和處理能力,
非常均衡地分發下去。
- 加權輪叫 wrr
這種算法比 rr 的算法多了一個權重的概念,可以給 RS 設置權重,權重越高,
那麽分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr算法的一種優化和補充,
LVS 會考慮每臺服務器的性能,並給每臺服務器添加要給權值,如果服務器A的權值為1,
服務器B的權值為2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,
處理的請求越多。
- 最少鏈接 lc
這個算法會根據後端 RS 的連接數來決定把請求分發給誰,
比如 RS1 連接數比 RS2 連接數少,那麽請求就優先發給 RS1
- 加權最少鏈接 wlc
這個算法比 lc 多了一個權重的概念。
- 基於局部性的最少連接調度算法 lblc
這個算法是請求數據包的目標 IP 地址的一種調度算法,
該算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的服務器,
如果這臺服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,
否則會繼續選擇其它可行的服務器
- 復雜的基於局部性最少的連接算法 lblcr
記錄的不是要給目標 IP 與一臺服務器之間的連接記錄,
它會維護一個目標 IP 到一組服務器之間的映射關系,防止單點服務器負載過高。
- 目標地址散列調度算法 dh
該算法是根據目標 IP 地址通過散列函數將目標 IP 與服務器建立映射關系,
出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器。
-
源地址散列調度算法 sh
與目標地址散列調度算法類似,但它是根據源地址散列算法進行靜態分配固定的服務器資源。 - 最少隊列調度 nq
無需隊列,如果有臺RS的連接數為0就直接分配過去
我司采用的即是最後一種調度算法
淺淡負載均衡集群之LVS