最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

LVS(linuxvirtualserver)使用及說明

 更新時間:2026年02月24日 09:18:43   作者:feng68_  
該文章介紹了集群和分布式系統(tǒng)的基本概念,以及LVS負(fù)載均衡技術(shù)的原理、類型、工作模式和調(diào)度算法,還詳細(xì)描述了LVS的配置和部署命令,以及實際應(yīng)用中的實驗環(huán)境和測試方法

1 名詞介紹

1.1 集群和分布式

系統(tǒng)性能擴(kuò)展方式:

  • Scale UP:向上擴(kuò)展,增強(qiáng)
  • Scale Out:向外擴(kuò)展,增加設(shè)備,調(diào)度分配問題,Cluster

1.1.1 集群

Cluster: 集群是為了解決某個特定問題將多臺計算機(jī)組合起來形成的單個系統(tǒng)。

Cluster常見的三種類型:

LB:LoadBalancing(負(fù)載均衡)由多個主機(jī)組成,每個主機(jī)只承擔(dān)一部分訪問。

HA:High Availiablity(高可用)SPOF(single Point Of failure)

  • MTBF:Mean Time Between Failure 平均無故障時間,正常時間。
  • MTTR:Mean Time To Restoration( repair)平均恢復(fù)前時間,故障時間。
  • A=MTBF/(MTBF+MTTR)(0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
  • SLA:Service level agreement(服務(wù)等級協(xié)議)是在一定開銷下為保障服務(wù)的性能和可用性,服務(wù)提供商與用戶間定義的一種雙方認(rèn)可的協(xié)定。

HPC:High-performance computing(高性能計算,國家戰(zhàn)略資源)

1.1.2 分布式

  • 分布式存儲:Ceph,GlusterFs,F(xiàn)astDFS,MogileFs
  • 分布式計算:hadoop,Spark

分布式常見應(yīng)用:

  • 分布式應(yīng)用-->服務(wù)按照功能拆分,使用微服務(wù)。
  • 分布式靜態(tài)資源-->靜態(tài)資源放在不同的存儲集群上。
  • 分布式數(shù)據(jù)和存儲-->使用key-value緩存系統(tǒng)。
  • 分布式計算-->對特殊業(yè)務(wù)使用分布式計算,比如Hadoop集群。

1.1.3 集群于分布式應(yīng)用比較

集群:同一個業(yè)務(wù)系統(tǒng),部署在多臺服務(wù)器上。集群中,每一臺服務(wù)器實現(xiàn)的功能沒有差別,數(shù)據(jù)和代碼都是類似的。

分布式:一個業(yè)務(wù)被拆成多個子業(yè)務(wù),或者本身就是不同的業(yè)務(wù),部署在多臺服務(wù)器上。分布式中,每一臺服務(wù)器實現(xiàn)的功能是有差別的,數(shù)據(jù)和代碼也是不一樣的,分布式每臺服務(wù)器功能加起來,才是完整的業(yè)務(wù)。

分布式是以縮短單個任務(wù)的執(zhí)行時間來提升效率,而集群則是通過提高單位時間內(nèi)執(zhí)行的任務(wù)數(shù)來提升效率。

對于大型網(wǎng)站,訪問用戶很多,實現(xiàn)一個群集,在前面部署一個負(fù)載均衡服務(wù)器,后面幾臺服務(wù)器完成同一業(yè)務(wù)。如果有用戶進(jìn)行相應(yīng)業(yè)務(wù)訪問時,負(fù)載均衡器根據(jù)后端哪臺服務(wù)器的負(fù)載情況,決定由給哪一臺去完成響應(yīng),并且臺服務(wù)器垮了,其它的服務(wù)器可以頂上來。分布式的每一個節(jié)點,都完成不同的業(yè)務(wù),如果一個節(jié)點垮了,那這個業(yè)務(wù)可能就會失敗。

1.2 LVS

LVS 全稱 Linux Virtual Server,是 Linux 內(nèi)核層實現(xiàn)的高性能、高可用的負(fù)載均衡集群技術(shù),由章文嵩博士開發(fā),它的核心作用將前端的請求流量分發(fā)到后端多臺真實服務(wù)器(Real Server)上,從而提升服務(wù)的并發(fā)處理能力和可用性。

LVS簡介

  • LVS:Linux Virtual Server,負(fù)載調(diào)度器,內(nèi)核集成,章文嵩,
  • 阿里的四層SLB(Server LoadBalance)是基于LVS+keepalived實現(xiàn)。

LVS相關(guān)術(shù)語

  • VS: Virtual Server,負(fù)責(zé)調(diào)度。
  • RS:RealServer,負(fù)責(zé)真正提供服務(wù)。

LVS概念

  • VS:Virtual Server(調(diào)度器)
  • RS:Real Server (真實業(yè)務(wù)主機(jī))
  • CIP:Client IP (客戶端主機(jī)的ip)
  • VIP: Virtual serve IP VS外網(wǎng)的IP (對外開放的讓客戶訪問的ip)
  • DIP: Director IP VS內(nèi)網(wǎng)的IP (調(diào)度器負(fù)責(zé)訪問內(nèi)網(wǎng)的ip)
  • RIP: Real server IP (真實業(yè)務(wù)主機(jī)IP)

工作原理

VS(調(diào)度器)根據(jù)請求報文目標(biāo)IP目標(biāo)協(xié)議端口將其調(diào)度轉(zhuǎn)發(fā)至某RS(真實業(yè)務(wù)主機(jī)),根據(jù)調(diào)度算法來挑選RS。

LVS訪問流程

  • CIP <--> VIP == DIP <--> RIP

LVS集群的類型

  • lvs-nat:修改請求報文的目標(biāo)IP,多目標(biāo)IP的DNAT。
  • lvs-dr:操縱封裝新的MAC地址。
  • lvs-tun:在原請求IP報文之外新加一個IP首部。
  • lvs-fullnat:修改請求報文的源和目標(biāo)IP。

2 LVS集群的類型

2.1 NAT模式

2.1.1 說明

  • 本質(zhì)是多目標(biāo)IP的DNAT,通過將請求報文中的目標(biāo)地址目標(biāo)端口修改為某挑出的RS的RIPPORT實現(xiàn)轉(zhuǎn)發(fā)。
  • RIP和DIP應(yīng)在同一個IP網(wǎng)絡(luò),且應(yīng)使用私網(wǎng)地址;RS的網(wǎng)關(guān)要指向DIP。
  • 請求報文和響應(yīng)報文都必須經(jīng)由Director轉(zhuǎn)發(fā),Director易于成為系統(tǒng)瓶頸。
  • 支持端口映射,可修改請求報文的目標(biāo)PORT。
  • VS必須是Linux系統(tǒng),RS可以是任意OS系統(tǒng)。

2.1.2 數(shù)據(jù)邏輯

1.客戶端發(fā)送訪問請求,請求數(shù)據(jù)包中含有請求來源(CIP)、訪問目標(biāo)地址(VIP)、訪問目標(biāo)端口(9000Port)。

2.VS服務(wù)器接收到訪問請求做DNAT把請求數(shù)據(jù)包中的目的地由VIP換成RS的RIP和相應(yīng)端口。

3.RS1相應(yīng)請求,發(fā)送響應(yīng)數(shù)據(jù)包,包中的相應(yīng)保溫為數(shù)據(jù)來源(RIP1)響應(yīng)目標(biāo)(CIP)相應(yīng)端口(9000Port)。

4.VS服務(wù)器接收到響應(yīng)數(shù)據(jù)包,改變包中的數(shù)據(jù)來源(RIP1-->VIP),響應(yīng)目標(biāo)端口(9000-->80)。

5.VS服務(wù)器把修改過報文的響應(yīng)數(shù)據(jù)包回傳給客戶端。

LVS的NAT模式接收和返回客戶端數(shù)據(jù)包時都要經(jīng)過LVS的調(diào)度機(jī),所以LVS的調(diào)度機(jī)容易阻塞。

2.1.3 數(shù)據(jù)傳輸過程

客戶請求到達(dá)VIP后進(jìn)入PREROUTING,在沒有ipvs的時候因該進(jìn)入本機(jī)INPUT,當(dāng)IPVS存在后訪問請求在通過PREROUTING后被IPVS結(jié)果并作NAT轉(zhuǎn)發(fā)。

因為IPVS的作用點是在PREROUTING和INPUT鏈之間,所以如果在prerouting中設(shè)定規(guī)則會干擾IPVS的工作。所以在做LVS時要把iptables的火墻策略全清理掉。

2.2 DR模式

2.2.1 說明

因為NAT模式數(shù)據(jù)流向(Client訪問RealServer和其的回復(fù))都要經(jīng)過VirtualServer,當(dāng)真實主機(jī)過多時(比如10臺以上這樣)調(diào)度器會有頂不住的問題;DR(直連回復(fù)方式)模式就可以解決這個問題,讓RS不通過VS回復(fù)Client而是直接回復(fù)Client。

DR:Direct Routing,直接路由,LVS默認(rèn)模式,應(yīng)用最廣泛,通過為請求報文重新封裝一個MAC首部進(jìn)行轉(zhuǎn)發(fā),源MAC是DIP所在的接口的MAC,目標(biāo)MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標(biāo)IP/PORT均保持不變。

NAT模式主要玩三層,DR模式主要玩二層。NAT在VS中變IP和POST,DR在VS中變MAC。

2.2.2 數(shù)據(jù)邏輯

在DR模式中,RS接收到訪問請求后不需要回傳給VS調(diào)度器,直接把回傳數(shù)據(jù)發(fā)送給Client,所以RS和VS上都要有vip。

2.2.3 數(shù)據(jù)傳輸過程

  • 客戶端發(fā)送數(shù)據(jù)幀給vs調(diào)度主機(jī)幀中內(nèi)容為客戶端IP+客戶端的MAC+VIP+VIP的MAC。
  • VS調(diào)度主機(jī)接收到數(shù)據(jù)幀后把幀中的VIP的MAC該為RS1的MAC,此時幀中的數(shù)據(jù)為客戶端IP+客戶端的MAC+VIP+RS1的MAC。
  • RS1得到2中的數(shù)據(jù)包做出響應(yīng)回傳數(shù)據(jù)包,數(shù)據(jù)包中的內(nèi)容為VIP+RS1的MAC+客戶端IP+客戶端IP的MAC。
抓包理解

抓包理解LVS中的DR模式

2.2.4 DR模式的特點

  • Director和各RS都配置有VIP.
  • 確保前端路由器將目標(biāo)IP為VIP的請求報文發(fā)往Director.
  • 在前端網(wǎng)關(guān)做靜態(tài)綁定VIP和Director的MAC地址.
  • RS的RIP可以使用私網(wǎng)地址,也可以是公網(wǎng)地址;RIP與DIP在同一IP網(wǎng)絡(luò).
  • RIP的網(wǎng)關(guān)不能指向DIP,以確保響應(yīng)報文不會經(jīng)由Director.
  • RS和Director要在同一個物理網(wǎng)絡(luò).
  • 請求報文要經(jīng)由Director,但響應(yīng)報文不經(jīng)由Director,而由RS直接發(fā)往Client.
  • 不支持端口映射(端口不能修敗).
  • RS可使用大多數(shù)OS系統(tǒng).

2.3 TUN模式

2.3.1 說明

轉(zhuǎn)發(fā)方式:不修改請求報文的IP首部(源IP為CIP,目標(biāo)IP為VIP),而在原IP報文之外再封裝一個IP首部

(源IP是DIP,目標(biāo)IP是RIP),將報文發(fā)往挑選出的目標(biāo)RS;RS直接響應(yīng)給客戶端(源IP是VIP,目標(biāo)IP是CIP)

2.3.2 數(shù)據(jù)傳輸過程

  • 客戶端發(fā)送請求數(shù)據(jù)包,包內(nèi)有源IP+vip+dport。
  • 到達(dá)vs調(diào)度器后對客戶端發(fā)送過來的數(shù)據(jù)包重新封裝添加IP報文頭,新添加的IP報文頭中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并發(fā)送到RS1。
  • RS收到VS調(diào)度器發(fā)送過來的數(shù)據(jù)包做出響應(yīng),生成的響應(yīng)報文中包含SRCIP(VIP)+DSTIP(CIP)+port,響應(yīng)數(shù)據(jù)包通過網(wǎng)絡(luò)直接回傳給client。

2.3.3 特點

  • DIP, VIP, RIP都應(yīng)該是公網(wǎng)地址。
  • RS的網(wǎng)關(guān)一般不能指向DIP。
  • 請求報文要經(jīng)由Director,但響應(yīng)不能經(jīng)由Director。
  • 不支持端口映射。
  • RS的OS須支持隧道功能。

2.4 FULLNAT模式

fullnat:通過同時修改請求報文的源IP地址和目標(biāo)IP地址進(jìn)行轉(zhuǎn)發(fā);CIP --> DIP;VIP --> RIP .

  • VIP是公網(wǎng)地址,RIP和DIP是私網(wǎng)地址,且通常不在同一IP網(wǎng)絡(luò);因此,RIP的網(wǎng)關(guān)一般不會指向DIP。
  • RS收到的請求報文源地址是DIP,因此,只需響應(yīng)給DIP;但Director還要將其發(fā)往Client。
  • 請求和響應(yīng)報文都經(jīng)由Director。
  • 支持端口映射。

2.5 工作模式比較

要求NAT模式DR模式TUN模式
RS操作系統(tǒng)不限禁用arp支持隧道
調(diào)度器和服務(wù)器網(wǎng)絡(luò)可跨網(wǎng)絡(luò)不可跨網(wǎng)絡(luò)可跨網(wǎng)絡(luò)
調(diào)度服務(wù)器數(shù)量服務(wù)器數(shù)量
RS服務(wù)器網(wǎng)關(guān)指向到調(diào)度器DIP指向到路由指向到路由
  • NAT與FULLNAT:請求和響應(yīng)報文都經(jīng)由Director。
  • FULLNAT:RIP和DIP未必在同一IP網(wǎng)絡(luò),但要能通信。
  • NAT:RIP的網(wǎng)關(guān)要指向DIP。
  • DR與TUN:請求報文要經(jīng)由Director,但響應(yīng)報文由RS直接發(fā)往Client。
  • DR:通過封裝新的MAC首部實現(xiàn),通過MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā)。
  • TUN:通過在原IP報文外封裝新IP頭實現(xiàn)轉(zhuǎn)發(fā),支持遠(yuǎn)距離通信。

