1. 程式人生 > >淺淡負載均衡集群之LVS

淺淡負載均衡集群之LVS

分布式文件系統 端口 發的 更多 load 選擇 不能 通信 問題

集群基礎

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,我公司也用的是lvs負載均衡。
LVS(linux virtual server)

  1. LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。

    1.ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼。

    1. ipvsadm(命令行集群管理工具,需要單獨安裝):另外一段是工作在用戶空間,叫ipvsadm,負責為ipvs內核框架編寫規則,定義誰是集群服務,而誰是後端真實的服務器(Real Server)
      現在我們使用的linux發行版,內核基本都是2.6的,內核中都已集成ipvs模塊,ipvs在內核空間處理應用程序層發過來的請求。
      簡單來講lvs就是一個調度器,通過一定的算法,將用戶發來的請求分發給後端的服務器(真正處理請求的server)進行處理。
  2. LVS工作原理

    1. 當用戶向負載均衡調度器(Director Server)發起請求,調度器將請求發往至內核空間

      1. PREROUTING鏈首先會接收到用戶請求,判斷目標IP確定是本機IP,將數據包發往INPUT鏈

      2. IPVS是工作在INPUT鏈上的,當用戶請求到達INPUT時,IPVS會將用戶請求和自己已定義好的集群服務進行比對,如果用戶請求的就是定義的集群服務,那麽此時IPVS會強行修改數據包裏的目標IP地址及端口,並將新的數據包發往POSTROUTING鏈
    2. POSTROUTING鏈接收數據包後發現目標IP地址剛好是自己的後端服務器,那麽此時通過選路,將數據包最終發送給後端的服務器
  3. LVS相關術語

    1. DS:Director Server。指的是前端負載均衡器節點。
    2. RS:Real Server。後端真實的工作服務器。
    3. VIP:向外部直接面向用戶請求,作為用戶請求的目標的IP地址。
    4. DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
    5. RIP:Real Server IP,後端服務器的IP地址。
    6. CIP:Client IP,訪問客戶端的IP地址。
  4. 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直接路由

  1. 調度方法

    可以man ipvsadm查看相關算法
    1.輪叫調度 rr

這種算法是最簡單的,就是按依次循環的方式將請求調度到不同的服務器上,
該算法最大的特點就是簡單。輪詢算法假設所有的服務器處理請求的能力都是一樣的,
調度器會將所有的請求平均分配給每個真實服務器,不管後端 RS 配置和處理能力,
非常均衡地分發下去。

  1. 加權輪叫 wrr

這種算法比 rr 的算法多了一個權重的概念,可以給 RS 設置權重,權重越高,
那麽分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr算法的一種優化和補充,
LVS 會考慮每臺服務器的性能,並給每臺服務器添加要給權值,如果服務器A的權值為1,
服務器B的權值為2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,
處理的請求越多。

  1. 最少鏈接 lc

這個算法會根據後端 RS 的連接數來決定把請求分發給誰,
比如 RS1 連接數比 RS2 連接數少,那麽請求就優先發給 RS1

  1. 加權最少鏈接 wlc

這個算法比 lc 多了一個權重的概念。

  1. 基於局部性的最少連接調度算法 lblc

這個算法是請求數據包的目標 IP 地址的一種調度算法,
該算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的服務器,
如果這臺服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,
否則會繼續選擇其它可行的服務器

  1. 復雜的基於局部性最少的連接算法 lblcr

記錄的不是要給目標 IP 與一臺服務器之間的連接記錄,
它會維護一個目標 IP 到一組服務器之間的映射關系,防止單點服務器負載過高。

  1. 目標地址散列調度算法 dh

該算法是根據目標 IP 地址通過散列函數將目標 IP 與服務器建立映射關系,
出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器。

  1. 源地址散列調度算法 sh
    與目標地址散列調度算法類似,但它是根據源地址散列算法進行靜態分配固定的服務器資源。

  2. 最少隊列調度 nq
    無需隊列,如果有臺RS的連接數為0就直接分配過去
    我司采用的即是最後一種調度算法

淺淡負載均衡集群之LVS