版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、最近在網(wǎng)絡(luò)上看到不少人熱衷于Linux集群的部署和配置。但是配置的思路和具體的步驟實(shí)在不敢恭維。為了解決一些新手在這方面存在的問(wèn)題,特將本人原創(chuàng)的幾個(gè)文檔貢獻(xiàn)出來(lái)。希望高手指正,也希望給新手一些幫助。在調(diào)度器的實(shí)現(xiàn)技術(shù)中,IP負(fù)載均衡技術(shù)效率最高。在已有的IP負(fù)載均衡技術(shù)中有通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation將一組服務(wù)器構(gòu)成一個(gè)高性能的、高可用的虛擬服務(wù)器,我們稱之為VS/NAT技術(shù)(Virtual Server via Network Address Translation,大多數(shù)商品化的IP負(fù)載均衡調(diào)度器產(chǎn)品都是使用此方法,如Cisco的LocalDi
2、rector、F5的Big/IP和Alteon的ACEDirector。在分析VS/NAT的缺點(diǎn)和網(wǎng)絡(luò)服務(wù)的非對(duì)稱性的基礎(chǔ)上,我們提出通過(guò)IP隧道實(shí)現(xiàn)虛擬服務(wù)器的方法VS/TUN(Virtual Server via IP Tunneling,和通過(guò)直接路由實(shí)現(xiàn)虛擬服務(wù)器的方法VS/DR(Virtual Server via Direct Routing,它們可以極大地提高系統(tǒng)的伸縮性。所以,IPVS軟件實(shí)現(xiàn)了這三種IP負(fù)載均衡技術(shù),它們的大致原理如下:Virtual Server via Network Address Translation(VS/NAT通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換,調(diào)度器重寫請(qǐng)求報(bào)文
3、的目標(biāo)地址,根據(jù)預(yù)設(shè)的調(diào)度算法,將請(qǐng)求分派給后端真實(shí)服務(wù)器;真實(shí)服務(wù)器的響應(yīng)報(bào)文通過(guò)調(diào)度器時(shí),報(bào)文源地址被重寫再返回給客戶,完成整個(gè)負(fù)載調(diào)度過(guò)程。下面的基本結(jié)構(gòu)和三層結(jié)構(gòu)其實(shí)都是利用NAT這種方式。這種情況的配置比較簡(jiǎn)單,但通常在流量比較大的情況下會(huì)造成調(diào)度器的瓶頸。因?yàn)榉?wù)數(shù)據(jù)的返回必須通過(guò)調(diào)度器出去。Virtual Server via IP Tunneling(VS/TUN采用NAT技術(shù)時(shí),由于請(qǐng)求和響應(yīng)報(bào)文都必須經(jīng)過(guò)調(diào)度器地址重寫,當(dāng)客戶請(qǐng)求越來(lái)越多時(shí),調(diào)度器的處理能力將成為瓶頸。為了解決這個(gè)問(wèn)題,調(diào)度器把請(qǐng)求報(bào)文通過(guò)IP隧道轉(zhuǎn)發(fā)至真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)直接返回給客戶,所以調(diào)度
4、器只處理請(qǐng)求報(bào)文。由于一般網(wǎng)絡(luò)服務(wù)應(yīng)答比請(qǐng)求報(bào)文大許多,采用VS/TUN技術(shù)后,集群系統(tǒng)的最大吞吐量可以提高10倍。Virtual Server via Direct Routing(VS/DRVS/DR通過(guò)改寫請(qǐng)求報(bào)文的MAC地址,將請(qǐng)求發(fā)送到真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)直接返回給客戶。同VS/TUN技術(shù)一樣,VS/DR技術(shù)可極大地提高集群系統(tǒng)的伸縮性。這種方法沒(méi)有IP隧道的開(kāi)銷,對(duì)集群中的真實(shí)服務(wù)器也沒(méi)有必須支持IP隧道協(xié)議的要求,但是要求調(diào)度器與真實(shí)服務(wù)器都有一塊網(wǎng)卡連在同一物理網(wǎng)段上。也就是說(shuō),在這種結(jié)構(gòu)中,數(shù)據(jù)從外部到內(nèi)部真實(shí)服務(wù)器的訪問(wèn)會(huì)通過(guò)調(diào)度器進(jìn)來(lái),但是真實(shí)服務(wù)器對(duì)其的應(yīng)答不
5、是通過(guò)調(diào)度器出去。即在大多數(shù)情況下,真實(shí)服務(wù)器可以通過(guò)各自的網(wǎng)關(guān)或者專用的網(wǎng)關(guān)對(duì)數(shù)據(jù)進(jìn)行外發(fā),從而降低調(diào)度器負(fù)載。同時(shí)在LVS中提供了八種不同的調(diào)度算法以供按照實(shí)際需求選擇:輪叫(Round Robin調(diào)度器通過(guò)"輪叫"調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。加權(quán)輪叫(Weighted Round Robin調(diào)度器通過(guò)"加權(quán)輪叫"調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問(wèn)流量。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)
6、地調(diào)整其權(quán)值。最少鏈接(Least Connections調(diào)度器通過(guò)"最少連接"調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用"最小連接"調(diào)度算法可以較好地均衡負(fù)載。加權(quán)最少鏈接(Weighted Least Connections在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用"加權(quán)最少鏈接"調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值?;诰植啃缘淖钌冁溄?Locality-B
7、ased Least Connections"基于局部性的最少鏈接" 調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用"最少鏈接"的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器。帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication "帶復(fù)制的基于局部性最少鏈接"
8、;調(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ù)制的程度。目標(biāo)地
9、址散列(Destination Hashing"目標(biāo)地址散列"調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。源地址散列(Source Hashing"源地址散列"調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。上述八種負(fù)載均衡調(diào)度算法在實(shí)施中,節(jié)點(diǎn)的權(quán)重越高,在集群中使用的頻率就越高。比如說(shuō)權(quán)重為2的節(jié)點(diǎn)在每接收兩個(gè)訪問(wèn)請(qǐng)求之后,權(quán)重為1
10、的節(jié)點(diǎn)才接收一個(gè)訪問(wèn)請(qǐng)求。LVS集群采用IP負(fù)載均衡技術(shù)和基于內(nèi)容請(qǐng)求分發(fā)技術(shù)。調(diào)度器具有很好的吞吐率,將請(qǐng)求均衡地轉(zhuǎn)移到不同的服務(wù)器上執(zhí)行,且調(diào)度器自動(dòng)屏蔽掉服務(wù)器的故障,從而將一組服務(wù)器構(gòu)成一個(gè)高性能的、高可用的虛擬服務(wù)器。整個(gè)服務(wù)器集群的結(jié)構(gòu)對(duì)客戶是透明的,而且無(wú)需修改客戶端和服務(wù)器端的程序。為此,在設(shè)計(jì)時(shí)需要考慮系統(tǒng)的透明性、可伸縮性、高可用性和易管理性。一般來(lái)說(shuō),LVS集群采用三層結(jié)構(gòu),其體系結(jié)構(gòu)如圖1所示,三層主要組成部分為:負(fù)載調(diào)度器(load balancer,它是整個(gè)集群對(duì)外面的前端機(jī),負(fù)責(zé)將客戶的請(qǐng)求發(fā)送到一組服務(wù)器上執(zhí)行,而客戶認(rèn)為服務(wù)是來(lái)自一個(gè)IP地址(我們可稱之為虛擬
11、IP地址上的。服務(wù)器池(server pool,是一組真正執(zhí)行客戶請(qǐng)求的服務(wù)器,服務(wù)有WEB、MAIL、FTP和DNS等。共享存儲(chǔ)(shared storage,它為服務(wù)器池提供一個(gè)共享的存儲(chǔ)區(qū),這樣很容易使得服務(wù)器池?fù)碛邢嗤膬?nèi)容,提供相同的服務(wù)。調(diào)度器是服務(wù)器集群系統(tǒng)的唯一入口點(diǎn)(Single Entry Point,它可以采用IP負(fù)載均衡技術(shù)、基于內(nèi)容請(qǐng)求分發(fā)技術(shù)或者兩者相結(jié)合。在IP負(fù)載均衡技術(shù)中,需要服務(wù)器池?fù)碛邢嗤膬?nèi)容提供相同的服務(wù)。當(dāng)客戶請(qǐng)求到達(dá)時(shí),調(diào)度器只根據(jù)服務(wù)器負(fù)載情況和設(shè)定的調(diào)度算法從服務(wù)器池中選出一個(gè)服務(wù)器,將該請(qǐng)求轉(zhuǎn)發(fā)到選出的服務(wù)器,并記錄這個(gè)調(diào)度;當(dāng)這個(gè)請(qǐng)求的其他
12、報(bào)文到達(dá),也會(huì)被轉(zhuǎn)發(fā)到前面選出的服務(wù)器。在基于內(nèi)容請(qǐng)求分發(fā)技術(shù)中,服務(wù)器可以提供不同的服務(wù),當(dāng)客戶請(qǐng)求到達(dá)時(shí),調(diào)度器可根據(jù)請(qǐng)求的內(nèi)容選擇服務(wù)器執(zhí)行請(qǐng)求。因?yàn)樗械牟僮鞫际窃贚inux操作系統(tǒng)核心空間中將完成的,它的調(diào)度開(kāi)銷很小,所以它具有很高的吞吐率。服務(wù)器池的結(jié)點(diǎn)數(shù)目是可變的。當(dāng)整個(gè)系統(tǒng)收到的負(fù)載超過(guò)目前所有結(jié)點(diǎn)的處理能力時(shí),可以在服務(wù)器池中增加服務(wù)器來(lái)滿足不斷增長(zhǎng)的請(qǐng)求負(fù)載。對(duì)大多數(shù)網(wǎng)絡(luò)服務(wù)來(lái)說(shuō),請(qǐng)求間不存在很強(qiáng)的相關(guān)性,請(qǐng)求可在不同的結(jié)點(diǎn)上并行執(zhí)行,所以整個(gè)系統(tǒng)的性能基本上可隨著服務(wù)器池的結(jié)點(diǎn)數(shù)目增加而線性增長(zhǎng)。共享存儲(chǔ)通常是數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)文件系統(tǒng)或者分布式文件系統(tǒng)。服務(wù)器結(jié)點(diǎn)需要?jiǎng)討B(tài)更新
13、的數(shù)據(jù)一般存儲(chǔ)在數(shù)據(jù)庫(kù)系統(tǒng)中,同時(shí)數(shù)據(jù)庫(kù)會(huì)保證并發(fā)訪問(wèn)時(shí)數(shù)據(jù)的一致性。靜態(tài)的數(shù)據(jù)可以存儲(chǔ)在網(wǎng)絡(luò)文件系統(tǒng)(如NFS/CIFS中,但網(wǎng)絡(luò)文件系統(tǒng)的伸縮能力有限,一般來(lái)說(shuō),NFS/CIFS服務(wù)器只能支持36個(gè)繁忙的服務(wù)器結(jié)點(diǎn)。對(duì)于規(guī)模較大的集群系統(tǒng),可以考慮用分布式文件系統(tǒng),如AFS1、GFS2.3、Coda4和Intermezzo5等。分布式文件系統(tǒng)可為各服務(wù)器提供共享的存儲(chǔ)區(qū),它們?cè)L問(wèn)分布式文件系統(tǒng)就像訪問(wèn)本地文件系統(tǒng)一樣,同時(shí)分布式文件系統(tǒng)可提供良好的伸縮性和可用性。此外,當(dāng)不同服務(wù)器上的應(yīng)用程序同時(shí)讀寫訪問(wèn)分布式文件系統(tǒng)上同一資源時(shí),應(yīng)用程序的訪問(wèn)沖突需要消解才能使得資源處于一致?tīng)顟B(tài)。這需要
14、一個(gè)分布式鎖管理器(Distributed Lock Manager,它可能是分布式文件系統(tǒng)內(nèi)部提供的,也可能是外部的。開(kāi)發(fā)者在寫應(yīng)用程序時(shí),可以使用分布式鎖管理器來(lái)保證應(yīng)用程序在不同結(jié)點(diǎn)上并發(fā)訪問(wèn)的一致性。負(fù)載調(diào)度器、服務(wù)器池和共享存儲(chǔ)系統(tǒng)通過(guò)高速網(wǎng)絡(luò)相連接,如100Mbps交換網(wǎng)絡(luò)、Myrinet和Gigabit網(wǎng)絡(luò)等。使用高速的網(wǎng)絡(luò),主要為避免當(dāng)系統(tǒng)規(guī)模擴(kuò)大時(shí)互聯(lián)網(wǎng)絡(luò)成為整個(gè)系統(tǒng)的瓶頸。Graphic Monitor是為系統(tǒng)管理員提供整個(gè)集群系統(tǒng)的監(jiān)視器,它可以監(jiān)視系統(tǒng)的狀態(tài)。Graphic Monitor是基于瀏覽器的,所以無(wú)論管理員在本地還是異地都可以監(jiān)測(cè)系統(tǒng)的狀況。為了安全的原因,
15、瀏覽器要通過(guò)HTTPS(Secure HTTP協(xié)議和身份認(rèn)證后,才能進(jìn)行系統(tǒng)監(jiān)測(cè),并進(jìn)行系統(tǒng)的配置和管理。層次的體系結(jié)構(gòu)可以使得層與層之間相互獨(dú)立,每一個(gè)層次提供不同的功能,在一個(gè)層次可以重用不同的已有軟件。例如,調(diào)度器層提供了負(fù)載平衡、可伸縮性和高可用性等,在服務(wù)器層可以運(yùn)行不同的網(wǎng)絡(luò)服務(wù),如Web、Cache、Mail和Media等,來(lái)提供不同的可伸縮網(wǎng)絡(luò)服務(wù)。明確的功能劃分和清晰的層次結(jié)構(gòu)使得系統(tǒng)容易建設(shè),以后整個(gè)系統(tǒng)容易維護(hù),而且系統(tǒng)的性能容易被擴(kuò)展。共享存儲(chǔ)如分布式文件系統(tǒng)在這個(gè)LVS集群系統(tǒng)是可選項(xiàng)。當(dāng)網(wǎng)絡(luò)服務(wù)需要有相同的內(nèi)容,共享存儲(chǔ)是很好的選擇,否則每臺(tái)服務(wù)器需要將相同的內(nèi)容復(fù)
16、制到本地硬盤上。當(dāng)系統(tǒng)存儲(chǔ)的內(nèi)容越多,這種無(wú)共享結(jié)構(gòu)(Shared-nothing Structure的代價(jià)越大,因?yàn)槊颗_(tái)服務(wù)器需要一樣大的存儲(chǔ)空間,任何的更新需要涉及到每臺(tái)服務(wù)器,系統(tǒng)的維護(hù)代價(jià)會(huì)非常高。共享存儲(chǔ)為服務(wù)器組提供統(tǒng)一的存儲(chǔ)空間,這使得系統(tǒng)的內(nèi)容維護(hù)工作比較輕松,如Webmaster只需要更新共享存儲(chǔ)中的頁(yè)面,對(duì)所有的服務(wù)器都有效。分布式文件系統(tǒng)提供良好的伸縮性和可用性,當(dāng)分布式文件系統(tǒng)的存儲(chǔ)空間增加時(shí),所有服務(wù)器的存儲(chǔ)空間也隨之增大。對(duì)于大多數(shù)Internet服務(wù)來(lái)說(shuō),它們都是讀密集型(Read-intensive的應(yīng)用,分布式文件系統(tǒng)在每臺(tái)服務(wù)器使用本地硬盤作Cache(如2
17、Gbytes的空間,可以使得訪問(wèn)分布式文件系統(tǒng)本地的速度接近于訪問(wèn)本地硬盤。此外,存儲(chǔ)硬件技術(shù)的發(fā)展也促使從無(wú)共享的集群向共享存儲(chǔ)的集群遷移。存儲(chǔ)區(qū)域網(wǎng)(Storage Area Networks技術(shù)解決了集群的每個(gè)結(jié)點(diǎn)可以直接連接/共享一個(gè)龐大的硬盤陣列,硬件廠商也提供多種硬盤共享技術(shù),如光纖通道(Fiber Channel、共享SCSI(Shared SCSI。InfiniBand是一個(gè)通用的高性能I/O規(guī)范,使得存儲(chǔ)區(qū)域網(wǎng)中以更低的延時(shí)傳輸I/O消息和集群通訊消息,并且提供很好的伸縮性。InfiniBand得到絕大多數(shù)的大廠商的支持,如Compaq、Dell、Hewlett-Packar
18、d、IBM、Intel、Microsoft和SUN Microsystems等,它正在成為一個(gè)業(yè)界的標(biāo)準(zhǔn)。這些技術(shù)的發(fā)展使得共享存儲(chǔ)變得容易,規(guī)模生產(chǎn)也會(huì)使得成本逐步降低。集群系統(tǒng)的特點(diǎn)是它在軟硬件上都有冗余。系統(tǒng)的高可用性可以通過(guò)檢測(cè)節(jié)點(diǎn)或服務(wù)進(jìn)程故障和正確地重置系統(tǒng)來(lái)實(shí)現(xiàn),使得系統(tǒng)收到的請(qǐng)求能被存活的結(jié)點(diǎn)處理。通常,我們?cè)谡{(diào)度器上有資源監(jiān)測(cè)進(jìn)程來(lái)時(shí)刻監(jiān)視各個(gè)服務(wù)器結(jié)點(diǎn)的健康狀況。當(dāng)服務(wù)器對(duì)ICMP ping不可達(dá)時(shí)或者探測(cè)她的網(wǎng)絡(luò)服務(wù)在指定的時(shí)間沒(méi)有響應(yīng)時(shí),資源監(jiān)測(cè)進(jìn)程通知操作系統(tǒng)內(nèi)核將該服務(wù)器從調(diào)度列表中刪除或者失效。這樣,新的服務(wù)請(qǐng)求就不會(huì)被調(diào)度到壞的結(jié)點(diǎn)。資源監(jiān)測(cè)進(jìn)程能通過(guò)電子郵件或
19、傳呼機(jī)向管理員報(bào)告故障。一旦監(jiān)測(cè)進(jìn)程到服務(wù)器恢復(fù)工作,通知調(diào)度器將其加入調(diào)度列表進(jìn)行調(diào)度。另外,通過(guò)系統(tǒng)提供的管理程序,管理員可發(fā)命令隨時(shí)可以將新機(jī)器加入服務(wù)來(lái)提高系統(tǒng)的處理性能,也可以將已有的服務(wù)器切出服務(wù),以便對(duì)服務(wù)器進(jìn)行系統(tǒng)維護(hù)?,F(xiàn)在前端的調(diào)度器有可能成為系統(tǒng)的單一失效點(diǎn)(Single Point of Failure。一般來(lái)說(shuō),調(diào)度器的可靠性較高,因?yàn)檎{(diào)度器上運(yùn)行的程序較少而且大部分程序早已經(jīng)遍歷過(guò),但我們不能排除硬件老化、網(wǎng)絡(luò)線路或者人為誤操作等主要故障。為了避免調(diào)度器失效而導(dǎo)致整個(gè)系統(tǒng)不能工作,我們需要設(shè)立一個(gè)從調(diào)度器作為主調(diào)度器的備份。兩個(gè)心跳(Heartbeat進(jìn)程6分別在主、
20、從調(diào)度器上運(yùn)行,它們通過(guò)串口線和UDP等心跳線來(lái)相互定時(shí)地匯報(bào)各自的健康狀況。當(dāng)從調(diào)度器不能聽(tīng)得主調(diào)度器的心跳時(shí),從調(diào)度器通過(guò)ARP欺騙(Gratuitous ARP來(lái)接管集群對(duì)外的Virtual IP Address,同時(shí)接管主調(diào)度器的工作來(lái)提供負(fù)載調(diào)度服務(wù)。當(dāng)主調(diào)度器恢復(fù)時(shí),這里有兩種方法,一是主調(diào)度器自動(dòng)變成從調(diào)度器,二是從調(diào)度器釋放Virtual IP Address,主調(diào)度器收回Virtual IP Address并提供負(fù)載調(diào)度服務(wù)。這里,多條心跳線可以使得因心跳線故障導(dǎo)致誤判(即從調(diào)度器認(rèn)為主調(diào)度器已經(jīng)失效,其實(shí)主調(diào)度器還在正常工作的概論降到最低。通常,當(dāng)主調(diào)度器失效時(shí),主調(diào)度器上
21、所有已建立連接的狀態(tài)信息將丟失,已有的連接會(huì)中斷??蛻粜枰蛑匦逻B接,從調(diào)度器才會(huì)將新連接調(diào)度到各個(gè)服務(wù)器上,這對(duì)客戶會(huì)造成一定的不便。為此,IPVS調(diào)度器在Linux 內(nèi)核中實(shí)現(xiàn)一種高效狀態(tài)同步機(jī)制,將主調(diào)度器的狀態(tài)信息及時(shí)地同步到從調(diào)度器。當(dāng)從調(diào)度器接管時(shí),絕大部分已建立的連接會(huì)持續(xù)下去。在具體實(shí)施過(guò)程中,在紅帽企業(yè)版Linux上對(duì)LVS集群的定義和配置提供了更加詳細(xì)的方案:本帖最后由 jerrywjl 于 2008-7-28 23:55 編輯LVS集群的結(jié)構(gòu):基本結(jié)構(gòu)和三層結(jié)構(gòu)基本結(jié)構(gòu)圖示如下:在這種結(jié)構(gòu)中有兩臺(tái)雙網(wǎng)卡的Linux服務(wù)器被配置為L(zhǎng)VS Router,又稱為調(diào)度器。LVS的
22、主要作用是虛擬出一個(gè)公共連接的IP地址和一個(gè)專用連接的IP地址(這兩個(gè)地址不是手工配置生成,而是在服務(wù)啟動(dòng)的時(shí)候形成,稱之為浮動(dòng)地址。在同一個(gè)時(shí)間,只有一個(gè)LVS Server處于工作狀態(tài),外部用戶要訪問(wèn)內(nèi)部的真實(shí)服務(wù)器實(shí)際上所做的操作是直接訪問(wèn)LVS Server的外部網(wǎng)絡(luò)浮動(dòng)地址,在這個(gè)例子中是eth0:1。這個(gè)公共網(wǎng)絡(luò)浮動(dòng)地址就是外部用戶要訪問(wèn)的虛擬服務(wù)器。只不過(guò)是虛擬服務(wù)器能夠?qū)?lái)自外部的訪問(wèn)按照負(fù)載均衡算法發(fā)送到內(nèi)部的真實(shí)服務(wù)器上面。這種算法通常帶有輪詢性質(zhì)。而內(nèi)部真實(shí)服務(wù)器在上面的結(jié)構(gòu)中會(huì)將網(wǎng)關(guān)指向LVS Server的內(nèi)部浮動(dòng)地址,這個(gè)結(jié)構(gòu)中是eth1:1。真實(shí)服務(wù)器在接收到由虛
23、擬服務(wù)器轉(zhuǎn)發(fā)的服務(wù)請(qǐng)求之后會(huì)將結(jié)果通過(guò)eth1:1返回。盡管eth0:1是虛擬服務(wù)器IP地址,但是如果在同一個(gè)結(jié)構(gòu)中要支持多個(gè)不同虛擬地址的服務(wù),比如說(shuō)HTTP在0,FTP在0這種情況下完全可以建立多個(gè)不同的虛擬網(wǎng)卡。不過(guò)仍然要注意,這個(gè)虛擬網(wǎng)絡(luò)是在服務(wù)啟動(dòng)狀態(tài)下自動(dòng)生成的而不是手動(dòng)建立和配置的。為了保證所有的真實(shí)服務(wù)器都提供同樣的服務(wù)內(nèi)容,通常也會(huì)指定一些特定的方式,比如利用rsync或者借助下面的三層結(jié)構(gòu)的共享存儲(chǔ)來(lái)維護(hù)多臺(tái)真實(shí)服務(wù)器的數(shù)據(jù)一致性。在任何時(shí)候只有一臺(tái)LVS服務(wù)器處于工作狀態(tài)中,而另外一臺(tái)處于備份狀態(tài)。他們之間通過(guò)心跳頻道來(lái)相互探知對(duì)方的狀態(tài)。探知
24、的方式是借助一些特定的腳本通過(guò)心跳頻道相互發(fā)送信號(hào)。在這個(gè)結(jié)構(gòu)中主心跳頻道是LVS服務(wù)器的公共網(wǎng)絡(luò),而備用心跳頻道是LVS服務(wù)器的內(nèi)部網(wǎng)絡(luò)。當(dāng)然在上面的圖中,并不是一定需要兩個(gè)LVS Router,只有一臺(tái)LVS Router的情況下也可以做,只不過(guò)少了一些保證而已。LVS1.PNG (6.77 KB三層結(jié)構(gòu)圖示如下:從下面的圖可以看出,三層結(jié)構(gòu)相對(duì)于基本結(jié)構(gòu)需要更多的設(shè)備,配置方面也比較復(fù)雜。僅僅是后臺(tái)的集群系統(tǒng)已經(jīng)需要足夠的時(shí)間去折騰。但這種結(jié)構(gòu)對(duì)于大數(shù)據(jù)訪問(wèn)量的FTP服務(wù)器、Samba等應(yīng)用來(lái)說(shuō)是比較理想的。在這個(gè)結(jié)構(gòu)中的后面是HA集群,通常HA集群會(huì)以服務(wù)的形式提供Samba,NFS以
25、及FTP等服務(wù),而真實(shí)服務(wù)器會(huì)通過(guò)掛載的方式獲得HA上提供出來(lái)的數(shù)據(jù)。另外在紅帽的LVS中還有一個(gè)比較關(guān)鍵的東西是LVS的組件:LVS的組件中服務(wù)包括pulse,lvs,ipvsadm以及nany;另外還包括配置文件/etc/sysconfig/ha/lvs.cf,配置工具piranha configuration tooly以及服務(wù)IP進(jìn)行浮動(dòng)之前arp欺騙手段中的send_arp。pulse是LVS的控制進(jìn)程,該進(jìn)程用于啟動(dòng)和控制所有的其他LVS相關(guān)的守護(hù)進(jìn)程。該進(jìn)程的配置文件是/etc/sysconfig/ha/lvs.cf。在主router上pulse用于啟動(dòng)LVS守護(hù)進(jìn)程,在備份ro
26、uter上pulse通過(guò)定期收發(fā)心跳信號(hào)監(jiān)控主router的狀態(tài)。如果一旦主router失效,在備份router上的pulse進(jìn)程將關(guān)閉所有主router上的LVS服務(wù),并且開(kāi)啟send_arp程序來(lái)重新指派浮動(dòng)IP到備份router的MAC上。lvs進(jìn)程運(yùn)行在主router上,主要讀取/etc/sysconfig/ha/lvs.cf文件,調(diào)用lvsadm工具來(lái)建立與維護(hù)ipvs路由表并對(duì)每一個(gè)LVS服務(wù)指派nanny進(jìn)程。如果nanny報(bào)告一個(gè)真實(shí)服務(wù)器失效,lvs進(jìn)程將調(diào)用ipvsadm工具將失效真實(shí)服務(wù)器從IPVS路由表中刪除。ipvsadm用于升級(jí)kernel中的IPVS路由表,該進(jìn)程
27、主要用于更改、添加、刪除IPVS路由表的條目。nanny監(jiān)控的進(jìn)程運(yùn)行在主LVS Router上,主LVS Router會(huì)通過(guò)他來(lái)監(jiān)控每一個(gè)真實(shí)服務(wù)器的狀況。另外piranha configuration tool提供了一個(gè)圖形接口用于修改/etc/sysconfig/ha/lvs.cf文件,而send_arp會(huì)在浮動(dòng)IP向不同的LVS router進(jìn)行切換時(shí)發(fā)送arp廣播。LVS2.PNG (7.5 KB下面是第一個(gè)實(shí)際的LVS配置的例子,整個(gè)的結(jié)構(gòu)是基于NAT操作。在該例子中的結(jié)構(gòu)比較簡(jiǎn)單: 本帖最后由 jerrywjl 于 2008-7-29 11:30 編輯LVS3.PNG (7.39
28、 KB上面的例子中,我暫時(shí)沒(méi)有添加備份LVS Router,而只是通過(guò)一個(gè)主LVS Router來(lái)充當(dāng)調(diào)度器。配置步驟如下:首先配置網(wǎng)絡(luò)參數(shù):在LVS Router上的基本參數(shù):rootlocalhost # ifconfig | grep inetinet addr:0 Bcast:55 Mask:inet6 addr: fe80:20c:29ff:fe08:a162/64 Scope:Linkinet addr:0 Bcast:55 Mask:inet6 addr
29、: fe80:20c:29ff:fe08:a16c/64 Scope:Linkrootlocalhost # sysctl -a | grep ip_forwardnet.ipv4.ip_forward = 1rootlocalhost # sysctl p在Real Server上的基本參數(shù):第一臺(tái):rootlocalhost # cat /etc/sysconfig/network-scripts/ifcfg-eth0# Advanced Micro Devices AMD 79c970 PCnet32 LANCEDEVICE=eth0ONBOOT=yesBOOTPROTO=staticH
30、WADDR=00:0c:29:b2:60:a5IPADDR=00NETMASK=GATEWAY=54第二臺(tái):rootlocalhost # cat /etc/sysconfig/network-scripts/ifcfg-eth0# Advanced Micro Devices AMD 79c970 PCnet32 LANCEDEVICE=eth0ONBOOT=yesBOOTPROTO=staticHWADDR=00:0c:29:b2:60:a5IPADDR=00NETMASK=GATEWAY=10.0
31、.0.254然后在LVS Router上安裝piranha工具:rootlocalhost # rpm -ihv ipvsadm-.i386.rpmrootlocalhost # rpm -ihv piranha-0.8.4-7.el5.i386.rpm完成之后為piranha-gui設(shè)置密碼并啟動(dòng)服務(wù):rootlocalhost # /usr/sbin/piranha-passwdNew Password:Verify:Updating password for user piranharootlocalhost # service piranha-gui restartSh
32、utting down piranha-gui: OK Starting piranha-gui: OK rootlocalhost # chkconfig piranha-gui on完成之后進(jìn)入圖形界面并在瀏覽器中輸入:http:/localhost:3636,輸入用戶名:piranha和剛才定義的密碼,即可進(jìn)入piranha configuration tool的配置界面:在該界面中第一個(gè)要設(shè)置的地方是CONTROL/MONITORING,在該界面中將MONITOR中的選項(xiàng):Auto update勾選上,Update Interval將自動(dòng)定義為10s,在服務(wù)沒(méi)有啟動(dòng)之前LVS ROUT
33、ING TABLE和LVS PROCESS都不可見(jiàn)。完成之后選擇Update information now。在該界面的第二個(gè)要設(shè)置的地方是GLOBAL SETTINGS,在該界面中:Primary server public IP:0 (真實(shí)外部地址Primary server private IP:0 (真實(shí)內(nèi)部地址Use network type: NAT (LVS方式NAT Router IP: 54 (內(nèi)部浮動(dòng)IPNAT Router MASK: (內(nèi)部浮動(dòng)掩碼NAT Router Device: eth1
34、:1 (運(yùn)行浮動(dòng)IP的設(shè)備選擇接受配置在該界面的第三個(gè)要設(shè)置的地方是REDUNDANCY,在該界面中:由于沒(méi)有在這個(gè)結(jié)構(gòu)中加入冗余配置,所以可以將其DISABLE掉或者將其設(shè)置為ENABLE但是保持配置為空。在該例子中我的配置為空:Redundant server public IP: Redundant server private IP:Heartbeat Interval (seconds: 6Assume dead after (seconds: 18Heartbeat runs on port: 539Monitor NIC links for failure:不勾選選
35、擇接受配置在該界面的第四個(gè)要設(shè)置的地方是VIRTUAL SERVERS:每一個(gè)Virtual Servers代表所提供的一種服務(wù),由于目前只有一種服務(wù)HTTP,所以選擇ADD在提示中輸入下面的信息:Name: HTTPApplication port: 80Protocal: TCPVirtual Server Address: 50Virtual IP Network Mask: Firewall Mark:Device: eth0:1Re-entry Time: 15Service Timeout: 6Quiesce: NoLoad Moni
36、tor Tool: noneScheduling: Weighted least-connections -?加權(quán)最小連接法(默認(rèn)Persistence:Persistence Network Mask: Unused選擇接受,并開(kāi)啟服務(wù)在該界面的第五個(gè)要設(shè)置的地方是REAL SERVERS:Name: localhost.localdomainAddress: 00Weighted: 1Name: localhost.localdomainAddress: 00Weighted: 1選擇接受,并開(kāi)啟服務(wù)在該界面的第六個(gè)要設(shè)置的地方是MONITORING SCR
37、IPTS,保持默認(rèn)即可完成之后確認(rèn)所有的配置都已經(jīng)保存,這個(gè)LVS基本上就配置完成。最后的工作是在LVS的Router上啟動(dòng)主服務(wù): # service pulse start# chkconfig pulse on這個(gè)時(shí)候可以看到eth0:1和eth1:1已經(jīng)自動(dòng)建立:rootlocalhost # ifconfigeth0:1 Link encap:Ethernet HWaddr 00:0C:29:08:A1:62inet addr:50 Bcast:55 Mask:UP BROADCAST RUNNING MULTIC
38、AST MTU:1500 Metric:1eth1:1 Link encap:Ethernet HWaddr 00:0C:29:08:A1:6Cinet addr:54 Bcast:55 Mask:UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1Interrupt:19 Base address:0x2080并且相關(guān)服務(wù)也開(kāi)啟了:rootlocalhost # service ipvsadm statusIP Virtual Server version 1.2.1 (size=4096P
39、rot LocalAddress ort Scheduler Flags-> RemoteAddress ort Forward Weight ActiveConn InActConnTCP 50:80 wlc-> 00:80 Masq 1 0 0-> 00:80 Masq 1 0 15rootlocalhost # ps -ef | grep nannyroot 3614 3596 0 23:09 ? 00:00:03 /usr/sbin/nanny -c -h 00 -p 80 -s GET /HTTP
40、/1.0rnrn -x HTTP -a 15 -I /sbin/ipvsadm -t 6 -w 1 -V 50 -M m -U none -lvs root 3615 3596 0 23:09 ? 00:00:03 /usr/sbin/nanny -c -h 00 -p 80 -s GET / HTTP/1.0rnrn -x HTTP -a 15 -I /sbin/ipvsadm -t 6 -w 1 -V 50 -M m -U none -lvs root 4078 3632 0 23:56 pts/1 00:00:00 grep n
41、anny同時(shí)開(kāi)啟兩臺(tái)真實(shí)服務(wù)器上的http服務(wù),并在兩臺(tái)主機(jī)上的服務(wù)目錄中分別建立同樣的測(cè)試頁(yè)面。# chkconfig httpd on# service httpd start現(xiàn)在通過(guò)在客戶端上訪問(wèn)LVS服務(wù)器進(jìn)行測(cè)試:50,可以看到real server給出了頁(yè)面。這個(gè)時(shí)候piranha configuration tool界面刷新之后看到的當(dāng)前ROUTER TABLE信息已經(jīng)發(fā)生了改變: CURRENT LVS ROUTING TABLEIP Virtual Server version 1.2.1 (size=4096Prot LocalAddres
42、s ort Scheduler Flags-> RemoteAddress ort Forward Weight ActiveConn InActConnTCP 50:80 wlc-> 00:80 Masq 1 0 0-> 00:80 Masq 1 0 0而在當(dāng)前LVS進(jìn)程列表中也出現(xiàn)了內(nèi)容:CURRENT LVS PROCESSESroot 3678 0.0 0.1 1880 332 ? Ss 22:09 0:00 pulseroot 3702 0.0 0.2 1872 596 ? Ss 22:10 0:00 /usr/
43、sbin/lvsd -nofork -c /etc/sysconfig/ha/lvs.cf root 3720 0.0 0.2 1852 628 ? Ss 22:10 0:00 /usr/sbin/nanny -c -h 00 -p 80 -s GET / HTTP/1.0rnrn-x HTTP -a 15 -I /sbin/ipvsadm -t 6 -w 1 -V 50 -M m -U none -lvsroot 3721 0.0 0.2 1852 628 ? Ss 22:10 0:00 /usr/sbin/nanny -c -h 00
44、-p 80 -s GET / HTTP/1.0rnrn-x HTTP -a 15 -I /sbin/ipvsadm -t 6 -w 1 -V 50 -M m -U none -lvs而在數(shù)次刷新頁(yè)面之后就可以看到CURRENT LVS ROUTING TABLE的內(nèi)容有所更新:rootlocalhost Desktop# cat lvsCURRENT LVS ROUTING TABLEIP Virtual Server version 1.2.1 (size=4096IP Virtual Server version 1.2.1 (size=4096Prot LocalA
45、ddress ort Scheduler Flags-> RemoteAddress ort Forward Weight ActiveConn InActConnTCP 50:80 wlc-> 00:80 Masq 1 0 7-> 00:80 Masq 1 0 6也就是說(shuō)訪問(wèn)量被平均分配到了兩臺(tái)主機(jī)上,如果我們找另外一個(gè)客戶端做簡(jiǎn)單的壓力測(cè)試:命令:# ab -c 1000 -n 100000 50/index.html獲得的LVS ROUTING TABLE如下:rootlocalho
46、st # cat Desktop/lvsIP Virtual Server version 1.2.1 (size=4096Prot LocalAddress ort Scheduler Flags-> RemoteAddress ort Forward Weight ActiveConn InActConn TCP 50:80 wlc-> 00:80 Masq 1 0 317-> 00:80 Masq 1 0 1007由于采用的是加權(quán)最小連接算法,所以負(fù)載不可能均分到兩臺(tái)服務(wù)器上。此時(shí)配置文件的內(nèi)容:rootlocalh
47、ost # cat /etc/sysconfig/ha/lvs.cfserial_no = 67primary = 0primary_private = 0service = lvsbackup_active = 1backup = heartbeat = 1heartbeat_port = 539keepalive = 6deadtime = 18network = natnat_router = 54 eth1:1nat_nmask = debug_level = NONEmonitor_links
48、= 0virtual HTTP active = 1address = 50 eth0:1vip_nmask = port = 80send = "GET / HTTP/1.0rnrn"expect = "HTTP"use_regex = 0load_monitor = nonescheduler = wlcprotocol = tcptimeout = 6reentry = 15quiesce_server = 0server localhost.localdomain address = 10.0.0.
49、100active = 1weight = 1server localhost.localdomain address = 00active = 1weight = 1實(shí)驗(yàn)到此成功。現(xiàn)在我將這個(gè)實(shí)驗(yàn)的結(jié)構(gòu)稍微做一下擴(kuò)展,按照紅帽所推薦的方案在結(jié)構(gòu)中加入一備份 LVS ruoter,該備份LVS router的真實(shí)外網(wǎng)IP地址是0,真實(shí)內(nèi)網(wǎng)IP是0。按照上述的結(jié)構(gòu)完成基本的網(wǎng)絡(luò)配置:rootlocalhost # ifconfig | grep inetinet addr:0 Bcast:55 Ma
50、sk:inet6 addr: fe80:20c:29ff:fecb:dd0b/64 Scope:Linkinet addr:0 Bcast:55 Mask:inet6 addr: fe80:20c:29ff:fecb:dd15/64 Scope:Link開(kāi)啟IP轉(zhuǎn)發(fā):rootlocalhost # sysctl -a | grep ip_forwardnet.ipv4.ip_forward = 1安裝lvs相關(guān)軟件包并進(jìn)行基本配置:rootlocalhost # rpm -ihv ipvsadm-1.24.8.
51、1.i386.rpmrootlocalhost # rpm -ihv piranha-0.8.4-7.el5.i386.rpm完成之后為piranha-gui設(shè)置密碼并啟動(dòng)服務(wù):rootlocalhost # /usr/sbin/piranha-passwdNew Password:Verify:Updating password for user piranharootlocalhost # service piranha-gui restartShutting down piranha-gui: OK Starting piranha-gui: OK rootlocalhost # chk
52、config piranha-gui on這里我偷了一個(gè)懶,因?yàn)椴幌朐傧虻谝慌_(tái)LVS Router那樣一個(gè)一個(gè)通過(guò)piranha configuration tool配置參數(shù),所以用scp將lvs.cf同步過(guò)來(lái),并且開(kāi)啟服務(wù):# service pulse start# chkconfig pulse on完成之后進(jìn)入圖形界面,在瀏覽器中登錄piranha configuration tools,需要修改的地方實(shí)際上有兩處:在該界面的第三個(gè)要設(shè)置的地方REDUNDANCY添加冗余配置:Redundant server public IP: 0Redundant serve
53、r private IP: 0Heartbeat Interval (seconds: 6Assume dead after (seconds: 18Heartbeat runs on port: 539Monitor NIC links for failure:不勾選選擇接受配置另外在第一臺(tái)LVS Router上也要做這方面的定義。在該界面的第二個(gè)要設(shè)置的地方是GLOBAL SETTINGS,在該界面中:Primary server public IP: 0 (真實(shí)外部地址 Primary server private IP:0 (真實(shí)內(nèi)
54、部地址 Use network type: NAT (LVS方式NAT Router IP: 54 (內(nèi)部浮動(dòng)IP NAT Router MASK: (內(nèi)部浮動(dòng)掩碼 NAT Router Device: eth1:1 (運(yùn)行浮動(dòng)IP的設(shè)備選擇接受配置這樣的話,配置文件的內(nèi)容為:rootlocalhost # cat /etc/sysconfig/ha/lvs.cfserial_no = 73primary = 0primary_private = 0service = lvsbackup_active = 1back
55、up = 0backup_private = 0heartbeat = 1heartbeat_port = 539keepalive = 6deadtime = 18network = natnat_router = 54 eth1:1nat_nmask = debug_level = NONEmonitor_links = 0virtual HTTP active = 1address = 50 eth0:1vip_nmask = port = 80send = &qu
56、ot;GET / HTTP/1.0rnrn"expect = "HTTP"use_regex = 0load_monitor = nonescheduler = wlcprotocol = tcptimeout = 6reentry = 15quiesce_server = 0server localhost.localdomain address = 00active = 1weight = 1server localhost.localdomain address = 00active = 1weight = 1測(cè)試的方法很簡(jiǎn)單
57、,第一臺(tái)LVS Router現(xiàn)在是primary,那么正常情況下他提供服務(wù),而備份lvs router開(kāi)啟pulse進(jìn)程對(duì)第一臺(tái)狀態(tài)進(jìn)行監(jiān)控?,F(xiàn)在將第一臺(tái)LVS Router關(guān)閉,在短時(shí)間內(nèi)客戶端訪問(wèn)虛擬服務(wù)器將受到影響。但是在大概十秒左右的時(shí)間就可以訪問(wèn)成功,此時(shí)可以看到備份LVS Router已經(jīng)成為primary并提供服務(wù)。如果此時(shí)再將已經(jīng)關(guān)閉的第一臺(tái)LVS Router開(kāi)啟,那么他將再次成為主LVS Router。本帖最后由 jerrywjl 于 2008-7-29 00:10 編輯和NAT結(jié)構(gòu)所不同的是,該LVS集群通過(guò)DR也就是direct route來(lái)實(shí)現(xiàn)。所謂direct route指的是LVS Router會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到真實(shí)服務(wù)器上,而每一臺(tái)真實(shí)服務(wù)器都有能力通過(guò)一個(gè)特定的網(wǎng)關(guān)直接將外部請(qǐng)求轉(zhuǎn)發(fā)出去。也就是說(shuō)反饋的應(yīng)答不會(huì)再通過(guò)原路即LVS Router走,而是通過(guò)其他出口出去。這樣做的好處是可以防止在大規(guī)模的LVS集群中因?yàn)檎{(diào)度器的性能問(wèn)題而產(chǎn)生瓶頸,因此
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 許昌職業(yè)技術(shù)學(xué)院《建筑裝飾材料與工藝》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年電商平臺(tái)支付安全風(fēng)險(xiǎn)評(píng)估與預(yù)防協(xié)議3篇
- 二零二五年戶外石材墻面粉刷及防水合同2篇
- 二零二五年文化產(chǎn)業(yè)甲乙丙三方股權(quán)并購(gòu)與文化產(chǎn)業(yè)振興協(xié)議3篇
- 二零二五年畜牧養(yǎng)殖場(chǎng)安全生產(chǎn)與應(yīng)急管理合同3篇
- 二零二五年度豪華酒店VIP客戶專享服務(wù)協(xié)議書(shū)2篇
- 二零二五年度離婚協(xié)議書(shū)起草與保密協(xié)議合同2篇
- 二零二五版?zhèn)€人教育貸款保證擔(dān)保借款合同3篇
- 二零二五年度礦粉市場(chǎng)分銷協(xié)議2篇
- 二零二五年度項(xiàng)目經(jīng)理崗位人才派遣合同3篇
- 虛擬貨幣地址分析技術(shù)的研究-洞察分析
- 綠色供應(yīng)鏈管理制度內(nèi)容
- 心理學(xué)基礎(chǔ)知識(shí)考試參考題庫(kù)500題(含答案)
- 電力智慧檢修安全運(yùn)行三維可視化管理平臺(tái)建設(shè)方案
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)集錦
- 消防安全應(yīng)急預(yù)案下載
- 《北航空氣動(dòng)力學(xué)》課件
- 附件:財(cái)政業(yè)務(wù)基礎(chǔ)數(shù)據(jù)規(guī)范(3.0版)
- 電商公司售后服務(wù)管理制度
- 火災(zāi)應(yīng)急處理課件
- 創(chuàng)新者的逆襲3:新質(zhì)生產(chǎn)力的十八堂案例課-記錄
評(píng)論
0/150
提交評(píng)論