3 LVS調(diào)度算法

根據(jù)其調(diào)度時是否考慮各RS當(dāng)前的負(fù)載狀態(tài)被分為兩種:靜態(tài)方法和動態(tài)方法

3.1 LVS靜態(tài)調(diào)度算法

靜態(tài)方法:僅根據(jù)算法本身進(jìn)行調(diào)度,不考慮RS的負(fù)載情況。

  • RR:roundrobin 輪詢 RS分別被調(diào)度,當(dāng)RS配置有差別時不推薦。
  • WRR:Weighted RR,加權(quán)輪詢根據(jù)RS的配置進(jìn)行加權(quán)調(diào)度,性能差的RS被調(diào)度的次數(shù)少。
  • SH:Source Hashing,實現(xiàn)session sticky,源IP地址hash;將來自于同一個IP地址的請求始終發(fā)往第一次挑中的RS,從而實現(xiàn)會話綁定。
  • DH:Destination Hashing;目標(biāo)地址哈希,第一次輪詢調(diào)度至RS,后續(xù)將發(fā)往同一個目標(biāo)地址的請求始終轉(zhuǎn)發(fā)至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負(fù)載均衡,如:寬帶運營商。

3.2 LVS動態(tài)調(diào)度算法

動態(tài)方法:主要根據(jù)每RS當(dāng)前的負(fù)載狀態(tài)及調(diào)度算法進(jìn)行調(diào)度Overhead=value較小的RS將被調(diào)度。

  • LC(least connections最少鏈接發(fā)):適用于長連接應(yīng)用Overhead(負(fù)載值)=activeconns(活動鏈接數(shù)) x 256+inactiveconns(非活動鏈接數(shù))。
  • WLC(Weighted LC權(quán)重最少鏈接):默認(rèn)調(diào)度方法Overhead=(activeconns x 256+inactiveconns)/weight。
  • SED(Shortest Expection Delay):初始連接高權(quán)重優(yōu)先Overhead=(activeconns+1+inactiveconns) x 256/weight但是,當(dāng)node1的權(quán)重為1,node2的權(quán)重為10,經(jīng)過運算前幾次的調(diào)度都會被node2承接。
  • NQ(Never Queue):第一輪均勻分配,后續(xù)SED。
  • LBLC(Locality-Based LC):動態(tài)的DH算法,使用場景:根據(jù)負(fù)載狀態(tài)實現(xiàn)正向代理。
  • LBLCR(LBLC with Replication):帶復(fù)制功能的LBLC,解決LBLC負(fù)載不均衡問題,從負(fù)載重的復(fù)制到負(fù)載輕的RS。

