LVS的DR模式和持久鏈接

###############################算法

集羣的定義和分類後端

LVS簡介和基本使用bash

LVS工做模型和調度算法服務器

DR模型的實現網絡

LVS的持久鏈接session

###############################併發

集羣的定義和分類負載均衡

1、集羣的定義curl

  • 集羣(cluster)技術是一種較新的技術,經過集羣技術,能夠在付出較低成本的狀況下得到在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集羣系統中的核心技術。tcp

2、集羣的分類

一、Scale ON(向上擴展)

  • 物理擴展,提升硬件參數

  • 缺點:硬件的參數增加比例所帶來的性能提高,不是線性的,價格每每高於硬件參數的倍數,而且CPU數量越多,仲裁機制消耗的資源就越大。

二、Scale Out 向外擴展 數量擴展

  • 增長服務器數量

  • 優勢:在不影響業務的狀況下,能夠實現動態的在線擴容,每臺服務器的費用能夠成正比的轉化爲性能。

  • High Availability()

  • 保證服務永久在線可用的集羣,經過健康檢測機制,大幅度的加強服務的可用性,HA集羣中一個資源只能被一個節點佔用,節點數一般爲奇數。

  • 可用性衡量標準=在線時間/(在線時間+故障處理時間)

  • Load Balancing(負載均衡集羣)

  • 那用戶的請求均攤到多臺服務器上的機制叫作負載均衡,主要是增長處理能力。

  • 調度算法:論調(Round Robin)、加權(WRR)等……

硬件

  • F5 BIG IP

  • Citrix Netscaler

  • A10 AX系列

軟件

  • 四層 不能處理應用層協議,工做性能好,支持的功能特性有限 LVS

  • 七層 能夠過濾和修改應用層協議,性能略差於四層設備 Nginx、Haproxy

  • High Performance

  • 科學集羣是並行計算的基礎。一般,科學集羣涉及爲集羣開發的並行應用程序,以解決複雜的科學問題。科學集羣對外就好像一個超級計算機,這種超級計算機內部由十至上萬個獨立處理器組成,而且在公共消息傳遞層上進行通訊以運行並行應用程序。


LVS簡介和基本使用

1、LVS簡介

  • LVS工做在內核空間的TCP/IP協議棧上,LVS監控在INPUT鏈上,當用戶請求的是集羣服務(套接字),ipvs鉤子函數會根據定義的規則修改請求並送至POSTROUTING鏈上,LVS和iptbles不能同時使用。

  • ipvsadm是工做在用戶空間的規則編寫的命令行工具

  • ipvs是工做在內核空間INPUT鏈上的鉤子函數

注意:調度器的實現基於套接字(IP+port),因此一個調度器能夠調度多個不一樣類型的服務但一般調度能力有限,一般都爲一種服務實現集羣調度功能。

2、ipvsadm的用法

ipvsadm管理集羣服務

添加 -A - t|u|f  service-address [-s scheduler]默認調度算法是wlc
        -t  TCP 協議的集羣
        -u  UDP 協議的集羣
            service-address IP:PORT
        -f  FireWallMark    LVS持久鏈接
            service-address MarkNumber
修改 -E
刪除 -D - t|u|f service-address

ipvsadm管理集羣服務中的realserver

添加 -a   - t|u|f service-address -r server-address -[g|i|m] [-w weight]
        在NAT模型中server-address能夠是 IP:PORT
        -g:DR   默認就是DR模型
        -m:NAT
        -i:TUN
修改 -e
刪除 -d - t|u|f service-address -r server-address

ipvsadm查看

ipvsadm查看
         - L|l      顯示規則
         -n         不反解析IP地址和端口,數字格式顯示主機地址和端口號
         --status   統計數據
         --rate     速率
         --timeout  顯示tcp、tcpfin和udp的會話超時時長
         --sort     顯示當前的ipvs鏈接情況
         -c         查看鏈接數

刪除全部集羣服務

-C          清空ipvs全部規則

保存ipvs規則

-S  > /path/file   保存規則
service ipvsadm save

載入ipvs規則

-R  < /path/somefile

LVS工做模型和調度算法

  • NAT

