一京痢、簡(jiǎn)述Linux集群類(lèi)型、系統(tǒng)擴(kuò)展方式及調(diào)度方法
1.概念
Linux cluster拧略,Linux集群系統(tǒng)是一種計(jì)算機(jī)系統(tǒng)诅愚, 它通過(guò)一組松散集成的計(jì)算機(jī)軟件和/或硬件連接起來(lái)高度緊密地協(xié)作完成計(jì)算工作。一個(gè)集群(cluster)就是一組計(jì)算機(jī)拴测,它們作為一個(gè)整體向用戶(hù)提供一組網(wǎng)絡(luò)資源乓旗。這些單個(gè)的計(jì)算機(jī)系統(tǒng)就是集群的節(jié)點(diǎn)(node)。一個(gè)理想的集群集索,用戶(hù)是不會(huì)意識(shí)到集群系統(tǒng)底層的節(jié)點(diǎn)的屿愚。在他們看來(lái),集群是一個(gè)系統(tǒng)务荆,而非多個(gè)計(jì)算機(jī)系統(tǒng)妆距。并且集群系統(tǒng)的管理員可以隨意增加和刪改集群系統(tǒng)的節(jié)點(diǎn)。
Linux 集群系統(tǒng)的優(yōu)點(diǎn)在于:
(1)高擴(kuò)展性函匕,管理員可自行增加或刪除集群系統(tǒng)中的節(jié)點(diǎn)娱据。
(2)高可用性,當(dāng)集群中某一個(gè)節(jié)點(diǎn)失效時(shí)盅惜,其負(fù)責(zé)的任務(wù)可以傳遞給其他節(jié)點(diǎn)吸耿,因此能夠有效防止單點(diǎn)失效。
(3)高性能酷窥,負(fù)載均衡的集群系統(tǒng)能夠同時(shí)接入更多的用戶(hù)咽安。
(4)高性?xún)r(jià)比,可以使用廉價(jià)的硬件構(gòu)造出高性能的系統(tǒng)蓬推。
2. Linux Cluster類(lèi)型
(1)LB:Load Balancing妆棒,負(fù)載均衡;
提供和節(jié)點(diǎn)個(gè)數(shù)成正比的負(fù)載能力沸伏,這種集群很適合提供大訪問(wèn)量的Web服務(wù)糕珊。負(fù)載均衡集群往往也具有一定的高可用性特點(diǎn)。Turbolinux Cluster Server毅糟、Linux Virtual Server都屬于負(fù)載均衡集群红选。主流架構(gòu)Nginx+Keepalived(利于動(dòng)靜分離)、LVS+Keepalived姆另。
(2)HA:High Availiablity喇肋,高可用集群坟乾;
一般是指當(dāng)集群中有某個(gè)節(jié)點(diǎn)失效的情況下,其上的任務(wù)會(huì)自動(dòng)轉(zhuǎn)移到其他正常的節(jié)點(diǎn)上蝶防。還指可以將集群中的某節(jié)點(diǎn)進(jìn)行離線維護(hù)再上線甚侣,該過(guò)程并不影響整個(gè)集群的運(yùn)行。計(jì)思想就是要最大限度地減少服務(wù)中斷時(shí)間间学。這類(lèi)集群中比較著名的有Turbolinux TurboHA殷费、Heartbeat、Kimberlite等低葫。
高可用集群一般是通過(guò)系統(tǒng)的可靠性(reliability)和系統(tǒng) 的可維護(hù)性(maintainability)來(lái)衡量的详羡。通常用平均無(wú)故障時(shí)間(MTTF)來(lái)衡量系統(tǒng)的可靠性,用平均維護(hù) 時(shí)間(MTTR)來(lái)衡量系統(tǒng)的可維護(hù)性嘿悬。因此实柠,一個(gè)高可用集群服務(wù)可以這樣來(lái)定義:
A=MTBF平均故障間隔時(shí)間/(MTBF平均故障間隔時(shí)間+MTTR平均恢復(fù)時(shí)間)
(0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%
一般高可用集群的標(biāo)準(zhǔn)有如下幾種:
99%:表示 一年不在線時(shí)間不超過(guò)87小時(shí)
99.9% :表示一年不在線時(shí)間不超過(guò)8.7小時(shí)
99.99%: 表示一年不在線時(shí)間不超過(guò)1小時(shí)
99.999% :表示一年不在線時(shí)間不超過(guò)3-5分鐘
(3)HP:High Performance,高性能集群鹊漠;
HPCC高性能計(jì)算集群也稱(chēng)為DAS(數(shù)據(jù)分析超級(jí)計(jì)算機(jī))
(4)分布式系統(tǒng)集群:
分布式存儲(chǔ):分布式存儲(chǔ)是一種數(shù)據(jù)存儲(chǔ)技術(shù)主到,通過(guò)網(wǎng)絡(luò)使用企業(yè)中的每臺(tái)機(jī)器上的磁盤(pán)空間,在元數(shù)據(jù)服務(wù)器做索引躯概,并將這些分散的存儲(chǔ)資源構(gòu)成一個(gè)虛擬的存儲(chǔ)設(shè)備登钥,數(shù)據(jù)分散的存儲(chǔ)在企業(yè)的各個(gè)角落。
分布式計(jì)算:分布式計(jì)算是一種計(jì)算方法娶靡,和集中式計(jì)算是相對(duì)的牧牢。隨著計(jì)算技術(shù)的發(fā)展,有些應(yīng)用需要非常巨大的計(jì)算能力才能完成姿锭,如果采用集中式計(jì)算塔鳍,需要耗費(fèi)相當(dāng)長(zhǎng)的時(shí)間來(lái)完成。分布式計(jì)算將該應(yīng)用分解成許多小的部分呻此,分配給多臺(tái)計(jì)算機(jī)進(jìn)行處理轮纫。這樣可以節(jié)約整體計(jì)算時(shí)間,大大提高計(jì)算效率焚鲜。
3. 系統(tǒng)擴(kuò)展類(lèi)型
常見(jiàn)的系統(tǒng)擴(kuò)展類(lèi)型有:
scale up(向上擴(kuò)展):利用現(xiàn)有的硬件資源掌唾,通過(guò)增加硬件資源來(lái)滿(mǎn)足日益增長(zhǎng)的性能消耗的需求,但是此方式通常來(lái)說(shuō)能提升的性能有限忿磅。
scale out(向外擴(kuò)展):通過(guò)硬件或軟件的方式糯彬,將以往由單一服務(wù)器負(fù)責(zé)的業(yè)務(wù)需求分配到其他節(jié)點(diǎn)的服務(wù)器上進(jìn)行處理,但是從用戶(hù)的視角來(lái)看葱她,這些服務(wù)器是單一的系統(tǒng)撩扒。而lvs集群的擴(kuò)展方式正是屬于scale out。
4. 負(fù)載均衡集群實(shí)現(xiàn):
4.1吨些、硬件設(shè)備實(shí)現(xiàn)負(fù)載均衡:
- F5公司的 Big-IP產(chǎn)品: 性能好價(jià)格高
- Citrix公司的 Netscaler產(chǎn)品
- A10 公司的A10產(chǎn)品
4.2搓谆、軟件實(shí)現(xiàn)負(fù)載均衡:
- lvs:Linux Virtual Server虛擬服務(wù)炒辉,不處理服務(wù),而是轉(zhuǎn)到其他地方處理
- nginx偽四層調(diào)度
- haproxy
- ats:apache traffic server 雅虎公司的開(kāi)源項(xiàng)目
- perlbal
- pound
4.3挽拔、基于工作的協(xié)議層次劃分:
(1)傳輸層調(diào)度器(通用):(DPORT)
- lvs:基于udp辆脸、tcp調(diào)度
- nginx:stream模塊用來(lái)模擬四層調(diào)度
- haproxy:mode tcp模塊用來(lái)模擬四層調(diào)度
(2)應(yīng)用層調(diào)度器(專(zhuān)用):(自定義的請(qǐng)求模型分類(lèi))
proxy server:
- http:nginx(使用http的模塊), httpd, haproxy(使用http的模塊)
- fastcgi:nginx, httpd, ...
- mysql:ProxySQL, ...
4.4但校、集群的站點(diǎn)指標(biāo):
- PV:Page View頁(yè)面瀏覽量
- UV:Unique Vistor單獨(dú)瀏覽者
4.5螃诅、集群的會(huì)話(huà)保持問(wèn)題:
為了對(duì)訪問(wèn)用戶(hù)的追蹤
(1) session sticky會(huì)話(huà)綁定
Source IP-----基于原ip識(shí)別原用戶(hù)
Cookie----基于原Cookie識(shí)別原用戶(hù)(2) session replication;復(fù)制集群
session cluster會(huì)話(huà)集群(3) session server指定一臺(tái)專(zhuān)門(mén)儲(chǔ)存會(huì)話(huà)的服務(wù)器
5.Lvs集群調(diào)度算法
常見(jiàn)的lvs集群的調(diào)度算法分為靜態(tài)調(diào)度算法和動(dòng)態(tài)調(diào)度算法。
5.1状囱、 靜態(tài)調(diào)度算法:根據(jù)算法本身進(jìn)行調(diào)度术裸;
rr:roundrobin,輪詢(xún)亭枷,調(diào)度器將外部請(qǐng)求輪流分配到集群中的節(jié)點(diǎn)中袭艺。
wrr:Weighted RR,加權(quán)輪詢(xún)叨粘,調(diào)度器根據(jù)事先設(shè)置的權(quán)重來(lái)分配外部請(qǐng)求到集群中的節(jié)點(diǎn)猾编。
sh:Source Hashing,實(shí)現(xiàn)session sticky升敲,源IP地址hash答倡;將來(lái)自于同一個(gè)IP地址的請(qǐng)求始終發(fā)往第一次挑中的真實(shí)服務(wù)器Ip,從而實(shí)現(xiàn)會(huì)話(huà)綁定驴党;
dh:Destination Hashing瘪撇;目標(biāo)地址哈希,將發(fā)往同一個(gè)目標(biāo)地址的請(qǐng)求始終轉(zhuǎn)發(fā)至第一次挑中的真實(shí)服務(wù)器IP港庄,典型使用場(chǎng)景是正向代理緩存場(chǎng)景中的負(fù)載均衡倔既;
5.2、動(dòng)態(tài)算法:
前端的調(diào)度器會(huì)根據(jù)后端真實(shí)服務(wù)器的實(shí)際連接情況來(lái)分配請(qǐng)求
(1)鹏氧、LC:最少連接(Least Connections)
調(diào)度器通過(guò)“最少連接”調(diào)度算法動(dòng)態(tài)的將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已經(jīng)建立連接最少的服務(wù)器上渤涌,如果集群的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用“最小連接”調(diào)度算法可以更好地均衡負(fù)載
(2)把还、WCL:加權(quán)最小連接(Weighted Least Connections)
在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下实蓬,調(diào)度器采用加權(quán)最小連接的調(diào)度算法來(lái)優(yōu)化負(fù)載均衡,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)負(fù)載連接笨篷,
(3)瞳秽、SED:最短延遲調(diào)度(Shortest Expected Delay)
在WCL的基礎(chǔ)上改進(jìn),Overhead=(ACTIVE+1)*256/加權(quán)率翅,不再考慮非活動(dòng)狀態(tài)练俐,把當(dāng)前處于活動(dòng)狀態(tài)的數(shù)目+1來(lái)實(shí)現(xiàn),數(shù)目最小的接受下次請(qǐng)求冕臭,+1的目的是為為了考慮加權(quán)的時(shí)候腺晾,非活動(dòng)連接過(guò)多的缺陷燕锥,當(dāng)權(quán)限過(guò)大的時(shí)候,會(huì)導(dǎo)致空閑服務(wù)器一直處于無(wú)連接的狀態(tài)
(4)悯蝉、NQ:永不排隊(duì)/最少列隊(duì)調(diào)度(NEVER Queue Scheduling)
無(wú)需列隊(duì)归形,如果有臺(tái)realserver的連接數(shù)=0直接就分配過(guò)去,不需要進(jìn)行sed運(yùn)算鼻由,保證不會(huì)有一個(gè)主機(jī)很空閑暇榴,在SED的基礎(chǔ)上不論+幾,第二次一定給下一個(gè)蕉世,不考慮非活動(dòng)連接蔼紧,才會(huì)用NQ,SED要考慮活動(dòng)狀態(tài)連接狠轻,對(duì)于DNS的UDP不需要考慮非活動(dòng)連接奸例,而http的處于保持狀態(tài)就需要考慮非活動(dòng)連接給服務(wù)器的壓力
(5)、LBLC:基于局部性的最少連接(localibty-Based Least Connections)
基于局部性的最少連接調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡向楼,目前主要運(yùn)行在Cache集群系統(tǒng)查吊。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用而且沒(méi)有超載湖蜕,將請(qǐng)求發(fā)送到該服務(wù)器逻卖,若i服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載重荠,則用最少連接的原則選出一個(gè)可用的服務(wù)器箭阶,將請(qǐng)求發(fā)送到該服務(wù)器
(6)、LBLCR:帶復(fù)制性的基于局部性最少連接(Local-Based Least Connections With Replication)
帶復(fù)制性的基于局部性最少連接調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡戈鲁,目前主要用在Cache集群系統(tǒng)仇参。它和LBLC算法不同的是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP到一臺(tái)服務(wù)器的映射婆殿,該算法根據(jù)一請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組诈乒,按照最小連接原則服務(wù)器組中選一臺(tái)服務(wù)器,若服務(wù)器沒(méi)有超載婆芦,將請(qǐng)求發(fā)送到該服務(wù)器怕磨,若服務(wù)器超載,則按照最小連接原則從這個(gè)集群中選出一臺(tái)服務(wù)器消约,將該服務(wù)器加到服務(wù)組中肠鲫,將請(qǐng)求發(fā)送到該服務(wù)器,同時(shí)當(dāng)該組服務(wù)器有一段時(shí)間沒(méi)有被修改或粮,將最忙的服務(wù)器從服務(wù)組刪除导饲,以降低復(fù)制的程度。
二、簡(jiǎn)述lvs四種集群有點(diǎn)及使用場(chǎng)景
1渣锦、lvs集群的類(lèi)型:
- lvs-nat:修改請(qǐng)求報(bào)文的目標(biāo)IP硝岗;多目標(biāo)IP的DNAT;
- lvs-dr:操縱封裝新的MAC地址袋毙;
- lvs-tun:在原請(qǐng)求IP報(bào)文之外新加一個(gè)IP首部,兩級(jí)ip型檀,隧道邏輯;
-
lvs-fullnat:修改請(qǐng)求報(bào)文的源和目標(biāo)IP听盖;
2胀溺、lvs-nat:
lvs-nat
多目標(biāo)IP的DNAT,通過(guò)將請(qǐng)求報(bào)文中的目標(biāo)地址和目標(biāo)端口修改為某挑出的RS的RIP和PORT實(shí)現(xiàn)轉(zhuǎn)發(fā)媳溺;
(1)RIP和DIP必須在同一個(gè)IP網(wǎng)絡(luò)月幌,且應(yīng)該使用私網(wǎng)地址碍讯;RS的網(wǎng)關(guān)要指向DIP悬蔽;
(2)請(qǐng)求報(bào)文和響應(yīng)報(bào)文都必須經(jīng)由Director轉(zhuǎn)發(fā);Director易于成為系統(tǒng)瓶頸捉兴;
(3)支持端口映射蝎困,可修改請(qǐng)求報(bào)文的目標(biāo)PORT;
(4)vs必須是Linux系統(tǒng)倍啥,rs可以是任意系統(tǒng)禾乘; - 使用場(chǎng)景:小并發(fā)的實(shí)驗(yàn)性應(yīng)用、mysql集群
-
lvs-dr:lvs-dr
Direct Routing虽缕,直接路由始藕;
通過(guò)為請(qǐng)求報(bào)文重新封裝一個(gè)MAC首部進(jìn)行轉(zhuǎn)發(fā),源MAC是DIP所在的接口的MAC氮趋,目標(biāo)MAC是某挑選出的RS的RIP所在接口的MAC地址伍派;源IP/PORT,以及目標(biāo)IP/PORT均保持不變剩胁;
Director和各RS都得配置使用VIP;
<1> 確保前段路由器將目標(biāo)ip為VIP的請(qǐng)求報(bào)文發(fā)往Director诉植,有以下三種方式:
在前端網(wǎng)關(guān)做靜態(tài)綁定
在RS上使用arptables;
在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級(jí)別昵观;
<2> RS的RIP可以使用私網(wǎng)地址晾腔,也可以使用公網(wǎng)地址;RIP和DIP在同一個(gè)ip網(wǎng)絡(luò)啊犬;RIP的網(wǎng)關(guān)不能只想DIP灼擂,以確保響應(yīng)報(bào)文不會(huì)經(jīng)由Director;
<3> RS跟Director要在同一個(gè)物理網(wǎng)絡(luò)觉至;
<4> 請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)報(bào)文不能經(jīng)由Director剔应,而是由RS直接發(fā)往Client;
<5> 不支持端口映射
- 使用場(chǎng)景:大眾方式;
-
lvs-tun:lvs-tun
轉(zhuǎn)發(fā)方式:不修改請(qǐng)求報(bào)文的IP首部(源IP為CIP领斥,目標(biāo)IP為VIP)嫉到,而是在原IP報(bào)文之外再封裝一個(gè)IP首部(源IP是DIP,目標(biāo)IP是RIP)月洛,將報(bào)文發(fā)往挑選出的目標(biāo)RS何恶;RS直接響應(yīng)給客戶(hù)端(源IP是VIP,目標(biāo)IP是CIP)嚼黔;
<1> DIP VIP RIP 都應(yīng)該是公網(wǎng)地址;
<2> RS的網(wǎng)關(guān)不能细层,也不可能指向DIP;
<3> 請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)不能經(jīng)由Director唬涧;
<4> 不支持端口映射
<5> RS的OS得支持隧道功能疫赎;
- 使用場(chǎng)景:廣域網(wǎng)負(fù)載;
-
lvs-fullnat:lvs-fullnat
通過(guò)同時(shí)修改請(qǐng)求報(bào)文的源IP地址和目標(biāo)IP地址進(jìn)行轉(zhuǎn)發(fā)
CIP< - - > DIP
VIP< - - > RIP
<1> VIP是公網(wǎng)地址碎节,RIP和DIP是私網(wǎng)地址捧搞,且通常不在同一個(gè)IP網(wǎng)絡(luò);因此狮荔,RIP的網(wǎng)關(guān)一般不會(huì)指向DIP
<2> RS收到的請(qǐng)求報(bào)文源地址是DIP胎撇,因此,只能響應(yīng)給DIP;但是Director還要將其發(fā)往Client殖氏;
<3> 請(qǐng)求和響應(yīng)報(bào)文都經(jīng)由Director晚树;
<4> 支持端口映射;
- 注意: 此類(lèi)型默認(rèn)不支持雅采;
- 總結(jié):
- lvs-nat爵憎,lvs-fullnat:請(qǐng)求和響應(yīng)報(bào)文都經(jīng)由Director
lvs-nat:RIP的網(wǎng)關(guān)要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP網(wǎng)絡(luò),但要能通信 - lvs-dr婚瓜,lvs-tun:請(qǐng)求報(bào)文要經(jīng)由Director宝鼓,但響應(yīng)報(bào)文由RS直接發(fā)往Client
lvs-dr:通過(guò)封裝新的MAC首部實(shí)現(xiàn),通過(guò)MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā)
lvs-tun:通過(guò)在原IP報(bào)文之外封裝新的IP首部實(shí)現(xiàn)轉(zhuǎn)發(fā)闰渔,支持遠(yuǎn)距離通信
三席函、描述LVS-NAT、LVS-DR的工作原理并實(shí)現(xiàn)配置
1. LVS的基本工作原理
lvs
(1)當(dāng)用戶(hù)向負(fù)載均衡調(diào)度器(Director Server)發(fā)起請(qǐng)求冈涧,調(diào)度器將請(qǐng)求發(fā)往至內(nèi)核空間
(2)PREROUTING鏈?zhǔn)紫葧?huì)接收到用戶(hù)請(qǐng)求茂附,判斷目標(biāo)IP確定是本機(jī)IP,將數(shù)據(jù)包發(fā)往INPUT鏈
(3)IPVS是工作在INPUT鏈上的督弓,當(dāng)用戶(hù)請(qǐng)求到達(dá)INPUT時(shí)营曼,IPVS會(huì)將用戶(hù)請(qǐng)求和自己已定義好的集群服務(wù)進(jìn)行比對(duì),如果用戶(hù)請(qǐng)求的就是定義的集群服務(wù)愚隧,那么此時(shí)IPVS會(huì)強(qiáng)行修改數(shù)據(jù)包里的目標(biāo)IP地址及端口蒂阱,并將新的數(shù)據(jù)包發(fā)往POSTROUTING鏈
(4)POSTROUTING鏈接收數(shù)據(jù)包后發(fā)現(xiàn)目標(biāo)IP地址剛好是自己的后端服務(wù)器,那么此時(shí)通過(guò)選路,將數(shù)據(jù)包最終發(fā)送給后端的服務(wù)器
2. LVS的組成
LVS 由2部分程序組成录煤,包括 ipvs 和 ipvsadm鳄厌。
- ipvs(ip virtual server):一段代碼工作在內(nèi)核空間,叫ipvs妈踊,是真正生效實(shí)現(xiàn)調(diào)度的代碼了嚎。
- ipvsadm:另外一段是工作在用戶(hù)空間,叫ipvsadm廊营,負(fù)責(zé)為ipvs內(nèi)核框架編寫(xiě)規(guī)則歪泳,定義誰(shuí)是集群服務(wù),而誰(shuí)是后端真實(shí)的服務(wù)器(Real Server)
3. LVS相關(guān)術(shù)語(yǔ)
(1)DS:Director Server露筒。指的是前端負(fù)載均衡器節(jié)點(diǎn)呐伞。
(2)RS:Real Server。后端真實(shí)的工作服務(wù)器慎式。
(3)VIP:向外部直接面向用戶(hù)請(qǐng)求伶氢,作為用戶(hù)請(qǐng)求的目標(biāo)的IP地址。
(4)DIP:Director Server IP瞬捕,主要用于和內(nèi)部主機(jī)通訊的IP地址鞍历。
(5)RIP:Real Server IP,后端服務(wù)器的IP地址肪虎。
(6)CIP:Client IP,訪問(wèn)客戶(hù)端的IP地址惧蛹。
4. ipvsadm的用法
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
其中相關(guān)命令選項(xiàng)的解釋為:
常用選項(xiàng) | 解釋 |
---|---|
-A,--add-service | 添加一個(gè)虛擬服務(wù)扇救,即添加一個(gè)需要被負(fù)載均衡的虛擬地址。 |
-E,--edit-service | 修改一個(gè)虛擬服務(wù)香嗓; |
-D,--delete-service | 刪除一個(gè)虛擬服務(wù)迅腔; |
-C,--clear | 清楚所有虛擬服務(wù); |
-R,--restore | 從標(biāo)準(zhǔn)輸入中獲取ipvsadm規(guī)則進(jìn)行恢復(fù)靠娱; |
-S,--save | 從標(biāo)準(zhǔn)輸出中輸出ipvsadm規(guī)則沧烈,能將規(guī)則保存到指定文件,在以后通過(guò)-R恢復(fù)像云。 |
-a,--add-server | 為虛擬服務(wù)添加一個(gè)real server锌雀; |
-e,--edit-server | 修改real server的配置; |
-d,--delete-server | 刪除real server迅诬; |
-L,-l,--list | 列出ipvsadm配置的所有虛擬服務(wù)腋逆,可結(jié)合-c顯示連接表; |
-Z,--zero | 將虛擬服務(wù)的相關(guān)數(shù)據(jù)記錄清零侈贷; |
以下參數(shù)可跟在命令選項(xiàng)后使用:
參數(shù) | 解釋 |
---|---|
-t,--tcp-service service-address | 指定虛擬服務(wù)為tcp服務(wù)惩歉,service-address是host[:port]的形式,端口為0時(shí)表示任意端口,但需要加上-p選項(xiàng)才能使用撑蚌; |
-u,--udp-service service-address | 指定虛擬服務(wù)的udp服務(wù)上遥; |
-f,--fwmark-service integer | 指定firewall mark標(biāo)記的不同的地址和端口的虛擬地址整合為一個(gè)虛擬服務(wù)。firewall mark可以通過(guò)iptables命令指定争涌; |
-s,--scheduler scheduling-method | 指定調(diào)度算法露该,調(diào)度算法包括:rr,wrr,lc,wlc,lbcl,lblcr,dh,sh,sed,nq; |
-p,--persistent [timeout] | 設(shè)置持久連接第煮,這個(gè)模式可以使得來(lái)自同一個(gè)Ip的多個(gè)請(qǐng)求被送往同一個(gè)RS中解幼; |
-r,--real-server server-address | 為虛擬服務(wù)指定數(shù)據(jù)可以轉(zhuǎn)發(fā)到的真實(shí)服務(wù)器的地址,可添加端口號(hào)包警,若沒(méi)指定端口號(hào)撵摆,則調(diào)用虛擬地址的端口號(hào); |
-g,--gatewaying | dr模式害晦,指定lvs的工作模式特铝,此模式為默認(rèn)模式; |
-i壹瘟,--ipip | 使用tun模式鲫剿; |
-m,--masquerading | 使用NAT模式; |
-w,--weight weight | 設(shè)置權(quán)重稻轨,范圍為0-65535灵莲,0表示該RS不會(huì)受到新的連接; |
-x, --u-threshold uthreshold | 設(shè)置一個(gè)服務(wù)器可以維持的連接上限殴俱。0~65535政冻。設(shè)置為0表示沒(méi)有上限。 |
-y, --l-threshold lthreshold | 設(shè)置一個(gè)服務(wù)器的連接下限线欲。當(dāng)服務(wù)器的連接數(shù)低于此值的時(shí)候服務(wù)器才可以重新接收連接明场。如果此值未設(shè)置,則當(dāng)服務(wù)器的連接數(shù)連續(xù)三次低于uthreshold時(shí)服務(wù)器才可以接收到新的連接李丰。 |
以下參數(shù)可用是顯示服務(wù)的狀態(tài)信息:
參數(shù) | 解釋 |
---|---|
-c, --connection | 列出當(dāng)前的IPVS連接苦锨。 |
--timeout | 列出超時(shí) |
--stats | 狀態(tài)信息 |
--rate | 傳輸速率 |
--thresholds | 列出閾值 |
--persistent-conn | 堅(jiān)持連接 |
--sor | 把列表排序。 |
--nosort | 不排序 |
-n, --numeric | 不對(duì)ip地址進(jìn)行dns查詢(xún) |
--exact | 單位 |
5. lvs-nat工作原理及配置實(shí)現(xiàn)
lvs-nat
(a). 當(dāng)用戶(hù)請(qǐng)求到達(dá)Director Server趴泌,此時(shí)請(qǐng)求的數(shù)據(jù)報(bào)文會(huì)先到內(nèi)核空間的PREROUTING鏈舟舒。 此時(shí)報(bào)文的源IP為CIP,目標(biāo)IP為VIP
(b). PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī)踱讨,將數(shù)據(jù)包送至INPUT鏈
(c). IPVS比對(duì)數(shù)據(jù)包請(qǐng)求的服務(wù)是否為集群服務(wù)魏蔗,若是,修改數(shù)據(jù)包的目標(biāo)IP地址為后端服務(wù)器IP痹筛,然后將數(shù)據(jù)包發(fā)至POSTROUTING鏈莺治。 此時(shí)報(bào)文的源IP為CIP廓鞠,目標(biāo)IP為RIP
(d). POSTROUTING鏈通過(guò)選路,將數(shù)據(jù)包發(fā)送給Real Server
(e). Real Server比對(duì)發(fā)現(xiàn)目標(biāo)為自己的IP谣旁,開(kāi)始構(gòu)建響應(yīng)報(bào)文發(fā)回給Director Server床佳。 此時(shí)報(bào)文的源IP為RIP,目標(biāo)IP為CIP
(f). Director Server在響應(yīng)客戶(hù)端前榄审,此時(shí)會(huì)將源IP地址修改為自己的VIP地址砌们,然后響應(yīng)給客戶(hù)端。 此時(shí)報(bào)文的源IP為VIP搁进,目標(biāo)IP為CIP
LVS-NAT模型的特性
- RS應(yīng)該使用私有地址浪感,RS的網(wǎng)關(guān)必須指向DIP
- DIP和RIP必須在同一個(gè)網(wǎng)段內(nèi)
- 請(qǐng)求和響應(yīng)報(bào)文都需要經(jīng)過(guò)Director Server,高負(fù)載場(chǎng)景中饼问,Director Server易成為性能瓶頸
- 支持端口映射
- RS可以使用任意操作系統(tǒng)
- 缺陷:對(duì)Director Server壓力會(huì)比較大影兽,請(qǐng)求和響應(yīng)都需經(jīng)過(guò)director server
實(shí)驗(yàn)配置:
相關(guān)IP | 地址 |
---|---|
CIP | 192.168.0.129 |
VIP | 192.168.0.100 |
DIP | 192.168.32.132 |
RIP1 | 192.168.32.129 |
RIP2 | 192.168.32.128 |
#把主機(jī)192.168.32.132配置成Director,先檢查看內(nèi)核是否支持lvs
[root@localhost ~]# grep -i "ipvs" -C 10 /boot/config-3.10.0-514.el7.x86_64
#在192.168.32.132上在添加一塊網(wǎng)卡莱革,配置僅主機(jī)模式并配置ip
[root@localhost ~]# ifconfig ens37 192.168.0.100/24
#開(kāi)啟核心轉(zhuǎn)發(fā)功能
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
#在RS1和RS2兩臺(tái)主機(jī)上先安裝httpd峻堰、telnet-server兩個(gè)服務(wù)以便后面測(cè)試
[root@rs1 ~]# yum install httpd telnet-server -y
[root@rs2 ~]# yum install httpd telnet-server -y
#分別給R1和R2配置兩個(gè)不同的測(cè)試頁(yè)
[root@rs1 ~]# vim /var/www/html/index.html
<h1>rs1,192.168.32.129</h1>
[root@rs2 ~]# vim /var/www/html/index.html
<h1>rs2,192.168.32.128</h1>
#配置RS1和RS2的網(wǎng)關(guān)指向192.168.32.132
[root@rs1 ~]# route add default gw 192.168.32.132
[root@rs2 ~]# route add default gw 192.168.32.132
#至此網(wǎng)絡(luò)配置完成,下面配置lvs規(guī)則定義集群
[root@localhost ~]# yum install ipvsadm
[root@localhost ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.32.128 -m
[root@localhost ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.32.129 -m
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 rr
-> 192.168.32.128:80 Masq 1 0 0
-> 192.168.32.129:80 Masq 1 0 0
#使用192.168.0.129的主機(jī)訪問(wèn)測(cè)試:
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
#加權(quán)輪詢(xún)測(cè)試
[root@localhost ~]# ipvsadm -E -t 192.168.0.100:80 -s wrr
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.128 -m -w 2
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.129 -m -w 3
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 wrr
-> 192.168.32.128:80 Masq 2 0 0
-> 192.168.32.129:80 Masq 3 0 0
#訪問(wèn)測(cè)試
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
#假如后端的RS2掛了盅视,lvs還會(huì)繼續(xù)調(diào)度捐名,因此需要手動(dòng)刪除或者修改權(quán)重為0
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
#修改權(quán)重為0
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.128 -m -w 0
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 wrr
-> 192.168.32.128:80 Masq 0 0 4
-> 192.168.32.129:80 Masq 3 0 12
測(cè)試:
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
#假如RS1,RS2都掛了,可以把director當(dāng)做一個(gè)服務(wù)闹击,把RS1镶蹋,RS2權(quán)重改為0
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.129 -m -w 0
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.128 -m -w 0
[root@localhost ~]# ipvsadm -a -t 192.168.0.100:80 -r 127.0.0.1 -g
[root@localhost ~]# vim /var/www/html/index.html
<h1>sorry</h1>
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 wrr
-> 127.0.0.1:80 Route 1 0 0
-> 192.168.32.128:80 Masq 0 0 0
-> 192.168.32.129:80 Masq 0 0 0
測(cè)試:
[root@wujunjie6 ~]# for i in {1..5};do curl http://192.168.0.100;done
<h1>sorry</h1>
<h1>sorry</h1>
<h1>sorry</h1>
<h1>sorry</h1>
<h1>sorry</h1>
6.lvs-dr工作原理及配置實(shí)現(xiàn)
lvs-dr
(a) 當(dāng)用戶(hù)請(qǐng)求到達(dá)Director Server,此時(shí)請(qǐng)求的數(shù)據(jù)報(bào)文會(huì)先到內(nèi)核空間的PREROUTING鏈拇砰。 此時(shí)報(bào)文的源IP為CIP梅忌,目標(biāo)IP為VIP
(b) PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī),將數(shù)據(jù)包送至INPUT鏈
(c) IPVS比對(duì)數(shù)據(jù)包請(qǐng)求的服務(wù)是否為集群服務(wù)除破,若是,將請(qǐng)求報(bào)文中的源MAC地址修改為DIP的MAC地址琼腔,將目標(biāo)MAC地址修改RIP的MAC地址瑰枫,然后將數(shù)據(jù)包發(fā)至POSTROUTING鏈。 此時(shí)的源IP和目的IP均未修改丹莲,僅修改了源MAC地址為DIP的MAC地址光坝,目標(biāo)MAC地址為RIP的MAC地址
(d) 由于DS和RS在同一個(gè)網(wǎng)絡(luò)中,所以是通過(guò)二層來(lái)傳輸甥材。POSTROUTING鏈檢查目標(biāo)MAC地址為RIP的MAC地址盯另,那么此時(shí)數(shù)據(jù)包將會(huì)發(fā)至Real Server。
(e) RS發(fā)現(xiàn)請(qǐng)求報(bào)文的MAC地址是自己的MAC地址洲赵,就接收此報(bào)文鸳惯。處理完成之后商蕴,將響應(yīng)報(bào)文通過(guò)lo接口傳送給eth0網(wǎng)卡然后向外發(fā)出。 此時(shí)的源IP地址為VIP芝发,目標(biāo)IP為CIP
(f) 響應(yīng)報(bào)文最終送達(dá)至客戶(hù)端
LVS-DR模型的特性
- 特點(diǎn)1:保證前端路由將目標(biāo)地址為VIP報(bào)文統(tǒng)統(tǒng)發(fā)給Director Server绪商,而不是RS
- RS可以使用私有地址;也可以是公網(wǎng)地址辅鲸,如果使用公網(wǎng)地址格郁,此時(shí)可以通過(guò)互聯(lián)網(wǎng)對(duì)RIP進(jìn)行直接訪問(wèn)
- RS跟Director Server必須在同一個(gè)物理網(wǎng)絡(luò)中
- 所有的請(qǐng)求報(bào)文經(jīng)由Director Server,但響應(yīng)報(bào)文必須不能進(jìn)過(guò)Director Server
- 不支持地址轉(zhuǎn)換独悴,也不支持端口映射
- RS可以是大多數(shù)常見(jiàn)的操作系統(tǒng)
- RS的網(wǎng)關(guān)絕不允許指向DIP(因?yàn)槲覀儾辉试S他經(jīng)過(guò)director)
- RS上的lo接口配置VIP的IP地址
- 缺陷:RS和DS必須在同一機(jī)房中
特點(diǎn)1的解決方案:
- 在前端路由器做靜態(tài)地址路由綁定例书,將對(duì)于VIP的地址僅路由到Director Server
- 存在問(wèn)題:用戶(hù)未必有路由操作權(quán)限,因?yàn)橛锌赡苁沁\(yùn)營(yíng)商提供的刻炒,所以這個(gè)方法未必實(shí)用
- arptables:在arp的層次上實(shí)現(xiàn)在ARP解析時(shí)做防火墻規(guī)則决采,過(guò)濾RS響應(yīng)ARP請(qǐng)求。這是由iptables提供的
- 修改RS上內(nèi)核參數(shù)(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上落蝙,并限制其不能響應(yīng)對(duì)VIP地址解析請(qǐng)求织狐。
配置實(shí)驗(yàn):
相關(guān)IP | 地址 |
---|---|
CIP | 192.168.32.200 |
VIP | 192.168.32.99 |
DIP | 192.168.32.132 |
RIP1 | 192.168.32.129 |
RIP2 | 192.168.32.128 |
#通過(guò)腳本修改內(nèi)核參數(shù)以現(xiàn)在RS的ARP通告和應(yīng)答級(jí)別
[root@rs1 ~]# vim setparam.sh
#!/bin/bash
case $1 in
start)
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
;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage $(basename $0) start|stop"
exit 1
;;
Esac
#分別在RS1和RS2上運(yùn)行此腳本
[root@rs1 ~]# bash -x setparam.sh start
[root@rs2 ~]# bash -x setparam.sh start
#在rs1和rs2上配置VIP
[root@rs1 ~]# ifconfig lo:0 192.168.32.99 netmask 255.255.255.255 broadcast 192.168.32.99 up
[root@rs2 ~]# ifconfig lo:0 192.168.32.99 netmask 255.255.255.255 broadcast 192.168.32.99 up
#添加路由條目由哪個(gè)設(shè)備進(jìn)來(lái)就由哪個(gè)設(shè)備出去
[root@rs2 ~]# route add -host 192.168.32.99 dev lo:0
[root@rs1 ~]# route add -host 192.168.32.99 dev lo:0
#配置Director的VIP
[root@localhost ~]# ifconfig ens33:0 192.168.32.99 netmask 255.255.255.255 broadcast 192.168.32.99 up
#在Director上安裝ipvs并定義集群
[root@localhost ~]# ipvsadm -A -t 192.168.32.99:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.32.99:80 -r 192.168.32.128 -g
[root@localhost ~]# ipvsadm -a -t 192.168.32.99:80 -r 192.168.32.129 -g
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.32.99:80 rr
-> 192.168.32.128:80 Route 1 0 0
-> 192.168.32.129:80 Route 1 0 0
在client主機(jī)上測(cè)試:
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.32.99;done
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>