3.3 版本4.15內(nèi)核后新增調(diào)度算法

FO(Weighted Fai Over):常用作灰度發(fā)布;在此FO算法中,遍歷虛擬服務(wù)所關(guān)聯(lián)的真實服務(wù)器鏈表,找到還未過載(未設(shè)置IP_VS_DEST_FOVERLOAD標(biāo)志)的且權(quán)重最高的真實服務(wù)器,進(jìn)行調(diào)度;當(dāng)服務(wù)器承接大量鏈接,我們可以對此服務(wù)器進(jìn)行過載標(biāo)記(IP_VS_DEST_F OVERLOAD),那么vs調(diào)度器就不會把鏈接調(diào)度到有過載標(biāo)記的主機(jī)中。

OVF(Overflow-connection):基于真實服務(wù)器的活動連接數(shù)量和權(quán)重值實現(xiàn)。將新連接調(diào)度到權(quán)重值最高的真實服務(wù)器,直到其活動連接數(shù)量超過權(quán)重值,之后調(diào)度到下一個權(quán)重值最高的真實服務(wù)器,在此OVF算法中,遍歷虛擬服務(wù)相關(guān)聯(lián)的真實服務(wù)器鏈表,找到權(quán)重值最高的可用真實服務(wù)器。一個可用的真實服務(wù)器需要同時滿足以下條件:

  • 未過載(未設(shè)置IP_VS_DEST_F OVERLOAD標(biāo)志)。
  • 真實服務(wù)器當(dāng)前的活動連接數(shù)量小于其權(quán)重值。
  • 其權(quán)重值不為零。

