Linux Cluster:Linux集羣
擴展方式:
Scale up: 垂直擴展,即使用性能更好的主機來取代當前主機
Scale out: 橫向擴展,即增加服務器,獲得容量的提升以到達性能的優化
director[ 調度器 ], dispatcher[ 分發器 ], load balancer[ 負載均衡器 ]
Linux Cluster類型:
負載均衡集羣:LB [ Load Balancing ]
高可用集羣:HA [ High Availability ]
可用性 = 一個系統的平均無故障時間/(平均無故障時間+平均修復時間)
95%, 99%, 99.9%, 99.99%, 99.999%
高性能集羣:HP [ High Performance ]
構建高可擴展的系統,應該遵循的一個基本原則:在系統內部儘量避免串行化和交互;
設置集羣思路:
1)分層:接入層 --> 應用層 --> 服務層 --> 數據層
2)分割:化整爲零,切割大業務爲多個小業務
3)分佈式:
分佈式應用
分佈式靜態資源
分佈式數據和存儲
分佈式計算
“可擴展性”、“高可用性”、“性能”:
性能:響應時間;
容量:在一定時間內能完成的工作量;容量必須是可有效利用;
最大吞吐量:基準性能測試時得出的數據指標;系統容量的極限;
容量:在保證可接受性能的情況下能夠達到的吞吐量;
可擴展性:表明了需要增加資源以完成更多的工作任務時能夠獲得的划算地等同提升;
Linux的集羣類型:LB、HA、HP
LB集羣調度器的實現:
工作在協議層來劃分:
tcp:根據請求報文中的目標地址和端口進行調度;
應用層:根據請求的內容進行調度,而且此種調度爲“代理”方式;
軟件:
tcp: lvs (Linux Virtual Server), haproxy, nginx
http: haproxy, nginx, apache(proxy module, balancer module), ats(apache traffic server), squid, varnish
mysql: mysql-proxy
硬件:
F5:Big-IP
Citrix: NetScaler
A10: A10
Array:
RedWare
lvs: Linux Virtual Server,是由章文嵩設計開發的
根據目標地址和端口作出轉發與否的決策,根據調度方法作出轉發至哪一個後端的決策;
組成部分:ipvs, ipvsadm
netfilter:
PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
ipvs工作於netfilter的INPUT鏈接;
ipvsadm用於在ipvs上定義集羣服務:同時也得定義此集羣服務對應於有哪個後端主機可用;
根據所指定的調度方法(算法)作出調度決策;
支持的協議:TCP, UDP, SCTP, AH, ESP, AH_ESP
lvs中的常用術語約定:
Host:
Director:調度器
Real Server: RS,後端提供服務的主機
IP:
Client: CIP
Director Virtual IP: VIP
Directory IP: DIP
Real IP: RIP
lvs的類型:
lvs-nat:類似於DNAT,但支持多目標轉發;
它通過修改請求報文的目標地址爲根據調度算法所挑選出的某RS的RIP來進行轉發;
架構特性:
(1) RS應該使用私有地址,即RIP應該爲私有地址;各RS的網關必須指向DIP;
(2) 請求和響應報文都經由Director轉發;高負載場景中,Director易於成爲系統瓶頸;
(3) 支持端口映射;
(4) RS可以使用任意類型的OS;
(5) RS的RIP必須與Director的DIP在同一網絡;
lvs-dr:直接路由
Director在實現轉發時不修改請求的IP首部,而是通過直接封裝MAC首部完成轉發;目標MAC是Director根據調度方法挑選出某RS的MAC地址;拓撲結構有別有NAT類型;
架構特性:
(1) 保證前端路由器將目標地址爲VIP的請求報文通過ARP地址解析後送往Director
解決方案:
靜態綁定:在前端路由直接將VIP對應的目標MAC靜態配置爲Director的MAC地址;
arptables:在各RS上,通過arptables規則拒絕其響應對VIP的ARP廣播請求;
內核參數:在RS上修改內核參數,並結合地址的配置方式實現拒絕響應對VIP的ARP廣播請求;
(2) RS的RIP可以使用私有地址;但也可以使用公網地址,此時可通過互聯網上的主機直接對此RS發起管理操作;
(3) 請求報文必須經由Director調度,但響應報文必須不能經由Director;
(4) 各RIP必須與DIP在同一個物理網絡中;
(5) 不支持端口映射;
(6) RS可以使用大多數的OS;
(7) RS的網關一定不能指向Director;
lvs-tun: 不修改請求報文IP首部,而是通過IP隧道機制在原有的IP報文之外再封裝IP首部,經由互聯網把請求報文交給選定的RS;
CIP;VIP DIP;RIP
架構特性:
(1) RIP, DIP, VIP都是公網地址;
(2) RS的網關不能,也不可能指向DIP;
(3) 請求報文由Director分發,但響應報文直接由RS響應給Client;
(4) 不支持端口映射;
(5) RS的OS必須得支持IP隧道;
lvs-fullnat:通過請求報文的源地址爲DIP,目標爲RIP來實現轉發;對於響應報文而言,修改源地址爲VIP,目標地址爲CIP來實現轉發;
架構特性:
(1) RIP,DIP可以使用私有地址;
(2) RIP和DIP可以不在同一個網絡中,且RIP的網關未必需要指向DIP;
(3) 支持端口映射;
(4) RS的OS可以使用任意類型;
(5) 請求報文經由Director,響應報文經由Director;
lvs scheduler[ 調度方法 ]:
靜態方法:僅根據算法本身實現調度;
RR: round-robin, 輪詢;輪叫、輪調、輪流;
輪叫調度就是以輪叫的方式依次將請求調度不同的服務器,即每次調度執行i = (i + 1) mod n,並選出第i臺服務器。算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。輪叫調度算法假設所有服務器處理性能均相同,不管服務器的當前連接數和響應速度。該算法相對簡單,不適用於服務器組中處理性能不一的情況,而且當請求服務時間變化比較大時,輪叫調度算法容易導致服務器間的負載不平衡。
WRR:weighted round-robin, 加權輪詢;
該算法可以解決服務器間性能不一的情況,它用相應的權值表示服務器的處理性能,服務器的缺省權值爲1。假設服務器A的權值爲1,B的權值爲2,則表示服務器B的處理性能是A的兩倍。加權輪叫調度算法是按權值的高低和輪叫方式分配請求到各服務器。權值高的服務器先收到的連接,權值高的服務器比權值低的服務器處理更多的連接,相同權值的服務器處理相同數目的連接數。
SH:Source ip Hashing,源地址哈希;把來自同一個地址請求,統統定向至此前選定的RS;
源地址散列調度算法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。它採用的散列函數與目標地址散列調度算法的相同。
DH:Destination ip Hashing, 目標地址哈希;把訪問同一個目標地址的請求,統統定向至此前選定的某RS;
目標地址散列調度算法先根據請求的目標IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空,主要應用於緩存服務器。
動態方法:根據算法及後端RS當前的負載狀況實現調度;
LC: least connection
最少鏈接,簡稱LC。該調度是把新的連接請求分配到當前連接數最小的服務器。最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1;當連接中止或超時,其連接數減1。
Overhead=Active*256+Inactive
WLC: weighted least connection
加權最少鏈接,簡稱WLC。加權最小連接調度是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值爲1,系統管理員可以動態地設置服務器的權值。加權最小連接調度在調度新連接時儘可能使服務器的已建立連接數和其權值成比例。計算當前realserver 的負載情況計算方法:
Overhead=(Active*256+Inactive)/weight
SED:Shorted Expection Delay
最短的期望的延遲,簡稱SED。分配一個接踵而來的請求以最短的期望的延遲方式到服務器。
計算當前realserver 的負載情況計算方法:
Overhead=(Active+1)*256/weight
NQ:Never Queue
最小隊列調度,簡稱NQ。分配一個接踵而來的請求到一臺空閒的服務器,此服務器不一定是最快的那臺,如果所有服務器都是繁忙的,它採取最短的期望延遲分配請求。
LBLC:Local-Based Least Connection,動態方式的DH算法;
基於局部性的最少鏈接,簡稱LBLC。"基於局部性的最少鏈接" 調度算法是針對目標IP 地址的負載均衡,目前主要用於Cache 集羣系統。該算法根據請求的目標IP 地址找出該目標IP 地址最近使用的服務器,若該服務器是可用的
且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用"最少鏈接"的原則選出一個可用的服務器,將請求發送到該服務器。
LBLCR:Replicated LBLC
帶複製的基於局部性最少鏈接,簡稱LBLCR。"帶複製的基於局部性最少鏈接"調度算法也是針對目標IP 地址的負載均衡,目前主要用於Cache 集羣系統。它與LBLC 算法的不同之處是它要維護從一個目標IP 地址到一組服務器的映射,而LBLC 算法維護從一個目標IP 地址到一臺服務器的映射。該算法根據請求的目標IP 地址找出該目標IP 地址對應的服務器組,按"最小連接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小連接"原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,降低複製的程度。
Session 保持
Session Sticky
Session Replication Cluster
Session Server
ipvsadm命令的用法:
需要先安裝:yum install ipvsadm
管理集羣服務:創建、修改、刪除
管理集羣服務的RS:添加、修改、移除
查看:
統計數據
速率
管理集羣服務:
創建或修改:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
-A:添加
-E:修改
-t: 承載的應用層協議爲基於TCP協議提供服務的協議;其service-address的格式爲“VIP:PORT”,如“172.16.100.6:80”;
例:把172.16.37.10的80端口設置爲集羣
# ipvsadm -A -t 172.16.37.10:80 -s wlc
-u: 承載的應用層協議爲基於UDP協議提供服務的協議;其service-address的格式爲“VIP:PORT”,如“172.16.100.6:53”;
-f:承載的應用層協議爲基於TCP或UDP協議提供服務的協議,但此類報文會經由iptables/netfilter打標記,即爲防火牆標記;其service-address的格式爲“FWM”,例如“10”;
-s scheduler: 指明調度方法;默認爲wlc;
刪除:
ipvsadm -D -t|u|f service-address
例:刪除172.16.37.10的80端口的集羣服務
ipvsadm -D -t 172.16.37.10:80
管理集羣服務上的RS:
添加或修改:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-r server-address: 指明RS,server-address格式一般爲“IP[:PORT]”;注意,只支持端口映射的lvs類型中才應該顯式定義此處端口
例如:-r 192.168.10.7:80
[-g|i|m]: 指明lvs類型,默認爲dr類型
-g: gateway, 意爲dr類型;
-i: ipip, 意爲tun類型;
-m: masquerade, 意爲nat類型;
[-w weight]:當前RS的權重;
注意:僅對於支持加權調度的scheduler,權重纔有意義;
例: 添加172.16.37.10:80的一個RS爲192.168.10.7,爲net模式,權重爲2
# ipvsadm -a -t 172.16.37.10:80 -r 192.168.10.7 -m -w 2
刪除:
ipvsadm -d -t|u|f service-address -r server-address
例:刪除172.16.37.10:80的RS 192.168.10.8
# ipvsadm -d -t 172.16.37.10:80 -r 192.168.10.8
清空所有集羣服務的定義:
ipvsadm -C
保存及恢復集羣服務及RS的定義:
保存ipvsadm規則
ipvsadm -S > /etc/sysconfig/ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
service ipvsadm save
恢復ipvsadm規則
ipvsadm -R < /etc/sysconfig/ipvsadm
ipvsadm-restore < /etc/sysconfig/ipvsadm
service ipvsadm restart
查看規則:
ipvsadm -L|l [options]
-c: 列出當前所有connection;
--stats: 列出統計數據
--rate: 列出速率
-n, --numeric: 數字格式顯示IP及端口;
--exact: 精確值;
例:ipvsadm -L -n
Conns 表示當前連接數
InPkts表示入站請求報文有多少個
OutPkts表示出站響應報文有多少個
InBytes表示入站請求報文大小
OutBytes表示出站請求報文大小
清空計數器:
ipvsadm -Z [-t|u|f service-address]
案例:lvs-nat類型的web服務器集羣
在調度器上建立ipvsadm規則:
把172.16.37.10的80端口設置爲集羣,以加權輪迴模式
# ipvsadm -A -t 172.16.37.10:80 -s wrr
把添加172.16.37.10:80的一個RS爲192.168.10.7,爲net模式,權重爲1
# ipvsadm -a -t 172.16.37.10:80 -r 192.168.10.7 -m -w 1
把添加172.16.37.10:80的一個RS爲192.168.10.8,爲net模式,權重爲2
# ipvsadm -a -t 172.16.37.10:80 -r 192.168.10.8 -m -w 2
打開路由間轉發
1) echo "1" > /proc/sys/net/ipv4/ip_forward
2)編輯配置文件/etc/systl.conf
在RS1上設置
設置ip 192.168.10.7 默認路由指向 192.168.10.1
啓動httpd
在RS2上設置
設置ip 192.168.10.8 默認路由指向 192.168.10.1
啓動httpd
測試:ab -n 1000 -c 100 http://172.16.37.10/index.html
通過ipvsadm -Ln --stats查看狀態會發現比例是1:2
案例:lvs-dr類型的web服務器集羣
(1) 各RS要直接響應Client,因此,各RS均得配置VIP;但僅能夠讓Director上的VIP能夠與本地路由直接通信;
(2) Director不會拆除或修改請求報文的IP首部,而是通過封閉新的幀首部(源MAC爲Director的MAC,目標MAC爲挑選出的RS的MAC)完成調度;
配置過程總結:
Director:
(1) VIP配置在物理接口的別名上
ifconfig eth1:1 172.16.37.10 broadcast 172.16.37.10 netmask 255.255.255.255
(2) 配置路由信息
route add -host 172.16.37.10 dev eth1:1
RS:
(1) 先修改內核參數
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
(2) VIP配置在lo的別名上
ifconfig lo:0 172.16.37.10 broadcast 172.16.37.10 netmask 255.255.255.255 up
(3) 配置路由信息
route add -host 172.16.37.10 dev lo:0