第十三周《簡(jiǎn)述Linux集群類(lèi)型 ...》下

一京痢、簡(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集群
  1. 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)景:大眾方式;
  1. 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ù)載;
  1. 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)不支持雅采;
  1. 總結(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鳄厌。

    1. ipvs(ip virtual server):一段代碼工作在內(nèi)核空間,叫ipvs妈踊,是真正生效實(shí)現(xiàn)調(diào)度的代碼了嚎。
    1. 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>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市筏勒,隨后出現(xiàn)的幾起案子移迫,更是在濱河造成了極大的恐慌,老刑警劉巖管行,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厨埋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捐顷,警方通過(guò)查閱死者的電腦和手機(jī)荡陷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)迅涮,“玉大人废赞,你說(shuō)我怎么就攤上這事《9茫” “怎么了唉地?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)传透。 經(jīng)常有香客問(wèn)我耘沼,道長(zhǎng),這世上最難降的妖魔是什么朱盐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任群嗤,我火速辦了婚禮,結(jié)果婚禮上兵琳,老公的妹妹穿的比我還像新娘狂秘。我一直安慰自己骇径,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布赃绊。 她就那樣靜靜地躺著既峡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碧查。 梳的紋絲不亂的頭發(fā)上运敢,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音忠售,去河邊找鬼传惠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛稻扬,可吹牛的內(nèi)容都是我干的卦方。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泰佳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盼砍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起逝她,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤浇坐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后黔宛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體近刘,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年臀晃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了觉渴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徽惋,死狀恐怖案淋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情险绘,我是刑警寧澤哎迄,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站隆圆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏翔烁。R本人自食惡果不足惜渺氧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹬屹。 院中可真熱鬧侣背,春花似錦白华、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至潮太,卻和暖如春管搪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铡买。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工更鲁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奇钞。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓澡为,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親景埃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媒至,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容