064256156.jpg

  • 用戶請求到達INPUT鏈由ivps的匹配規則並修改就客戶端的目標IP爲集羣服務中的Realserver地址,DNAT的動態擴展,一樣支持端口映射,向外提供的服務和內部服務端口能夠不一致,Realserver的網關指向DIP。

  • 缺點:因爲Director爲後端realserver網關,所以可以調度的Realserver有限,10個就已經差強人意了。

  • DR

    064403347.jpg

  • 集羣節點跟Director必須在同一物理網絡中,由於它靠mac地址轉發數據包,ARP廣播包不容許跨路由

  • RIP能夠不用是私有地址,實現便捷的遠程原理

  • Director只負責入站請求,響應報文由Realserver直接髮網客戶端,請求報文很小,因此DR模式的LVS能帶動100臺Realserver

  • 集羣節點必定不能使用Director當作其默認網關

  • 不支持端口映射

  • 大多數的操做系統均可以用在Realserver,要求必須能隱藏VIP

  • TUN

064437159.jpg

  • 集羣節點能夠跨越Intelnet

  • RIP必須是公網地址

  • Director僅負責入站請求,響應報文則由Realserver直接髮網客戶端

  • Realserver網關不能指向Director

  • 只有支持隧道功能的OS才能用於Realserver

  • 不支持端口映射

2、LVS的調度算法

一、靜態調度方法(director不考慮realserver已創建的活動連接和非活動連接情況)

rr 輪詢

  • 調度器經過「輪叫」調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。

wrr 加權輪詢

  • 調度器經過「加權輪叫」調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器能處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

sh 源地址哈希

  • 源地址hash,對請求的客戶端IP進行hash計算,內部維持着一張hash表,它的主要功能用戶實現session affinity,會話綁定,它在必定程度上破壞了負載均衡效果,可是爲了現實應用的需求這種功能是必要的,若是每一個realserver經過session sharing的集羣機制共享session,就能夠不適用source hash這種功能。

dh 目標地址哈希

  • 「目標地址散列」調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

二、動態調度方法

lc 最少鏈接數

  • 調度器經過「最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用「最小鏈接」調度算法能夠較好地均衡負載,active*256+inactive。

wlc 加權最少鏈接數

  • 在集羣系統中的服務器性能差別較大的狀況下,調度器採用「加權最少連接」調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值(active*256+inactive)/weight。

sed 最短時間望延遲

  • wlc的改進版,權重大的服務器事先被挑中,(active+1)*256/weight,權重大的服務器有不少的時候,權重小的服務器可能一個都沒有。

nqnever queue 永不排隊

  • 無需隊列,若是有臺 realserver的鏈接數=0就直接分配過去,不須要在進行sed運算。

lblc 基於本地的最少鏈接

  • 它的主要目的跟dh同樣,只是dh並不考慮從但前cacheserver的鏈接數,lblc考慮而已。儘管要保證命中的提升,並一樣的請求髮網通一個cache server但也要考慮輪詢新的鏈接用一個相對空閒的cache server來響應。

lblcr 基於本地的帶複製功能的最少鏈接

  • 「帶複製的基於局部性最少連接」調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個目標 IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按「最小鏈接」原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按「最小鏈接」原則從這個集羣中選出一臺服務器,將該服務器加入。


DR模型的實現

1、實現原理

070222206.png

  1. 客戶端發出請求報文至路由網關,路由網關eth1發出ARP解析請求,請求數據包目標IP(192.168.1.200)的MAC地址是多少,全部realserver均收到APR請求,此時爲了讓解析的MAC爲Director的MAC,須要對全部realserver作出設置以下:

    ######全部realserver配置信息
    sysctl -w net.ipv4.conf.eth0.arp_announce=2
    sysctl -w net.ipv4.conf.all.arp_announce=2
    sysctl -w net.ipv4.conf.eth0.arp_ignore=1
    sysctl -w net.ipv4.conf.all.arp_ignore=1
    #######解釋說明
    arp_ignore      接收到別人請求後的響應級別
                0   只要本機配置有相應地址就給予相應
                1   僅在請求目標地址配置在請求到達的接口上的時候,纔給予相應
    arp_annonce     主動向外通告過本身IP地址和MAC地址對應關係的通告級別
                0   將本機任何接口上的任何地址向外經過
                1   試圖僅向目標網絡通告與其網絡匹配的地址信息
                2   僅向目標網絡通告與其網絡匹配的地址信息是
  2. 客戶端成功解析VIP的MAC地址爲Director的MAC,將報文轉發至調度器。

  3. Director根據調度算法和規則選擇爲Realserver_one,併發出APR解析請求獲得RIP對應的MAC地址,並從新封裝數據報文的幀首部,將源MAC地址改成本身,目標MAC地址改成解析到的RIP的MAC地址,併發送報文至Realserver_one。

  4. Realserver_one收到Director發來的報文處理並相應此請求報文,響應報文的源IP地址,必須是請求報文的目標IP(VIP)地址,須要對realserver作以下設置:

    ifconfiglo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255
    route add -host 192.168.1.200 dev lo:0

  5. 此後整個傳輸過程數據包源IP爲VIP,目標IP位CIP,數據報文沿着路由器轉發至客戶端,完成整個請求和相應過程。

