Citrix Netscaler負載均衡算法
http://blog.51cto.com/caojin/1926308
眾所周知,作為新一代應用交付產品的Citrix Netscaler具有業內領先的數據控制、應用交付的能力,然而作為根本內容之一的ADC功能,如果不具備強大的、多元化的均衡算法是不可能適應如此眾多的應用場景,更無法做到好的應用交付產品。因此我們在此討論一下比較常用的負載均衡算法就很有必要。
目前最新版本的Netscaler支持17種均衡算法,目前先討論最常用的12種
1、輪詢算法(Round Robin)
當NetScaler 使用輪詢的負載均衡算法時,它會將來自客戶端的請求輪流分配給后台中的服務器,從1開始,直到N(后台服務器個數),然后重新開始循環。
如果考慮后台服務器的處理能力不同,可以給每個服務器分配不同的權值,通過設置權重比率來調整循環調度的機率。
2、最少連接算法(Least Connection)
當NetScaler 使用最小連接的負載均衡算法時,它是把新的連接請求分配到當前連接數最小的服務器。最小連接算法是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。系統會記錄各個服務器已建立連接的數目,當一個請求被調度到某台服務器時,其連接數加1,當連接中止,其連接數減一。
如果考慮后台服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小連接算法的調度機率。
3、最少響應時間
當NetScaler 使用最小響應時間的負載均衡算法時,它是把新的連接請求分配到當前連接數最小並且平均響應時間最小的服務器。最小響應時間算法的調度因素實際上有兩個部分組成,即當前每服務器上的最小連接數和每服務器的平均響應時間(這里的平均響應時間為TTFB,即第一個字節到達的時間,對於Http協議為response code為200的第一個字節數據返回的時間),這兩個因子的乘積做為算法調度的判斷依據。最新的連接請求將被發送到最小連接數和平均響應時間乘積最小的服務器。
如果考慮后台服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小享用時間算法的調度機率。
4、最小帶寬算法(Least Bandwidth)
當NetScaler 使用最小帶寬的負載均衡算法時,它是把新的連接請求分配到當前流量吞吐(單位為bps)最小的服務器。
如果考慮后台服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小帶寬算法的調度機率。
5、最少數據包算法(Least Packets)
當NetScaler 使用最少數據包的負載均衡算法時,它是把新的連接請求分配到數據包最少的服務器。計算最小數據包的方法是過去14秒每個服務器上處理的數據包數量。
如果考慮后台服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最少數據包算法的調度機率。
6、令牌算法(Token)
當NetScaler 使用令牌負載均衡算法時,它分發新的連接請求將依據客戶端請求中所附帶的令牌(Token)信息,具備相同令牌的請求將會分配到相同的后台服務器。令牌算法是一種基於內容信息的調度算法,NetScaler可設置令牌(Token)所在的位置和尺寸,這樣通過搜索到相同的令牌,而將請求發往相同的后台服務器。
令牌算法可以應用到TCP、http和Https服務類型,甚至可以實現不同的服務之間的唯一性。對於Http/Https協議,令牌(Token)可以在Http header或URL或Http body中取得。Netscaler可以在TCP Payload前最多24K字節中搜索配置的Token,如果是非Http服務,Netscaler可以在最多前16個數據包中中搜索配置的令牌(Token),但不能超過24K字節。
7、URL Hash算法
URL散列(Hash)負載均衡算法常用於緩存(Cache)環境,當NetScaler 使用URL散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數將此連接請求的URL信息進行計算並將計算值緩存在系統中,同時映射到后台某個服務器。隨后基於URL信息做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個后台服務器。
8、域名 Hash算法
當NetScaler 使用域名散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數將此連接請求的域名(Domain)信息進行計算並將計算值緩存在系統中,同時映射到后台某個服務器。隨后基於域名信息做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個后台服務器。
9、源IP地址 Hash算法
當NetScaler 使用源IP地址散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數將此連接請求的源IP地址信息進行計算並將計算值緩存在系統中,同時映射到后台某個服務器。隨后基於源IP地址做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個后台服務器。
10、目的IP地址Hash算法
當NetScaler 使用目的IP地址散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數將此連接請求的目的IP地址信息進行計算並將計算值緩存在系統中,同時映射到后台某個服務器。隨后基於目的IP地址做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個后台服務器。
11、源IP和目的IP地址 hash算法
當NetScaler 使用源IP和目的IP地址散列(Hash)負載均衡算法時,NetScaler通過一個散列(Hash)函數將此連接請求的源IP地址和目的IP地址信息進行計算並將計算值緩存在系統中,同時映射到后台某個服務器。隨后基於源IP地址和目的IP地址做為散列鍵(Hash Key)進行Hash計算得到相同值的請求,均發送到這個后台服務器。
源IP地址和目的IP地址散列(Hash)算法常應用在防火牆集群負載均衡環境中,它們可以保證流量出入的唯一性。
12、自定義的基於SNMP的判斷算法(Custom Load)
當NetScaler 使用自定義負載均衡算法時,NetScaler按照自定義策略通過SNMP協議獲取相關服務器運行參數,例如CPU利用率、內存使用、服務器連接和響應時間等多種信息,最終通過預先策略設定的參數矩陣(metric)來決定新的連接請求發送給哪一台后台服務器。
也許有人會問怎么Netscaler不支持加權算法?在其他ADC里面加權會作為一種單獨的算法出現,也就只能支持一兩種而已。但是在Netscaler,加權是在service的設定,會和其他已有的算法結合,從某種程度上講就變成更多的算法,也就變成了12+12加權=24種均衡算法。下面僅以最小連接的加權來討論
最小連接數
當NetScaler 使用最小連接的負載均衡算法時,它是把新的連接請求分配到當前連接數最小的服務器。最小連接算法是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。系統會記錄各個服務器已建立連接的數目,當一個請求被調度到某台服務器時,其連接數加1,當連接中止,其連接數減一。
如果考慮后台服務器的處理能力不同,也可以給每個服務器分配不同的權值,通過設置權重比率來調整最小連接算法的調度機率。
無權重參與
service1權重=4 |
||
servcie2權重=2 |
||
NW=當前連接數*(10000/權重) |
||
service1NW=連接數*2500 |
||
service2NW=連接數*5000 |
加入權重后請求的分配情況
請求數 |
service1 NW |
service2 NW |
當前NW |
0 |
0 |
0 |
0 |
1 |
2500 |
0 |
2500 |
2 |
2500 |
5000 |
5000 |
3 |
5000 |
5000 |
10000 |
4 |
5000 |
10000 |
12500 |
5 |
7500 |
10000 |
17500 |
6 |
10000 |
10000 |
20000 |
7 |
10000 |
15000 |
22500 |
8 |
12500 |
15000 |
27500 |
9 |
15000 |
15000 |
30000 |
10 |
15000 |
20000 |
32500 |
11 |
17500 |
20000 |
37500 |
12 |
20000 |
20000 |
40000 |
13 |
20000 |
25000 |
42500 |
14 |
22500 |
25000 |
45000 |
15 |
25000 |
25000 |
47500 |
16 |
25000 |
30000 |
50000 |
17 |
27500 |
30000 |
55000 |
18 |
30000 |
30000 |
57500 |
19 |
30000 |
35000 |
60000 |
注釋:
當service的NW相同的時候遵循輪詢算法,這也是導致在第一個周期與權重比例有所不同的原因所在。
當前NW的計算方法:NW=當前連接數*(10000/權重)但在計算系統當前NW(不是service的NW)時會利用上次索取Service的權重來進行計算。例如請求3-》4,由於請求3落在service1,servcie1的權重是4(10000/4=2500)那么在計算第4個請求的NW就用上次NW+10000/權重=12500。在4-》5的時候由於上次落在了service2上,那計算第5個請求的NW就用上次NW+10000/權重(用servcie2的權重)=17500。
為了明確看出權重的影響,下表以1:5的權重來體現
service1權重=5 |
||
servcie2權重=1 |
||
NW=當前連接數*(10000/權重) |
||
service1NW=連接數*2000 |
||
service2NW=連接數*10000 |
請求數 |
service1 NW |
service2 NW |
當前NW |
0 |
0 |
0 |
0 |
1 |
2000 |
0 |
2000 |
2 |
2000 |
10000 |
4000 |
3 |
4000 |
10000 |
14000 |
4 |
6000 |
10000 |
16000 |
5 |
8000 |
10000 |
18000 |
6 |
10000 |
10000 |
20000 |
7 |
10000 |
20000 |
22000 |
8 |
12000 |
20000 |
32000 |
9 |
14000 |
20000 |
34000 |
10 |
16000 |
20000 |
36000 |
11 |
18000 |
20000 |
38000 |
12 |
20000 |
20000 |
40000 |
13 |
20000 |
30000 |
42000 |
14 |
22000 |
30000 |
52000 |
15 |
24000 |
30000 |
54000 |
16 |
26000 |
30000 |
56000 |
17 |
28000 |
30000 |
58000 |
18 |
30000 |
30000 |
60000 |
19 |
32000 |
30000 |
62000
|