第8章 Swfit一致性實(shí)現(xiàn)_第1頁(yè)
第8章 Swfit一致性實(shí)現(xiàn)_第2頁(yè)
第8章 Swfit一致性實(shí)現(xiàn)_第3頁(yè)
第8章 Swfit一致性實(shí)現(xiàn)_第4頁(yè)
第8章 Swfit一致性實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Swift致性的實(shí)現(xiàn) (第八章)CONTENTS 目錄PART 01 temp 目錄PART 02 async_pending目錄PART 03 致性服務(wù)PART 04作業(yè)IIIIHQndQG 漢智厲PART 0 1 temp目錄存儲(chǔ)節(jié)點(diǎn)的目錄彥 rootswift233: /srv/node/sda2rootswift233:/# cd srvroot0swift233:/srv# cd noderootswift233:/srv/node# cd sda2 rootswift233:/srv/node/sda2# Is -1 total 4drwxr-xr-x14swiftswift114

2、drwxr-xr-x drwxr-xr-x2 swift swift77 swift swift6944096Apr Apr Apr Apr Apr181824172818:3618:4713:2517:5617:35accounts async_pe ndiyg contain ers objects tmpH1g4IJyrr 粽百qo 世兇-lunoe 呂恒呆)他 umluoulla- dumluoBrx)他-llaigH:pqo朕皿dEltmp目錄accounts/srv/node/sda2async_pendingcontainersobjects/timestamp.datatmp目

3、錄截圖待上傳文件列表tmpPrhxOQ tmpslJArltmpPrhxOQ tmpslJArltmpPrhxOQ tmpslJArltmpPrhxOQ tmpslJArltmpPrhxOQ tmpslJArltmp目錄截圖上傳開始30秒時(shí),tmp目錄情況rootSwift:/srv/node/sda/tmp# I tmpOqAqyS tmpgCvzyd tmpLFGphP tmp7VQelf tmpiATpNj tmpMOdSRk rootSwift:/srv/node/sda/tmp# I tmpOqAqyS tmpgCvzyd tmpLFGphP tmp7VQelf tmpiATpNj

4、tmpMOd5Rk rootSwift:/srv/node/sda/tmp# I tmpOqAqyS tmpgCvzyd tmpLFGphP tmp7VQelf tmpiATpNj tmpMOdSRk rootSwift:/srv/node/sda/tmp# I tmp0qAqy5 tmpgCvzyd tmpLFGphP tmp7VQelf tmpiATpNj tmpMOdSRk rootSwift:/srv/node/sda/tmp# I tmpOqAqyS tmpgCvzyd tmpLFGphP tmp7VQelf tmpiATpNj tmpM0d5Rktmp0錄截圖上傳開始50秒時(shí) tm

5、p目錄情況, 文件已經(jīng)逐漸在 轉(zhuǎn)移jrootSwtft:/srv/node/sda/tnpff I tmpOqAqyS tmpgCvzyd tmpLFCphP :root電Swtf t:/srv/nodc/sda/tmplS I ItnpeqAqyS tmpgCvzyd tnpLFCphP rootSwtft:/srv/node/sda/tmpff I tnpOqAqyS tnpgCvzyd tnpLFCphP rootSwift:/srv/node/sda/tmp I 1 tnpOqAqyS tnpgCvzyd tmpLFCphP rootSwift:/srv/node/sda/tnp 1

6、! tmpOqAqyS tmpgCvzyd tmpLFCphP rootSwtft:/srv/node/sda/tmpff tmpOqAqyS tmpgCvzyd rootSwtf t: / srv/node/sdd/tr)p tmpOqAqyS tmpgCvzyd rootSwlft:/srv/node/sda/tnpff tmpOqAqyS tmpgCvzyd rootSwlft:/srv/node/sda/tnp tmpOqAqyS rootSwtft:/srv/node/sda/tmpff tnpOqAqyS rootSwtft:/srv/node/sda/tmpff tnpeqAqy

7、S rootSwtft:/srv/node/sda/tmp#I tmpOqAqyS IrootlSwtft:/ srv/node/sda/trip# tmpOqAqyS rootSwtft:/srv/node/sdd/tnpw tnpOqAqyS rootSwtft:/srv/node/sda/tnp# root電Swift:/srv/node/sda/tnpfftmpPrhx&Q tmpslJArltmpslJArltnpslJArltmpslJArltmpslJArlPART 0 2 async_pending目錄 async_pending目錄對(duì)象的PUT/DELETE操作,首先完成對(duì)對(duì)

