[TOC]
reference: 馬哥教育視頻
一. 理論
1. 系統(tǒng)擴(kuò)展的方式
scale up: 向上擴(kuò)展 (換主機(jī))
scale out: 向外擴(kuò)展 (加主機(jī))
硬件價(jià)格翻倍, 然而性能卻不一定是翻倍的, 顯然是加主機(jī)更合理一點(diǎn)
2. 集群類型
LB: 負(fù)載均衡 load banlancing
HA: 高可用性 high availability
? availability: 90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%
HP: 高性能 high performancing
大規(guī)模并行處理集群
3. 對(duì)于一個(gè)穩(wěn)定的系統(tǒng)來(lái)講, 需要注意以下四點(diǎn):
- 可擴(kuò)展性
- 可用性
- 容量 ( 容納量)
- 性能 (單位時(shí)間內(nèi)的通過(guò)量 --> 響應(yīng)時(shí)間)
4. 系統(tǒng)運(yùn)維的技術(shù)方向:
可用 --> 標(biāo)準(zhǔn)化 --> 自動(dòng)化
5. 構(gòu)建高擴(kuò)展性系統(tǒng)的重要原則:
在系統(tǒng)內(nèi)部盡量避免串行化和交互
6. GSLB與SLB
- Global Service Load Balancing (全局)
- Service Load Balancing (本地)
7. 總結(jié)
- 分層
- 分割
- 分布式
- 分布式應(yīng)用
- 分布式靜態(tài)資源
- 分布式數(shù)據(jù)和存儲(chǔ)
- 分布式計(jì)算 (hadoop)
8. LB集群的實(shí)現(xiàn)
硬件:
- F5, BIG-IP
- Citrix --> NetScaler
- A10 --> A10
- Array
- Redware
軟件:
- lvs
- haproxy
- nginx
- ats (apache traffic server)
- perlbal
9. 基于工作的協(xié)議層次劃分:
傳輸層:
? lvs, haproxy (mode tcp)
應(yīng)用層:
? haproxy, nginx, ats, perlbal
二. LVS
1. lvs
linux virtual server
l4: 四層交換, 四層路由
根據(jù)報(bào)文的目標(biāo)ip和port將其轉(zhuǎn)發(fā)至后端主機(jī)集群中的某一臺(tái)主機(jī)(根據(jù)挑選算法)
netfilter:
? PREROUTING --> INPUT (lvs在這一條鏈上做了操作, 強(qiáng)行轉(zhuǎn)發(fā)至POSTROUTING)
? PREROUTING --> FORWARD --> POSTROUTING
? OUTPUT --> POSTROUTING
2. lvs具體實(shí)現(xiàn)
ipvsadm/ipvs
ipvsadm:
? 用戶空間的命令行工具, 用于管理集群服務(wù)
ipvs:
? 工作在內(nèi)核netfilter INPUT鉤子上
如何驗(yàn)證內(nèi)核是否支持lvs功能?
? grep -i -A 10 'ipvs' /boot/config*
支持TCP, UDP, AH, ESP, AH_ESP, SCTP等諸多協(xié)議
3. lvs arch:
? 調(diào)度器: director, dispatcher, balancer
? RS: real server
? 一些簡(jiǎn)稱:
? client ip: CIP
? director virtual ip: VIP
? director ip: DIP
? real server ip: RIP
4. lvs type
- lvs-nat
- lvs-tun (ip tunneliing)
- lvs-fullnat (keepalived)
- lvs-dr (direct routing)
5. lvs-nat
? 多目標(biāo)的DNAT(iptables)
? 通過(guò)修改請(qǐng)求報(bào)文的ip地址(同時(shí)可能會(huì)修改目標(biāo)端口)至挑選出來(lái)的某real server的RIP地址實(shí)現(xiàn)轉(zhuǎn)發(fā)
? RIP和DIP必須在同一網(wǎng)段
? (1) RS應(yīng)和DIP使用私有地址, 且RS的網(wǎng)關(guān)要指向DIP
? (2) 請(qǐng)求和相應(yīng)的報(bào)文均要經(jīng)由director轉(zhuǎn)發(fā), 在較高負(fù)載均衡中, director可能成為瓶頸
? (3) 支持端口映射
? (4) RS可使用任意OS
? (5) RS的RIP和director的DIP必須在同一網(wǎng)絡(luò)
6. lvs-dr
? direct routing (director與RS必須在同一物理網(wǎng)絡(luò))
? 通過(guò)修改請(qǐng)求報(bào)文的目標(biāo)MAC地址進(jìn)行轉(zhuǎn)發(fā)
? (1) 保證前端路由器將目標(biāo)ip為VIP的請(qǐng)求報(bào)文發(fā)送給director
? 解決方案:
? 靜態(tài)綁定
? arptables
? 修改RS主機(jī)內(nèi)核參數(shù)
? (2) RS的RIP可使用私網(wǎng)或者公網(wǎng)地址
? (3) RS和director必須在同一物理網(wǎng)絡(luò)
? (4) 請(qǐng)求報(bào)文經(jīng)由director調(diào)度, 但響應(yīng)報(bào)文一定不經(jīng)由director
? (5) 不支持端口映射
? (6) RS可以使大多是OS
? (7) RS的網(wǎng)關(guān)不能指向DIP
7. lvs-tun
? 不修改請(qǐng)求報(bào)文的首部, 而是在原有的ip首部 (cip -> vip)之外, 再封裝一個(gè)ip首部 (dip -> rip)
? (1) RIP, DIP, VIP全是公網(wǎng)地址
? (2) RS的網(wǎng)關(guān)不能指向DIP
? (3) 請(qǐng)求報(bào)文必須經(jīng)由director調(diào)度, 但響應(yīng)報(bào)文一定不經(jīng)由director
? (4) 不支持端口映射
? (5) RS的OS必須支持隧道功能
8. lvs-fullnat
? director通過(guò)同時(shí)修改請(qǐng)求報(bào)文的目標(biāo)地址和源地址進(jìn)行轉(zhuǎn)發(fā)
? (1) VIP: 公網(wǎng)地址. RIP和DIP: 私網(wǎng)地址, 且兩者必須在同一網(wǎng)絡(luò)中
? (2) RS接收到請(qǐng)求報(bào)文的源地址為DIP, 因此要相應(yīng)給DIP
? (3) 請(qǐng)求和相應(yīng)都經(jīng)過(guò)director
? (4) 支持端口映射
? (5) RS可使用任意OS
9. http (stateless)
? session保持:
? session綁定:
? source ip hash
? cookie
? session集群(復(fù)制)
? session服務(wù)器 (共享存儲(chǔ), 持久存儲(chǔ))
10. lvs scheduler
靜態(tài)方法:
? 僅根據(jù)算法本身進(jìn)行調(diào)度
- RR: round robin 輪循
- WRR: weight round robin 加權(quán)輪循
- SH: source hash 實(shí)現(xiàn)session保持的機(jī)制(有損負(fù)載均衡)
- 將來(lái)自同一ip的請(qǐng)求始終調(diào)度至同一RS
- DH: destination hash
- 將對(duì)同一個(gè)目標(biāo)的請(qǐng)求始終發(fā)送至同一個(gè)RS
動(dòng)態(tài)方法:
? 根據(jù)算法及RS當(dāng)前的負(fù)載狀態(tài)進(jìn)行調(diào)度
? 當(dāng)前負(fù)載: overhead
- LC: least connection
- overhead = active * 256 + inactive
- WLC: weight least connection
- overhead = (active * 256 + inactive) / weight
- weight: 當(dāng)前服務(wù)器的權(quán)重
- SED: shorted expection delay 最短預(yù)期延遲
- overhead = (active + 1) * 256 / weight
- NQ: never queue
- SED算法的改進(jìn), 類似于 RR + SED
- LBLC: locality-based LC 基于本地的最少連接
- 動(dòng)態(tài)的DH算法, 正向代理情況下的cache server調(diào)度
- LBLCR: locality-based least connection with replication
- 帶復(fù)制的LBLC算法
11. ipvsadm集群服務(wù):
ipvsadm作用:
管理集群服務(wù)
管理集群中的RS
(1) 一個(gè)ipvs主機(jī)可同時(shí)定義多個(gè)cluser service
? tcp, udp
(2) 一個(gè)cluser service上至少應(yīng)該有一個(gè)real server
? 定義時(shí): 指明lvs-type以及l(fā)vs scheduler
一些基本概念以及命令中的用法:
service-address 集群服務(wù)地址
? tcp: -t ip:port
? udp: -u ip:port
? fwm: -f mark (用作防火墻標(biāo)記)
server-address RS地址
? ip[:port]
lvs-type:
? -g: gateway, dr (默認(rèn))
? -i: ipip, tun
? -m: masquerade, nat
-s scheduler
? 默認(rèn)為WLC
FWM:
# 將兩種集群定義成一個(gè)進(jìn)行調(diào)度(功用: 將共享一組RS的集群服務(wù)器統(tǒng)一進(jìn)行定義):
# OSTROUTING:
# -j MARK --set-mark 10
# ipvs:
# -A -f 10
# 示例: 在director的netfilter的mangle表的PREROUTING定義"打標(biāo)"規(guī)則
# 先打標(biāo)記:
iptables -t mangle -A PREROUTING -d 192.168.0.10 -p tcp --dport 80 -j MARK --set-mark 10
# 上面的192.168.0.1為VIP
iptables -t mangle -L -n
# 再定義集群服務(wù):
ipvsadm -A -f 10 -s rr
ipvsadm -a -f 10 -r 172.16.100.21 -g
ipvsadm -a -f 10 -r 172.16.100.22 -g
# 最后:
iptables -t mangle -A PREROUTING -d 192.168.0.10 -p tcp --dport 22 -j MARK --set-mark 10
管理集群服務(wù):
ipvsadm -A|E -t|u|f service-address [-s scheduler]
ipvsadm -D -t|u|f service-address
ipvsadm -C # 清空集群服務(wù)和集群服務(wù)中的RS
ipvsadm -L|l [options]
管理集群服務(wù)中的RS:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -C # 清空集群服務(wù)和集群服務(wù)中的RS
ipvsadm -L|l [options]
保存和重載:
ipvsadm -S [-n]
ipvsadm -R
置零計(jì)數(shù)器:
ipvsadm -Z [-t|u|f service-address]