lvs簡介

Linux集羣

  在介紹lvs以前,咱們先來聊聊Linux集羣。Linux集羣(cluster)就是一組Linux計算機,它們做爲一個總體向用戶提供一組網絡資源,這些單個的計算機系統就是集羣的節點javascript

(node)。一個理想的集羣,用戶是不會意識到集羣系統底層的節點的,在他們看來,集羣是一個系統,而非多個計算機系統,而且集羣系統的管理員能夠隨意增長和刪改集羣系統前端

的節點。java

Linux集羣特色: 

  (1)高可擴展性:在不影響業務的狀況下,能夠動態的添加或刪除資源node

  (2)高可用性HA:集羣中的一個節點失效,它的任務可傳遞給其餘節點。能夠有效防止單點失效。linux

  (3)高性能:負載平衡集羣容許系統同時接入更多的用戶。nginx

  (4)高性價比:能夠採用廉價的符合工業標準的硬件構造高性能的系統。算法

Linux集羣類型:

  (1)LB:負載均衡後端

  (2)HA:高可用集羣緩存

  (3)HP:高性能服務器

LVS,Linux Virtual Server:

  在初步瞭解了Linux集羣后,咱們進一步介紹負載均衡集羣技術LVS

  LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。

具體介紹能夠查詢度娘  https://baike.baidu.com/item/LVS/17738?fr=aladdin

  LVS屬於Linux集羣LB類型,而目前LB類型的實現方式通常分兩種:硬件實現軟件實現

  硬件實現:

    F5 BIGIP

    Citrix NetScaler

    A10

    。。。

  軟件實現:

    LVS

    nginx

    haproxy

    。。。

lvs特色

         功能上:四種IP負載均衡技術和八種鏈接調度算法的IPVS軟件。

         適用性上:基於OSI參考模型4層轉發,後端服務器可運行任何支持TCP/IP的操做系統,負載均衡調度器可以支持絕大多數的TCP和UDP協議

         性能上:LVS服務器集羣系統具備良好的伸縮性,可支持幾百萬個併發鏈接

 

lvs組成部分:

   負載調度器(load balancer/Director):由一臺或多臺負載調度器組成,主要做用相似一個路由器,將用戶請求分發給服務器池上的real server;

  服務器池(server pool/Realserver):一組真正執行客戶請求的服務器

  共享存儲(shared storage):爲服務器池提供一個共享的存儲區,能使得服務器池擁有相同的內容,提供相同的服務。

lvs類型:

  lvs的類型有4種,咱們這裏詳細地介紹前三種類型。lvs的類型分別是NAT、DR、TUN、FULLNAT四種。

  lvs-nat

  

  lvs-nat工做流程:

  lvs-nat的工做的本質就是多目標的dnat。

  (1)客戶端請求資源,源地址cip(client IP),目的地址vip(virtual IP)

  (2)請求報文到達調度器,調度器發現目的地址是本身,而後修改請求報文的目標IP地址爲經過調度算法選出的RealServer,並將請求發送至RealServer

  (3)RealServer收到請求後,將請求內容響應給負載調度器,負載調度器將響應報文的源地址設置爲VIP,目的地址設置爲CIP發出。

  lvs-nat的特色:    

  (1)RS應該和DIP應該使用私網地址,且RS的網關爲DIP

  (2)請求和響應報文都要經由director轉發,極高負載場景中,director可能會成爲系統瓶頸

  (3)支持端口映射:

  (4)RS可使用任意OS

  lvs-dr

      

  lvs-dr工做流程:

  lvs-dr的本質是修改目的地址MAC

  (1)客戶端請求資源,源地址cip(client IP),目的地址vip(virtual IP)

  (2)請求報文經過路由器,到達交換機,交換機檢查目的地址的MAC,併發送ARP廣播。

  (3)調度器收到廣播,通過調度算法後將RealServer  rip(realserver IP)的MAC地址添加到目的地址後,發往交換機

  (4)交換機收到調度器發來的報文,檢查目的地址MAC,這裏的MAC地址已是通過調度器修改後的MAC,也就是RealServer的MAC,再次發送廣播

  (5)RealServer接到請求,響應請求,將源地址設置爲vip,目的地址設置爲cip後不通過調度器發送給客戶端

  lvs-dr特色:  

  (1)保證前端路由器將目標IP爲VIP的請求報文發送給director

  (2)RS的RIP可使用私有地址,也可使用公網IP

     (3)RS跟Director必須在同一個物理網絡中(ARP)能解析的

       (4)請求本文經由Director調度,但響應報文必定不能由director

    (5)不支持端口映射

      (6)RS的網關不能指向DIP

  lvs-tun

  

     (1)用戶發送請求到Director的VIP請求服務;

     (2)當用戶請求到達Director的時候,根據調度算法選擇一臺RS進行轉發,這時使用隧道(tun)封裝兩個IP首部,此時源IP是DIP,目標IP是RIP;

   (3)當RS接收到數據報後,看到外層的IP首部,目標地址是本身,就會拆開封裝,解析完畢後,發送響應報文,源IP是VIP,目標IP是CIP。

 

lvs調度算法:

 

  靜態方法:僅根據算法自己進行調度:(不考慮後端運行狀況)
    RR:round robin 輪循

    WRR:weighted rr, 加權輪循 (設置權重,權重比列分配)

    SH:source hash 源地址hash ,實現session保持的機制:

    DH:destation hash 目標地址hash,將對同一個目標的請求始終發往同一個RS