8、象的操作,然后通知容器進(jìn)行更新容器的PUT/DELETE操作,首先完成對(duì)容器的操作,然后通知賬號(hào)進(jìn)行更新Async_pendingII_containersI IIIprefix1I IIIprefix2II_objectsIIprefixaIIprefiexb對(duì)象操作時(shí)更新容器對(duì)象的PUT/DELETE操作,首先完成對(duì)對(duì)象的操作,然后通知容器進(jìn)行更新圈里是要寫入容器里的內(nèi)容那么對(duì)象操作如何獲得有關(guān)容器副本的地址信息?對(duì)象操作時(shí)更新容器I從request.headers里找到信息Proxy Server在和對(duì)象副本節(jié)點(diǎn)建立連接時(shí),添加一個(gè)容器副本地址內(nèi)容到 請(qǐng)求頭部這個(gè)對(duì)應(yīng)關(guān)系不是固定的,是每

9、次處理請(qǐng)求時(shí),動(dòng)態(tài)生成的partition, containerNodes = self.app.container_ring.get_nodes(account, container)*for container in containers:nheaders = dict(req.headers.iteritems() nheadersX-Container-Host = %(ip)s:%(port)s % container nheadersX-Container-Partition = container_partition nheadersX-Container-Device = co

10、ntainerdevice對(duì)象操作流程對(duì)象操作流程對(duì)象操作時(shí)更新容器更改對(duì)象后,對(duì)容器的修改請(qǐng)求,如果沒有成功,就把需要完成的更 改寫入本地asyn c_pe ndin g目錄I然后由更新器(Updaters )來(lái)完成op: op, account: account, container: container, obj: obj, headers: headers_out在asyn c_pe ndi ng目錄下的更新記錄沒有包含容器副本的信息: host z partition z container device對(duì)象操作時(shí)更新容器I在pending目錄下的更新記錄沒有記錄容器副本的信息: h

11、ost z partition z cont ainer device為什么不記錄這些信息呢?I所以在后面的Upda ter進(jìn)行同步時(shí),如何找到應(yīng)該對(duì)哪個(gè)容器副本進(jìn)行更新呢?Updaters更新完容器后,還需要更新a cco unt里有關(guān)對(duì)象的 新的呢?PART 03 一致性服務(wù)一致性服務(wù)I Swift是一個(gè)分布式系統(tǒng),所以必須處理集群的各種臨時(shí)故障,比如 電源故障、系統(tǒng)部件故障,保證系統(tǒng)狀態(tài)的一致性I Swift有3類服務(wù)用來(lái)保證存系統(tǒng)的可靠性、一致性、可用性Auditors:Object ReplicatorsContainer ReplicatorsAccount Replicators

12、Object AuditorsContaine r Audit orsAccount AuditorsObject UpdatersContainer UpdatersAccount Reapers更新器(Updaters )更新服務(wù)的目的n即使在出現(xiàn)故障的時(shí)候還能保證系統(tǒng)數(shù)據(jù)的完整性I更新器的任務(wù)n完成放在async_pending目錄下的未完成的對(duì)容器、賬號(hào)內(nèi)容的更新任務(wù)更新器(Updaters)I每個(gè)存儲(chǔ)節(jié)點(diǎn)上有兩個(gè)updaters分別完成放在async_pending 下的對(duì)容器和賬號(hào)內(nèi)容同步任務(wù)n object_updater;n con tai ner_updater在asn c_

13、pe ndi ng目錄下的操作記錄中沒有容器副本的地址信息, 那么如何知道應(yīng)該更新哪個(gè)容器副本呢?op: op, account: account, container: container, obj: obj, headers: headers_out答案和對(duì)象操作不同,updater在進(jìn)行容器同步更新時(shí),會(huì)首先通過(guò)容器的環(huán)獲取容器副本的地址,然后會(huì)向容器的3個(gè)副本同時(shí)發(fā)出更新請(qǐng)求更新器(Updaters)I如果在進(jìn)行同步的過(guò)程中發(fā)現(xiàn)asnc_pending下的文件出了故障,那么就需要進(jìn)行隔離問(wèn)題:當(dāng)同步文 件出了故障后, 如何才能保證容 器得到更新呢?答案進(jìn)一步來(lái)講,因?yàn)橥粋€(gè)對(duì)象有3個(gè)副