4 LVS部署命令介紹

4.1 相關(guān)軟件信息

  • 程序包:ipvsadm
  • Unit File:ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 規(guī)則保存工具:/usr/sbin/ipvsadm-save
  • 規(guī)則重載工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs調(diào)度規(guī)則文件:/etc/sysconfig/ipvsadm

4.2 ipvsadm命令

核心功能:集群服務(wù)管理集群服務(wù)的RealServer:增、刪、改、查。

  • pvs規(guī)則:/proc/net/ip_vs
  • ipvs連接:/proc/net/ip_vs_conn

命令參數(shù):

管理集群服務(wù)

 ipvsadm -A|E -t(tcp)|u(udp)|f(防護(hù)墻標(biāo)簽) \
 service-address(集群地址-->DIP) \
 [-s scheduler(調(diào)度算法)] \
 [-p [timeout]] \
 [-M netmask] \
 [--pepersistence_engine] \
 [-b sched-flags]
 ipvsadm -A|E -t|u|f DIP [-s scheduler] [-p [timeout]]
 -A #添加
 -E #修改
 -t #tcp服務(wù)
 -u #udp服務(wù)
 -s #指定調(diào)度算法,默認(rèn)為WLC
 -p #設(shè)置持久連接超時,持久連接可以理解為在同一個時間段同一個來源的請求調(diào)度到同一RealServer
 -f #firewall mask 火墻標(biāo)記,是一個數(shù)字
 ?
 # 增
 ipvsadm -A -t|u DIP -s [調(diào)度算法]
 ipvsadm -A -f [火墻標(biāo)記] DIP -p [持久連接超時時間]
 ?
 # 改
 ipvsadm -E -t|u DIP -s [調(diào)度算法] -p [持久連接超時時間]
 ?
 # 刪
 ipvsadm -D -t|u service-address
 ipvsadm -D -f [火墻標(biāo)記]

