###############################算法
集羣的定義和分類後端
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
用戶請求到達INPUT鏈由ivps的匹配規則並修改就客戶端的目標IP爲集羣服務中的Realserver地址,DNAT的動態擴展,一樣支持端口映射,向外提供的服務和內部服務端口能夠不一致,Realserver的網關指向DIP。
缺點:因爲Director爲後端realserver網關,所以可以調度的Realserver有限,10個就已經差強人意了。
集羣節點跟Director必須在同一物理網絡中,由於它靠mac地址轉發數據包,ARP廣播包不容許跨路由
RIP能夠不用是私有地址,實現便捷的遠程原理
Director只負責入站請求,響應報文由Realserver直接髮網客戶端,請求報文很小,因此DR模式的LVS能帶動100臺Realserver
集羣節點必定不能使用Director當作其默認網關
不支持端口映射
大多數的操做系統均可以用在Realserver,要求必須能隱藏VIP
TUN
集羣節點能夠跨越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、實現原理
客戶端發出請求報文至路由網關,路由網關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 僅向目標網絡通告與其網絡匹配的地址信息是
客戶端成功解析VIP的MAC地址爲Director的MAC,將報文轉發至調度器。
Director根據調度算法和規則選擇爲Realserver_one,併發出APR解析請求獲得RIP對應的MAC地址,並從新封裝數據報文的幀首部,將源MAC地址改成本身,目標MAC地址改成解析到的RIP的MAC地址,併發送報文至Realserver_one。
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
此後整個傳輸過程數據包源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沒有定義用戶請求的集羣服務,將試圖本身響應客戶端請求。