動態方法:根據算法及各RS的當前負載狀態進行調度:

    overhead(負載)=

    LC: least connection 最小鏈接數 overhead=Active*256+Inactive(非活動數)

    WLC:weighted LC 加權最小鏈接數 overhead=(Active*256+Inactive)/Weight

    SED:shortest expect delay WLC的改進

    overhead=(Active+1)*256/weight

    NQ:nerver queue 從不排隊,

    SED的改進

    LBLC:Locality-based LC 即爲動態的DH算法:

    本地訪問互聯網時,採用,緩存,提升訪問命中率

    LBLCR:帶複製的LBLC

   因爲http是無狀態的鏈接,即請求時建鏈接、請求完釋放鏈接,以儘快將資源釋放出來服務其餘客戶端,因此可能在某些特定的狀況下出現問題。好比在登陸某寶購買商品

時會出現被要求重複登陸的狀況,由於無狀態,請求被髮往不一樣的RealServer致使,引入session保持能夠解決這類問題,目前session保持實現方法有如下幾種。

  session保持:

    session綁定:

      source ip hash(LVS只支持ip hash)

      cookie:任意新請求來時,插入cookie

    session集羣:

      保證主機宕機的危險

      各主機間同步session,各主機擁有所有session

    session服務器:

      將session保存在共享存儲內,存儲或者nas,Redis(考慮Redis的高可用性)

ipvsadm配置命令:

  管理羣集服務:

    增:

      ipvsadmin -A -t|u|f service-address [-s scheduler]

      A 添加

      service-address:

      -t TCP

      -u UDP

      -f FWM

      -s 9種調度器

    例子 :

      ipvsadmin -A -t 172.16.1.253:80 -s wlc

    刪:

      ipvsadmin -D -t 172.16.1.253:80

      ipvsadmin -C 刪除全部集羣服務

    改:
      ipvsadmin -E -t|u|f service-address [-s scheduler]

      -E 編輯

      -t TCP

      -u UDP

      -s 9種調度器

    例子 :

      ipvsadmin -E -t 172.17.1.253:80 -s wrr

  管理集羣服務中的RS

    增:

      ipvsadmin -a -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]

      -r server-address:某RS的地址,在NAT模式中,可以使用IP:PORT實現端口映射;

      [-g|i|m]: LVS類型

      -g gateway:DR(默認)

      -i ipip:tun  

      -m maqs:NAT

      [-w weight]:定義服務器權重

    例子:

      ipvsadmin -a -t 172.16.1.253:80 -r 172.16.1.101 -g -w 5

      ipvsadmin -a -t 172.16.1.253:80 -r 172.16.1.102 -g -w 10   

    刪除RS

      ipvsadmin -d -t|u|f service-address -r server-address  

    例子:

      ipvsadmin -d -t 172.16.1.253:80 -r 172.16.1.101

    修改RS

      ipvsadmin -e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

    例子:

      ipvsadmin -e -t 172.16.1.253:80 -r 172.16.1.101 -g -w 3 

    查看:
      ipvsadmin -L|I [options]

      -n:數字格式顯示主機地址和端口

      --stats:統計數據

      --rate:速率

      --timeout:顯示

      -c:顯示當前的ipvs鏈接情況

    保存:
      service ipvsadm save 保存到默認配置文件

      ipvsadmin -S > /path/to/somefile

    載入:

      ipvsadmin -R < /path/from/somefile

lvs持久鏈接

  咱們這裏主要介紹lvs persistence,它的做用是不管ipvs使用何種調度方法,其都能實現未來自於同一個RS的請求始終定向至第一次調度時選出的RS。配置命令很簡單,只要在

管理羣集服務命令後加-p number便可。

  lvs persistence的實現方式有如下三種:  

    每端口持久:PPC,每端口持久,單端口持久調度,(單個端口)

    單FWM持久:PFWMC,單FWM持久調度 (一組端口 -j MASK --set-mark 10)

    單客戶端持久: PCC,單客戶端持久調度 (全部端口)

  配置命令:

    PPC:  

     ipvsadm -A -t 192.168.0.10:80 -s rr -p 300 

    PFWMC:   

      經過FWM定義集羣的方式:

      (1)在director上netfilter的mangle表的PREROUTING定義用於打標的規則

      iptables -t mangle -A PREROUTING -d 192.168.0.10(vip) -p tcp --dport 80 -j MARK --set-mark 10

      iptables -t mangle -A PREROUTING -d 192.168.0.10(vip)-p tcp --dport 22 -j MARK --set-mark 10

      iptables 定義了兩個端口22和80 

      (2)基於FWM定義集權服務:

      ipvsadmin -A -f 10 -s rr -p 360

      ipvsadmin -a -f 10 -r 192.168.1.10 -g -w 1      

      在lvs時定義-f10 便可開放兩種應用

      功用:將共享一組RS的集羣服務統一進行定義

    PCC:

      ipvsadm -A -t 192.168.0.10:0 -s rr -p 3600 

lvs注意事項

  關於時間同步:各節點間的時間誤差不大於1s,建議使用統一的ntp服務器進行更新時間;

  DR模型中的VIP的MAC廣播問題:

  在DR模型中,因爲每一個節點均要配置VIP,所以存在VIP的MAC廣播問題,在如今的linux內核中,都提供了相應kernel 參數對MAC廣播進行管理,具體以下:

    arp_ignore: 定義接收到ARP請求時的響應級別;

    0:只要本地配置的有相應地址,就給予響應;

    1:僅在請求的目標地址配置在到達的接口上的時候,纔給予響應;DR模型使用

    arp_announce:定義將本身地址向外通告時的通告級別;

    0:將本地任何接口上的任何地址向外通告;

    1:試圖僅向目標網絡通告與其網絡匹配的地址;

    2:僅向與本地接口上地址匹配的網絡進行通告;DR模型使用

相關文章
相關標籤/搜索