管理集群中的RS

 ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](權(quán)重)
 ipvsadm -a|e -t(tcp)|u(udp)|f(防護(hù)墻標(biāo)簽) \
 service-address(集群地址-->DIP) \
 -r server-address(真實服務(wù)地址--RIP) \
 [-g | -i| -m](工作模式) \
 [-w weight](權(quán)重)
 ipvsadm -a|e -t|u|f DIP -r RIP [-g|i|m] -w [weight]
 -a #添加realserver
 -e #更改realserver中的參數(shù),注如果要更改RIP要刪了再添加到達(dá)修改效果。
 -t #tcp協(xié)議
 -u #udp協(xié)議
 -f #火墻 標(biāo)簽
 -r #realserver地址
 -g #直連路由模式
 -i #ipip隧道模式
 -m #nat模式
 -w #設(shè)定權(quán)重
 -Z #清空計數(shù)器
 -C #清空lvs策略
 -L #查看lvs策略
 -n #不做解析
 --rate :輸出速率信息
 ?
 # 增、改
 ipvsadm -a|e -t|u|f DIP -r RIP [-g|i|m]
 ipvsadm -a|e -t|u|f DIP -r RIP [-g|i|m] -w [weight]
 # 刪
 ipvsadm -d -t|u|f service-address -r server-address # 刪除RS
 ipvsadm -Z [-t|u|f service-address] # 清除計數(shù)器

其它

 # 查
 ipvsadm -L|l [options] 查看RS
 ipvsadm -Ln --rate
 [root@DR-server ~]# ipvsadm -Ln --rate
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port              CPS InPPS OutPPS InBPS OutBPS
 ………………
 #CPS:每秒連接數(shù),表示服務(wù)器處理新連接的速率
 #InPPS:每秒入站數(shù)據(jù)包數(shù)量,即從客戶端發(fā)送到負(fù)載均衡器的數(shù)據(jù)包速率
 #OutPPS:每秒出站數(shù)據(jù)包數(shù)量,即從負(fù)載均衡器向后端服務(wù)器或客戶端發(fā)送數(shù)據(jù)包的速率
 #InBPS:每秒入站流量(字節(jié)),即從客戶端到服務(wù)器的流量速率。
 #OutBPS:每秒出站流量(字節(jié)),即從服務(wù)器到客戶端的流量速率。
 ?
 # 其它
 ipvsadm –C 清空策略
 ipvsadm –R 重載
 ipvsadm -S [-n] 保存

5 LVS實踐

5.1 NAT模式實現(xiàn)

5.1.1 實驗環(huán)境

主機(jī)名角色VIPDIPRIPCIP網(wǎng)關(guān)
VSNode調(diào)度器172.25.254.100192.168.0.100NULLNULL(172.25.254.2)
RS1真實服務(wù)器NULLNULL192.168.0.20NULL192.168.0.100
RS2真實服務(wù)器NULLNULL192.168.0.30NULL192.168.0.100
Client用戶測試機(jī)NULLNULLNULL172.25.254.101(172.25.254.2)

網(wǎng)絡(luò)環(huán)境

 # 調(diào)度器
 [root@VSNode ~]# ip a | egrep "eth0$|eth1$"
     inet 172.25.254.100/24 brd 172.25.254.255 scope global noprefixroute eth0
     inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute eth1
 [root@VSNode ~]# route -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         172.25.254.2    0.0.0.0         UG    100    0        0 eth0
 172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
 192.168.0.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1
 # RS1
 [root@RS1 ~]# ip a | grep eth0$
     inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute eth0
 [root@RS1 ~]# route -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
 192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
 # RS2
 [root@RS2 ~]# ip a | grep eth0$
     inet 192.168.0.30/24 brd 192.168.0.255 scope global noprefixroute eth0
 [root@RS2 ~]# route -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
 192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

調(diào)度器環(huán)境

 # 開啟內(nèi)核路由功能
 [root@VSNode ~]# sysctl -a | grep ip_forward
 net.ipv4.ip_forward = 0
 net.ipv4.ip_forward_update_priority = 1
 net.ipv4.ip_forward_use_pmtu = 0
 [root@VSNode ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
 [root@VSNode ~]# sysctl -p
 net.ipv4.ip_forward = 1
 [root@VSNode ~]# sysctl -a | grep ip_forward
 net.ipv4.ip_forward = 1
 net.ipv4.ip_forward_update_priority = 1
 net.ipv4.ip_forward_use_pmtu = 0
 [root@VSNode ~]# sh /usr/bin/my_script/swhouse_set.sh
 ==============================Start wshouse_set.sh script==============================
 Enter [function name] to option function,script support local,network,custom.
 Local,Aliyun,Docker,Epel,Customize):Aliyun
 Updating Subscription Management repositories.
 Unable to read consumer identity
 ?
 This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.
 ?
 repo id                                         repo name
 AliyunAppStream                                 Aliyun.appstream
 AliyunBaseOS                                    Aliyun.baseos
 ?
 Sucess modify!!!
 ==============================End wshouse_set.sh script================================
 [root@VSNode ~]# dnf install ipvsadm -y >/dev/null