14、本,只要有一個(gè)副本成功更新 了一個(gè)容器副本,那么Replicator就會(huì)發(fā)現(xiàn)容器的3個(gè)副本的內(nèi)容不一 致,就會(huì)通過(guò)同步更新其余的容器副本審計(jì)器(Auditors)審計(jì)器的目的n提供多一層的一致性保護(hù)審計(jì)器的任務(wù)n定期對(duì)磁盤進(jìn)行掃描發(fā)現(xiàn)磁盤壞點(diǎn)或文件系統(tǒng)問(wèn)題對(duì)對(duì)象、容器、帳號(hào)數(shù)據(jù)完 整性的影響n如果發(fā)現(xiàn)有壞點(diǎn),就把有問(wèn)題的虛節(jié)點(diǎn)進(jìn)行隔離,那么復(fù)制器就會(huì)從另外副本 生成一個(gè)新的副本n如果發(fā)現(xiàn)解決不了的一致性問(wèn)題,比如不屬于任何容器的對(duì)象,就把該問(wèn)題寫 入log對(duì)象審計(jì)器(object_auditor)對(duì)虛節(jié)點(diǎn)上的每一個(gè)對(duì)象進(jìn)行檢查n從元數(shù)據(jù)上獲取對(duì)象的名字,如果出錯(cuò),就需要進(jìn)行隔離n然后通過(guò)元數(shù)據(jù)

15、說(shuō)明的字節(jié)數(shù)檢查對(duì)象的大小,如果不一致,就需要隔離n檢查元數(shù)據(jù)etag值是否和對(duì)象的MD5值相同,如果不同,就需要隔離I如果發(fā)現(xiàn)對(duì)象需要隔離,就把需要隔離的對(duì)象移到隔離目錄(quarantined)下容器審計(jì)器(container_auditor)對(duì)該存儲(chǔ)節(jié)點(diǎn)上的每一個(gè)容器進(jìn)行檢查n獲取容器數(shù)據(jù)庫(kù)的ContainerBrokern通過(guò)ContaienrBroker獲取該容器的信息n如果獲取不到就記錄失敗account, container, created_at, put_timestamp, delete_timestamp, object_count, bytes_used, report

16、ed_put_timestamp, reported_delete_timestamp, reported_object_count, reported_bytes_used, hash, id, x_container_sync_point1, x_container_sync_point2然后由復(fù)制器進(jìn)行處理賬號(hào)審計(jì)器(account_auditor)對(duì)該存儲(chǔ)節(jié)點(diǎn)上的每一個(gè)賬號(hào)進(jìn)行檢查n獲取賬號(hào)數(shù)據(jù)庫(kù)的AccountBrokern通過(guò)AccountBroker獲取該賬號(hào)的信息n如果獲取不到就記錄失敗account, created_at,put_timestamp,delete_times

17、tamp, container_count, object_count, bytes_used, hash, idHandoff區(qū)域耆如何產(chǎn)生的?對(duì)象復(fù)制器(Replicators 0復(fù)制服務(wù)目的n確保系統(tǒng)的一致性和可用性I對(duì)象復(fù)制服務(wù)的任務(wù)n每30秒掃描一下本地文件的hashes.pkl,然后與遠(yuǎn)端的其它副本的進(jìn)行比較, 如果不相同,進(jìn)行相應(yīng)的更新n從系統(tǒng)中移除標(biāo)記為ts的對(duì)象、容器、賬號(hào)n發(fā)現(xiàn)副本數(shù)不夠時(shí),重新生成新的副本n發(fā)現(xiàn)不在應(yīng)有位置的虛節(jié)點(diǎn)(Han doff),并移動(dòng)到應(yīng)在的地方對(duì)象復(fù)制器工作流程partitions = collect_partitions()for partit

18、ion in partitions: if partition not in local: partitions_to_move.add(partition) else:partitions_to_check.add(partition)for partition in partitions_to_move: move_to_origin_node(partiotion)for partition in partitions_to_check: local_hash_of_suffix_dirs = get_hashes_and_reclaim(partition) remote_hash_o

19、f_suffix_dirs = get_reomote_hashes(partition) different_suffix_dirs = 01:02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12:13:14:compare(local_hash_of_suffix_dirs, remote_hash_of suffix_dirs) rsync(different_suffix_dirs)對(duì)象復(fù)制服務(wù)同步方法節(jié)點(diǎn)1 :請(qǐng)求者發(fā)送所有的本地對(duì)象信息(obj1, hash, timestamp)(obj2, hash, timestamp)(obj100, hash, timestamp)發(fā)送所需要的對(duì)象列表(obj5? Obj78? obj89)發(fā)送對(duì)方所需要的對(duì)象信

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論