1 集群的概念
- Cluster的概念
- 當(dāng)系統(tǒng)的性能實(shí)在是不夠用,一般的系統(tǒng)的擴(kuò)展方式
Scale Up: 向上擴(kuò)展,增強(qiáng)
Scale Out: 向外擴(kuò)展,增加設(shè)備,但是存在調(diào)度問題
Cluster: 集群,為解決某個特定的問題將多臺計(jì)算機(jī)組合起來形成的單個系統(tǒng)
Linux Cluster類型:
LB: Load Balancing, 負(fù)載均衡
HA: High Availiablity,高可用,解決SPOF(Single Point Of Failuer)單點(diǎn)故障
HPC: High-performance computing,高性能計(jì)算
分布式系統(tǒng):
分布式存儲:云盤
分布式計(jì)算: hadoop, Spark
- Cluster 的分類
硬件:
F5 Big-IP
Citrix Netscaler
A10
軟件:
LVS: Linux Virtual Server
nginx: 支持四層調(diào)度
haproxy:支持四層調(diào)度
基于工作的協(xié)議層次劃分:
傳輸層(通用):DPORT
lvs,nginx(stream),haproxy(mode tcp)
應(yīng)用層(專用):對特定的協(xié)議
proxy server(代理服務(wù)器)
http: nginx, httpd, haproxy(mode http)
fastcgi: nginx, httpd
mysql: mysql-proxy
- 與Cluster相關(guān)的一些問題及解決
會話保持: 負(fù)載均衡
1 session sticky: 同一個用戶調(diào)度固定的服務(wù)器
Source IP: LVS sh 算法(對特定的服務(wù)而言)
Cookie
2 session replication: 每一臺擁有的全部的session
session multicast cluster
3 session server: 專門的session服務(wù)器
Memcached, Redis
HA集群實(shí)現(xiàn)方案:
keepalived:基于 vrrp(虛擬冗余路由協(xié)議)
ais:application interface standard(應(yīng)用接口規(guī)范)
heartbeat, cman+rgmanager, corosync+pacemaker
2 LVS的介紹
- LVS: Linux Virtual Server,負(fù)載調(diào)度器,集成內(nèi)核(在netfileter的框架上),由章文嵩研發(fā)
lvs:基于四層調(diào)度,根據(jù)一定的算法將客戶端的請求分發(fā)給后端的服務(wù)器
工作原理: VS根據(jù)請求的報(bào)文的目標(biāo)IP和目標(biāo)協(xié)議及端口將其調(diào)度轉(zhuǎn)發(fā)到某RS,根據(jù)調(diào)度算法來挑選RS
iptables/netfilter:
iptables:用戶空間的管理工具
netfileter: 內(nèi)核空間的框架
流入: PREROUTING --> INPUT
流出: OUTPUT --> POSTROUTING
轉(zhuǎn)發(fā): PREROUTING --> FORWARD --> POSTROUTING
查看內(nèi)核是否支持ipvs
grep -i -A 20 'ipvs' /boot/config-xxx
- LVS的概念:
- LVS中的一些術(shù)語
VS: VIrtual Server,Director Server(DS)
Dispatcher(調(diào)度器),Load Balancer
RS: Real Server(lvs), upstream server(在nginx中叫), backend server(在haproxy叫)
CIP: Client IP
VIP: Virtual server IP VS外網(wǎng)的IP
DIP: Direcor IP VS內(nèi)網(wǎng)的IP
RIP: Real server IP 真是服務(wù)器的IP地址
訪問流程: CIP <--> VIP==DIP <-->RIP
- LVS 集群的類型:
lvs: ipvsadm/ipvs
ipvsadm: 用戶空間的命令行工具,規(guī)則管理器,用于管理集群服務(wù)及RealServer
ipvs: 工作于內(nèi)核空間netfilter的INPUT鉤子上的框架
支持的協(xié)議: tcp udp ah_esp esp ah sctp
lvs集群的類型:
lvs-nat: 修改請求報(bào)文的目標(biāo)IP,多目標(biāo)IP的DNAT
lvs-dr: 操縱封裝新的MAC地址
lvs-tun: 在原請求IP報(bào)文之外新加一個IP首部
lvs-fullnat: 修改請求報(bào)文的源和目標(biāo)
- lvs-nat
lvs-nat
多目標(biāo)DNAT(iptables) 他通過修改報(bào)文的目標(biāo)IP地址(同時可能會修改目標(biāo)端口)至挑選出來某RS的RIP地址實(shí)現(xiàn)轉(zhuǎn)發(fā)
1 RS 應(yīng)該使用私有網(wǎng)絡(luò)地址最盅,且RS的網(wǎng)關(guān)指向DIP(DIP和RIP之間可以使用路由器)
2 請求和相應(yīng)報(bào)文都要經(jīng)由director轉(zhuǎn)發(fā)奥额,極高負(fù)載的場景中慨灭,director可能會成為系統(tǒng)瓶頸
3 支持端口映射
4 RS 可以使用任意操作系統(tǒng)
5 RS的RIP和Director的DIP在同一IP網(wǎng)絡(luò),也可以不在同一個網(wǎng)段
- lvs-dr
1 保證前端路由器將目標(biāo)IP為VIP的請求報(bào)文發(fā)送給director
解決方案
靜態(tài)綁定
arptables 后臺主機(jī)不能使windows
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
修改RS主機(jī)內(nèi)核參數(shù)
arp_announce
arp_ignore
2 RS的RIP可以使用私有地址,但是也可以使用公網(wǎng)地址
3 RS跟Director必須在同一物理網(wǎng)絡(luò)中
4 請求報(bào)文經(jīng)由Director 調(diào)度,但響應(yīng)報(bào)文一定不能經(jīng)由Director;
5 不支持端口映射
6 RS 可以是大多數(shù)操作系統(tǒng)
7 RS的網(wǎng)關(guān)不能指向DIP
- lvs-tun
轉(zhuǎn)發(fā)方式:不修改請求報(bào)文的IP首部(源IP為CIP,目標(biāo)IP為VIP),而在原IP報(bào)文之外再封裝一個IP首部(源IP是DIP,目標(biāo)IP是RIP),將報(bào)文發(fā)往挑選出的目標(biāo)RS;RS直接響應(yīng)給客戶端(源IP是VIP,目標(biāo)IP是CIP)
(1) DIP, VIP, RIP都應(yīng)該是公網(wǎng)地址
(2) RS的網(wǎng)關(guān)不能,也不可能指向DIP
(3) 請求報(bào)文要經(jīng)由Director,但響應(yīng)不能經(jīng)由Director
(4) 不支持端口映射
(5) RS的OS須支持隧道功能
- lvs-fullnat: 這種類型kernel不支持,所以也就不做介紹了
-
LVS工作模式的總結(jié)
lvs-nat與lvs-fullnat:請求和響應(yīng)報(bào)文都經(jīng)由Director
lvs-nat: DIP的網(wǎng)關(guān)指向DIP
lvs-fullnat: DIP和RIP未必在同一個網(wǎng)絡(luò),但要能夠通信
lvs-dr與lvs-tun:請求報(bào)文要經(jīng)由Director,但響應(yīng)報(bào)文由RS直接發(fā)往Client
lvs-dr: 通過封裝新的MAC首部實(shí)現(xiàn),通過MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā)
lvs-tun: 通過在原IP報(bào)文封裝新的IP頭,實(shí)現(xiàn)轉(zhuǎn)發(fā),支持遠(yuǎn)程通信
- ipvs scheduler: lvs的調(diào)度算法
根據(jù)是否考慮各個RS的負(fù)載狀態(tài),可分為兩種:動態(tài)算法和靜態(tài)算法
靜態(tài)算法:四種
1 RR: roundrobin,輪訓(xùn)
2 WRR: weight RR, 加權(quán)的輪訓(xùn)
3 SH: source hashing,實(shí)現(xiàn) session sticky,源地址hash,將來自統(tǒng)一個IP的地址的請求始終發(fā)送給第一次挑中的RS,從而實(shí)現(xiàn)會話綁定,粒度比較粗
4 DH: destination hashing: 目標(biāo)地址hash,將發(fā)往同一個目標(biāo)地址的請求始終發(fā)至第一次挑中的RS,典型的場景是正向代理緩存場景中的負(fù)載均衡
動態(tài)算法:
1 LC: least connections 適用于長連接使用 overhead=active*256+inactiveconns
2 WLC: weight LC: 默認(rèn)調(diào)度算法 overhead=(activeconns*256+inactiveconns)/weight
3 SED: shortest Expection Delay: 初始連接權(quán)重優(yōu)先 overhead=(activeconns+1)*256/weight
4 NQ: nerver queue: 第一次均勻分配,后續(xù)SED
5 LBLC: locality-based lc,動態(tài)的DH算法,場景:根據(jù)負(fù)載狀態(tài)實(shí)現(xiàn)正向代理
6 LBLCR: LBLC with Replication,帶復(fù)制功能的LBLC,解決LBLC不均勻問題,從負(fù)載重的復(fù)制到負(fù)載輕的RS
- ipvsadm
ipvsadm 用法同iptables
管理集群服務(wù)
ipvsadm -A|E -t|u|f service-address [-s scheduler] E 修改
ipvsadm -D -t|u|f service-address
service-address
tcp: -t ip:port
udp: -u ip:port
fwm: -f mark
-s scheduler
管理集群服務(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
server-address
ip:port
lvs-type 要注意使用 什么模型
-g gateway dr
-i ipip tun
-m masquerade,nat
清空和查看
ipvsadm -C
ipvsadm -L|l [options]
-n numberic 基于數(shù)字格式顯示地址和端口
-c connetcion 顯示ipvs連接
--rate 速率
--stats 統(tǒng)計(jì)數(shù)據(jù)
--exact 精確值
保存和重載
ipvsadm -R
ipvsadm -S [n]
置零計(jì)數(shù)器
ipvsadm -Z [-t|u|f service-address]
3 LVS的實(shí)現(xiàn)
-
lvs-nat
1 布置此環(huán)境的時候,使用linux的主機(jī)進(jìn)行實(shí)現(xiàn)
2 route的轉(zhuǎn)發(fā)的功能需要實(shí)現(xiàn),Director的核心轉(zhuǎn)發(fā)就不需要打開
3 將RIP1和RIP2的網(wǎng)關(guān)指向DIP
4 然后在Director上寫轉(zhuǎn)發(fā)規(guī)則
5 在各RS布置上服務(wù)如,mysql或httpd的服務(wù)
6 在Director上寫規(guī)則,使用的是mysql和http并且是使用的輪訓(xùn)的算法
ipvsadm -A -t 192.168.8.3:80 -s rr
ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.71:80 -m -w 1
ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.72:80 -m -w 2
ipvsadm -A -t 192.168.8.3:3306 -s rr
ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.71:3306 -m -w 1
ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.72:3306 -m -w 2
- lvs-dr
DIP和VIP是同網(wǎng)段的地址,如果用到生產(chǎn)環(huán)境,會需要很多的公網(wǎng)IP
1 布置此環(huán)境的時候,使用linux的主機(jī)進(jìn)行實(shí)現(xiàn)
2 ,Director,route的轉(zhuǎn)發(fā)的功能需要實(shí)現(xiàn)
3 將Director,RIP1和RIP2的網(wǎng)關(guān)指向router 2
4 在各個RS的服務(wù)器上修改內(nèi)核參數(shù)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 172.18.23.100/32 broadcast 172.18.23.100 up
route add -host 172.18.23.100 dev lo:0
5 在Director上配置IP地址
ifconfig ens33 172.18.23.100/32 broadcast 172.18.23.100 up
route add -host 172.18.23.100 dev ens33
6 在Director上寫ipvs規(guī)則
ipvsadm -A -t 172.18.23.100:80 -s rr
ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.71:80 -g -w 1
ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.72:80 -g -w 2
ipvsadm -A -t 172.18.23.100:3306 -s rr
ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.71:80 -g -w 1
ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.72:80 -g -w 2
DIP和VIP是同網(wǎng)段的地址,可以使用內(nèi)網(wǎng)IP
1 布置此環(huán)境的時候,使用linux的主機(jī)進(jìn)行實(shí)現(xiàn)
2 Director,router的轉(zhuǎn)發(fā)的功能需要實(shí)現(xiàn),并且router上還應(yīng)當(dāng)有192.168.80.0/24地址,否則可能會有問題
3 將Director,RIP1和RIP2的網(wǎng)關(guān)指向router 2
4 在各個RS的服務(wù)器上修改內(nèi)核參數(shù)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 192.168.8.8/32 broadcast 192.168.8.8 up
route add -host 192.168.8.8 dev lo:0
5 在Director上配置IP地址
ifconfig ens33 192.168.8.8/32 broadcast 192.168.8.8 up
route add -host 192.168.8.8 dev ens33
6 這種方式,需要在前段路由器上添加一條路由規(guī)則,執(zhí)行vip,通過route2 的網(wǎng)卡
7 在Director上寫規(guī)則
ipvsadm -A -t 192.168.8.8 -s rr
ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.71:80 -g -w 1
ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.72:80 -g -w 2
ipvsadm -A -t 192.168.8.8:3306 -s rr
ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.71:80 -g -w 1
ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.72:80 -g -w 2
對于上面三種lvs的實(shí)現(xiàn):可以使用FWM即:基于防火墻標(biāo)記進(jìn)行統(tǒng)一調(diào)度,請自行進(jìn)行調(diào)節(jié)
iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 80 -j MARK 10
iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 3306 -j MARK 10
ipvsadm -A -f 10 rr
ipvsadm -a -f 10 -r 172.18.23.71 -g
ipvsadm -a -f 10 -r 172.18.23.72 -g