服務(wù)環(huán)境

 # RS1
 [root@RS1 ~]# sh /usr/bin/my_script/swhouse_set.sh
 ==============================Start wshouse_set.sh script==============================
 Enter [function name] to option function,script support local,network,custom.
 Local,Aliyun,Docker,Epel,Customize):Local
 Updating Subscription Management repositories.
 Unable to read consumer identity
 ?
 This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.
 ?
 repo id                                         repo name
 LocalAppStream                                  Local.appstream
 LocalBaseOS                                     Local.baseos
 ?
 Sucess modify!!!
 ==============================End wshouse_set.sh script================================
 [root@RS1 ~]# dnf install httpd -y >/dev/null
 [root@RS1 ~]# systemctl enable --now httpd
 Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
 [root@RS1 ~]# echo RS1 - 192.168.0.20 > /var/www/html/index.html
 # RS2
 ……

測試環(huán)境

 [root@VSNode ~]# curl 192.168.0.20
 RS1 - 192.168.0.20
 [root@VSNode ~]# curl 192.168.0.30
 RS2 - 192.168.0.30

5.1.2 策略編寫

調(diào)度器
 [root@VSNode ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 [root@VSNode ~]# ipvsadm -A -t 172.25.254.100:80 -s wrr
 [root@VSNode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m  -w 1
 [root@VSNode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30:80 -m  -w 1
 [root@VSNode ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  172.25.254.100:80 wrr
   -> 192.168.0.20:80              Masq    1      0          0
   -> 192.168.0.30:80              Masq    1      0          0
規(guī)則持久化
 # 1.利用自定義文件進(jìn)行持久化
 [root@VSNode ~]# ipvsadm-save -n > /mnt/ipvs.rule
 [root@VSNode ~]# ipvsadm -C
 [root@VSNode ~]# reboot
 [root@VSNode ~]# ipvsadm-restore < /mnt/ipvs.rule
 [root@VSNode ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  172.25.254.100:80 wrr
   -> 192.168.0.20:80              Masq    1      0          0
   -> 192.168.0.30:80              Masq    1      0          0
 # 2.利用守護(hù)進(jìn)程進(jìn)行規(guī)則持久化
 # 通過查看ipvsadm的狀態(tài)知道是在這個文件/etc/sysconfig/ipvsadm中讀取規(guī)則的,有規(guī)則就可以成功啟動,沒有就報錯。
 [root@VSNode ~]# systemctl status ipvsadm | grep -i process
     Process: 28890 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=0/SUCCESS)
 [root@VSNode ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
 [root@VSNode ~]# ipvsadm -C
 [root@VSNode ~]# systemctl enable --now ipvsadm.service
 Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
 [root@VSNode ~]# reboot
 [root@VSNode ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  172.25.254.100:80 wrr
   -> 192.168.0.20:80              Masq    1      0          0
   -> 192.168.0.30:80              Masq    1      0          0

5.1.3 測試

 [root@Client ~]# for i in {1..10};do curl 172.25.254.100;done
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20

5.2 DR模式實現(xiàn)

5.2.1 實驗環(huán)境

主機(jī)名角色VIPDIPRIPCIP網(wǎng)關(guān)
Router路由器172.25.254.100192.168.0.100NULLNULL(172.25.254.2)
VSNode調(diào)度器192.168.0.200192.168.0.50NULLNULL192.168.0.100
RS1真實服務(wù)器192.168.0.200NULL192.168.0.20NULL192.168.0.100
RS2真實服務(wù)器192.168.0.200NULL192.168.0.30NULL192.168.0.100
Client用戶測試機(jī)NULLNULLNULL172.25.254.101172.25.254.100
路由器
 # IP配置
 [root@Router ~]# ip a | egrep "eth0$|eth1$"
     inet 172.25.254.100/24 brd 172.25.254.255 scope global noprefixroute eth0
     inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute eth1
 # 開啟內(nèi)核路由
 [root@Router ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
 [root@Router ~]# sysctl -p
 net.ipv4.ip_forward = 1
調(diào)度器
 # IP設(shè)置
 [root@VSNode ~]# cd /etc/NetworkManager/system-connections/
 [root@VSNode system-connections]# cp eth0.nmconnection lo.nmconnection
 [root@VSNode system-connections]# vim lo.nmconnection
 [connection]
 id=lo
 type=loopback
 interface-name=lo
 ?
 [ipv4]
 method=manual
 address1=172.0.0.1/8
 address2=192.168.0.200/32
 [root@VSNode system-connections]# nmcli c reload lo
 [root@VSNode system-connections]# nmcli c up lo
 [root@VSNode system-connections]# ip a | egrep "lo$|eth0$"
     inet 127.0.0.1/8 scope host lo
     inet 192.168.0.200/32 scope global lo
     inet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute eth0
 [root@VSNode ~]# route -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
 192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
 [root@VSNode ~]# for i in {20,30};do
 > scp /etc/NetworkManager/system-connections/lo.nmconnection root@192.168.0.$i:/etc/NetworkManager/system-connections/lo.nmconnection
 > done
Client
 [root@Client ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
 [root@Client ~]# nmcli c reload eth0
 [root@Client ~]# nmcli c up eth0
 [root@Client ~]# route -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
 172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
RS1
 [root@RS1 ~]# nmcli c reload
 [root@RS1 ~]# nmcli c up lo
 [root@RS1 ~]# ip a | egrep "lo$|eth0$"
     inet 127.0.0.1/8 scope host lo
     inet 192.168.0.200/32 scope global lo
     inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute eth0
 [root@RS1 ~]# route -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
 192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
 # 禁止ARP響應(yīng)
 [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
 [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
 [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
RS2
 [root@RS2 ~]# nmcli c reload
 [root@RS2 ~]# nmcli c up lo
 [root@RS2 ~]# ip a | egrep "lo$|eth0$"
     inet 127.0.0.1/8 scope host lo
     inet 192.168.0.200/32 scope global lo
     inet 192.168.0.30/24 brd 192.168.0.255 scope global noprefixroute eth0
 [root@RS2 ~]# route -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
 192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
 # 禁止ARP響應(yīng)
 [root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 [root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
 [root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
 [root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

5.2.2 測試編寫

路由器
 # 數(shù)據(jù)轉(zhuǎn)發(fā)策略
 [root@Router ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100
 [root@Router ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100
 # 查看NAT表
 [root@Router ~]# iptables -t nat -L
 ………………
 Chain POSTROUTING (policy ACCEPT)
 target     prot opt source               destination
 SNAT       all  --  anywhere             anywhere             to:192.168.0.100
 SNAT       all  --  anywhere             anywhere             to:172.25.254.100
 [root@Router ~]# iptables -t nat -S
 -P PREROUTING ACCEPT
 -P INPUT ACCEPT
 -P OUTPUT ACCEPT
 -P POSTROUTING ACCEPT
 -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100
 -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100
調(diào)度器
 [root@VSNode ~]# sh /usr/bin/my_script/swhouse_set.sh
 ==============================Start wshouse_set.sh script==============================
 Enter [function name] to option function,script support local,network,custom.
 Local,Aliyun,Docker,Epel,Customize):Local
 ==============================End wshouse_set.sh script================================
 [root@VSNode ~]# dnf install ipvsadm -y >/dev/null
 [root@VSNode ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
 [root@VSNode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g
 [root@VSNode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.30 -g
 [root@VSNode ~]# 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.200:80 rr
   -> 192.168.0.20:80              Route   1      0          0
   -> 192.168.0.30:80              Route   1      0          0
 [root@VSNode ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
 [root@VSNode ~]# systemctl start ipvsadm

5.2.3 測試

 [root@Client ~]# for i in {1..10};do curl 192.168.0.200;done
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 RS2 - 192.168.0.30
 RS1 - 192.168.0.20
 [root@Client ~]#

5.3 利用火墻解決輪詢錯誤問題

http和https是獨立的service,輪詢會出現(xiàn)重復(fù)問題

5.3.1 現(xiàn)象復(fù)現(xiàn)

RS
 # RS中開啟http和heeps協(xié)議
 [root@RS1 ~]# dnf install mod_ssl -y >/dev/null
 [root@RS1 ~]# systemctl restart httpd
VSNode
 # 添加https策略
 [root@VSNode ~]# 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.200:80 rr
   -> 192.168.0.20:80              Route   1      0          0
   -> 192.168.0.30:80              Route   1      0          0
 [root@VSNode ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
 [root@VSNode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
 [root@VSNode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.30:443 -g
 [root@VSNode ~]# 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.200:80 rr
   -> 192.168.0.20:80              Route   1      0          0
   -> 192.168.0.30:80              Route   1      0          0
 TCP  192.168.0.200:443 rr
   -> 192.168.0.20:443             Route   1      0          0
   -> 192.168.0.30:443             Route   1      0          0
錯誤展示
 [root@Client ~]# curl  192.168.0.200;curl -k https://192.168.0.200
 RS2 - 192.168.0.30
 RS2 - 192.168.0.30
解決方案

使用火墻標(biāo)記訪問VIP的80和443的所有數(shù)據(jù)包,設(shè)定一個標(biāo)記數(shù),然后對此標(biāo)記進(jìn)行負(fù)載

 [root@VSNode ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark  6666
 [root@VSNode ~]# ipvsadm -A -f 6666 -s rr
 [root@VSNode ~]# ipvsadm  -a -f 6666 -r 192.168.0.20 -g
 [root@VSNode ~]# ipvsadm  -a -f 6666 -r 192.168.0.30 -g
 [root@VSNode ~]# 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.200:80 rr
   -> 192.168.0.20:80              Route   1      0          0
   -> 192.168.0.30:80              Route   1      0          0
 TCP  192.168.0.200:443 rr
   -> 192.168.0.20:443             Route   1      0          0
   -> 192.168.0.30:443             Route   1      0          0
 FWM  6666 rr
   -> 192.168.0.20:0               Route   1      0          0
   -> 192.168.0.30:0               Route   1      0          0
重測試
 [root@Client ~]# curl  192.168.0.200;curl -k https://192.168.0.200
 RS2 - 192.168.0.20
 RS2 - 192.168.0.30

5.4 利用持久連接實現(xiàn)會話粘滯

調(diào)度策略

 [root@VSNode ~]# ipvsadm -E -f 6666 -s rr -p 1
 [root@VSNode ~]# 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.200:80 rr
   -> 192.168.0.20:80              Route   1      0          0
   -> 192.168.0.30:80              Route   1      0          0
 TCP  192.168.0.200:443 rr
   -> 192.168.0.20:443             Route   1      0          0
   -> 192.168.0.30:443             Route   1      0          0
 FWM  6666 rr persistent 1
   -> 192.168.0.20:0               Route   1      0          0
   -> 192.168.0.30:0               Route   1      0          0

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • centos 安裝免費控制面板kloxo步驟

    centos 安裝免費控制面板kloxo步驟

    很早就要說把平臺轉(zhuǎn)移到linux下了的,不過一直沒有行動起來。前些天搞了一個美國的vps測試了一下,發(fā)現(xiàn)感覺還是不錯的,通過在幾個交流論壇里摸索,總算把免費的kloxo整到資源原本就不是很足的vps里。
    2010-03-03
  • Ubuntu掛載Windows共享文件的詳細(xì)步驟

    Ubuntu掛載Windows共享文件的詳細(xì)步驟

    在某些情況下,我們需要將windows的某個文件夾共享出去,這樣,在同一個網(wǎng)絡(luò)中,linux系統(tǒng)就可以通過掛載來訪問這個文件夾中的內(nèi)容,所以本文給大家介紹了Ubuntu掛載Windows共享文件的詳細(xì)步驟,需要的朋友可以參考下
    2025-07-07
  • Linux運維基礎(chǔ)系統(tǒng)磁盤管理教程

    Linux運維基礎(chǔ)系統(tǒng)磁盤管理教程

    這篇文章主要介紹了Linux運維基礎(chǔ)系統(tǒng)磁盤管理教程,附含詳細(xì)的源碼示例,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家同學(xué)習(xí)共進(jìn)步
    2021-09-09
  • 輕松搞定VIM高亮NGINX配置文件的方法

    輕松搞定VIM高亮NGINX配置文件的方法

    在使用vim在寫東西的時候,如果有語法高亮顯示就會方便很多,之前給大家介紹了很多關(guān)于vim高亮的文章,那這篇文章主要給大家介紹了如何輕松搞定VIM高亮NGINX配置文件的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • 虛擬機(jī)Linux系統(tǒng)忘記密碼修改root或其他用戶密碼的方法

    虛擬機(jī)Linux系統(tǒng)忘記密碼修改root或其他用戶密碼的方法

    這篇文章主要介紹了虛擬機(jī)Linux系統(tǒng)忘記密碼修改root或其他用戶密碼的方法,在文章需要大家注意本文基于centos7環(huán)境進(jìn)行操作,由于centos的版本是有差異的,所以需要大家確認(rèn)版本,感興趣的朋友跟隨小編一起看看吧
    2018-08-08
  • Linux運維從初級進(jìn)階為高級知識點總結(jié)

    Linux運維從初級進(jìn)階為高級知識點總結(jié)

    在本篇文章里小編給大家整理了關(guān)于Linux運維從初級進(jìn)階為高級知識點總結(jié)內(nèi)容,需要的為朋友們學(xué)習(xí)下。
    2019-06-06
  • Linux輸入子系統(tǒng)框架原理解析

    Linux輸入子系統(tǒng)框架原理解析

    這篇文章主要介紹了Linux輸入子系統(tǒng)框架原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 關(guān)于SSH服務(wù)解讀

    關(guān)于SSH服務(wù)解讀

    這篇文章主要介紹了關(guān)于SSH服務(wù),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Linux中stat函數(shù)和stat命令使用詳解

    Linux中stat函數(shù)和stat命令使用詳解

    這篇文章主要介紹了Linux中stat函數(shù)和stat命令使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Linux中查看端口占用的方法對比:netstat、ss、lsof誰更好用?

    Linux中查看端口占用的方法對比:netstat、ss、lsof誰更好用?

    本文介紹了Linux中查看端口占用的三種常用工具的使用,其中ss、netstat和lsof,ss是推薦首選工具,命令簡潔高效,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2026-06-06

最新評論

黑水县| 天长市| 安顺市| 翁源县| 南靖县| 玛纳斯县| 区。| 罗田县| 五大连池市| 禹州市| 黔江区| 民丰县| 吴桥县| 绥滨县| 大庆市| 二连浩特市| 三明市| 桓台县| 海伦市| 隆化县| 板桥市| 新疆| 西峡县| 登封市| 金溪县| 镇平县| 大连市| 军事| 疏勒县| 永平县| 昂仁县| 双流县| 景德镇市| 疏附县| 蒙山县| 穆棱市| 南木林县| 伊宁市| 龙口市| 四平市| 城口县|