2、配置過程

Director配置

route add -host 192.168.1.200 dev eth0:0     
ipvsadm -A -t 192.168.1.200:80 -s wlc
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.10 -g -w 2
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.20 -g -w 1

realserver端配置

sysctl -w net.ipv4.conf.eth0.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
ifconfiglo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255
route add -host 192.168.1.200 dev lo:0

、健康檢測機制

使用ldirectord來實現對realserver的健康狀態檢測

  • 爲了從主Director將LVS負載均衡資源故障轉移到備用Director,並從集羣中自動移除節點,咱們須要使用ldirectord程序,這個程序在啓動時自動創建IPVS表,而後監視集羣節點的健康狀況,在發現失效節點時將其自動從IPVS表中移除,本文沒有使用這種方法,而是簡單的經過腳本的方式來實現。

使用腳原本實現對realserver的健康狀態檢測

#!/bin/bash
#
VIP=192.168.1.200
CPORT=80
BACKUP=127.0.0.1
STATUS=("1""1")
RS=("192.168.1.10""192.168.1.20")
RW=("2""1")
RPORT=80
TYPE=g
while:; do
letCOUNT=0
add() {
   ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
   [ $? -eq0 ] && return0 || return1
}
del() {
   ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
   [ $? -eq0 ] && return0 || return1
}
forI in${RS[*]}; do
   ifcurl --connect-timeout 1 http://$I &> /dev/null; then
      if[ ${STATUS[$COUNT]} -eq0 ]; then
         add $I ${RW[$COUNT]}
     [ $? -eq0 ] && STATUS[$COUNT]=1
      fi
   else
      if[ ${STATUS[$COUNT]} -eq1 ]; then
         del $I
     [ $? -eq0 ] && STATUS[COUNT]=0 
      fi
   fi
   letCOUNT++
done
sleep5
done

注意:各節點之間的時間誤差不該該超過1秒,NTP時間服務器來同步時間。


LVS的持久鏈接

1、持久鏈接的實現機制

  • 不管使用什麼算法,LVS持久鏈接都能實如今一點時間內,未來自於同一個客戶端請求派發至此前選定的realserver,DH調度算法自己依賴於TCP會話超時時間等其餘計時器,而持久鏈接依賴於持久鏈接模板,每一個新的鏈接請求,不管客戶端的鏈接狀態不管是否斷開,只要客戶端曾經訪問過,LVS就會在持久鏈接模板中記錄信息,持久鏈接模板(內存緩衝區):記錄每個客戶端及分配的realserver的映射關係。

PPC 持久端口鏈接 基於端口

  • 來自於同一個客戶端對同一個服務的請求,始終定向至此前選定的realserver。

ipvsadm -A -t 192.168.1.200:23 -s rr-p 3600
ipvsadm -a -t 192.168.1.200:23 -r 192.168.1.10 -g -w 2
ipvsadm -a -t 192.168.1.200:23 -r 192.168.1.20 -g -w 1

PCC 持久客戶端鏈接 基於全部端口

  • 來自於同一個客戶端對全部服務的請求,始終定向至此前選定的realserver

ipvsadm -A -t 192.168.1.200:0 -s rr -p 600
ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.10 -g -w 2
ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.20 -g -w 1

PNMPP 持久防火牆標記鏈接

  • 來自於同一客戶端對指定服務的請求,始終定向至此算定的realserver基於指定的端口,它能夠將兩個絕不相干的端口定義爲一個集羣服務,例如:合併http telnet爲同一個集羣服務。

######PNMPP是經過路由前給數據包打標記來實現的
iptables -t mangle -A PREROUTING -d 192.168.1.200 -eth0 -p tcp --dport 80 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -d 192.168.1.200 -eth0 -p tcp --dport 23 -j MARK --set-mark 3
ipvsadm -A -f 3 -s rr -p 600
ipvsadm -a -f 3 -r 192.168.1.10 -g -w 2
ipvsadm -a -f 3 -r 192.168.1.20 -g -w 2

注意:以上三種持久鏈接均使用了"-p"選項,它保證了持久性,默認爲300秒

警告:Director沒有定義用戶請求的集羣服務,將試圖本身響應客戶端請求。

相關文章
相關標籤/搜索