集羣基礎知識:
當服務器性能不足以支撐我們當前的服務的時候,此時則需要對服務器性能做提升;通常有兩種方法:
縱向擴展(垂直擴展):大概意思就是換好的CPU,大的內存,總之一句話換貴的服務器,性價比非常不高;
橫向擴展(向外擴展):即是將N臺性能一般的服務器組合起來成爲服務器集羣,提升性能,性價比高;
集羣的分類:
負載均衡集羣:Load Balancing
高可用集羣:High Availability
高性能集羣:High Performance
“可擴展性”、“高可用性”、“性能”名詞解釋:
性能:響應時間;
容量:在保證可接受性能的情況下能夠達到的吞吐量;
最大吞吐量:基準性能測試時得出的數據指標;系統容量的極限;
可擴展性:表明了需要增加資源以完成更多的工作任務時能夠獲得的划算地等同提升;
LVS:Linux Virtual Server
基本信息:作者爲章文嵩,現供職於阿里巴巴,lvs也是中國人做出的最著名的開源軟件之一;(linux2.4/2.6內核自帶lvs)
lvs組成部分:ipvs, ipvsadm
ipvs:工作於netfilter的INPUT鏈;真正實現調度功能;
ipvsadm:用於在ipvs上定義集羣服務,以及對應可用的後端主機,以及調度算法;
支持的協議:TCP, UDP, SCTP, AH, ESP, AH_ESP
lvs中的常用術語:
Host:
Director:調度器
Real Server: RS,後端提供服務的主機
IP:
Client:CIP
DirectorVirtual IP: VIP
DirectoryIP: DIP
RealIP: 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;
架構特性:
(1) RIP, DIP, VIP都是公網地址;
(2) RS的網關不能,也不可能指向DIP;
(3) 請求報文由Director分發,但響應報文直接由RS響應給Client;
(4) 不支持端口映射;
(5) RS的OS必須得支持IP隧道;
lvs-fullnat:不是原生lvs的功能,是阿里巴巴後來增加的;
基本原理:通過請求報文的源地址爲DIP,目標爲RIP來實現轉發;對於響應報文而言,修改源地址爲VIP,目標地址爲CIP來實現轉發;
架構特性:
(1) RIP,DIP可以使用私有地址;
(2) RIP和DIP可以不在同一個網絡中,且RIP的網關未必需要指向DIP;
(3) 支持端口映射;
(4) RS的OS可以使用任意類型;
(5) 請求報文經由Director,響應報文經由Director;
lvs的調度算法(scheduler):
靜態方法:僅根據算法本身實現調度;
RR: round-robin, 輪詢;輪叫、輪調、輪流;
WRR:weighted round-robin, 加權輪詢;
SH:Source ip Hashing,源地址哈希;把來自同一個地址請求,統統定向至此前選定的RS;
DH:Destination ip Hashing, 目標地址哈希;把訪問同一個目標地址的請求,統統定向至此前選定的某RS;
動態方法:根據算法及後端RS當前的負載狀況實現調度(overhead較小的響應請求);
LC: least connection
Overhead=Active*256+Inactive
WLC: weighted least connection(默認算法)
Overhead=(Active*256+Inactive)/weight
SED:Shorted Expection Delay
Overhead=(Active+1)*256/weight
NQ:Never Queue
LBLC:Local-Based Least Connection,動態方式的DH算法;
LBLCR:Replicated LBLC
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”;
-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
管理集羣服務上的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類型
-g: gateway, 意爲dr類型;
-i: ipip, 意爲tun類型;
-m: masquerade, 意爲nat類型;
[-w weight]:當前RS的權重;
注意:僅對於支持加權調度的scheduler,權重纔有意義;
刪除:
ipvsadm -d -t|u|f service-address -r server-address
清空所有集羣服務的定義:
ipvsadm -C
保存集羣服務及RS的定義:
ipvsadm -S > /etc/sysconfig/ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
service ipvsadm save
恢復集羣服務及RS的定義:
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 -Z [-t|u|f service-address]