隨著電信存儲(chǔ)數(shù)據(jù)重要性的提高,用戶需要在線方式進(jìn)行數(shù)據(jù)保護(hù),而創(chuàng)新科存儲(chǔ)(UIT)的SVM的獨(dú)創(chuàng)的Redirect-on-write 快照技術(shù)(簡稱PIT)能更好,更加有效的保護(hù)電信級(jí)的數(shù)據(jù)。在本文中,我們將討論Redirect-on-write 快照技術(shù)的技術(shù)原理和如何做好電信級(jí)的容災(zāi)保護(hù)。
為了讓大家更好的理解Redirect-on-write 快照技術(shù)(簡稱PIT),我們首先從磁盤的機(jī)理開始討論。硬盤的每個(gè)盤片都有兩個(gè)盤面(side),即上、下盤盤面,安照順序從上至下從“0”開始依次編號(hào)。磁盤在格式化時(shí)被劃分成許多同心圓,這些同心圓軌跡叫磁道(track)。磁道從外向內(nèi)從0開始順序編號(hào)。所有盤面上的同一磁道構(gòu)成的一個(gè)圓柱,通常稱做柱面(cylinder),每個(gè)柱面上的磁頭由上而下從“0”開始編號(hào)。操作系統(tǒng)以扇區(qū)(sector)形式將信息存儲(chǔ)在硬盤上,每個(gè)扇區(qū)包括512個(gè)字節(jié)的數(shù)據(jù)和一些其他信息。
這些通常用來表示硬盤的物理地址,現(xiàn)在隨著硬盤容量增大我們用邏輯地址即線性地址(LBA)。LBA是一個(gè)地址轉(zhuǎn)化技術(shù),Block存放位置由索引表記錄,第一個(gè)Block LBA=0,第二個(gè)LBA=1以此類推。 這里面主要是柱面(cylinder)-頭(head)-扇區(qū)(sector) (CHS)配置。系統(tǒng)通過LBA到存儲(chǔ)設(shè)備獲取Block級(jí)的I/O。 一個(gè)簡單的例子就是,如果一個(gè)Volume映射到一個(gè)物理磁盤,LBA直接傳遞到磁盤控制器。由于一些復(fù)雜的因素(特別是RAID設(shè)備和SAN,邏輯驅(qū)動(dòng)器(LUN)通過LUN構(gòu)成) LBA從磁盤的應(yīng)用模式轉(zhuǎn)換成存儲(chǔ)設(shè)備能夠使用的。在復(fù)雜的部署中,特別是在存儲(chǔ)SAN環(huán)境中,這些LBA中的一部分會(huì)在眾多磁盤中分布。存儲(chǔ)系統(tǒng)控制器將單顆物理硬盤組成RAID Group,根據(jù)設(shè)定的Stripe Sieze條帶化大小(64KB/128KB)將數(shù)據(jù)以分布式的方式存放在眾多磁盤中用以提升性能,每次數(shù)據(jù)的讀寫都會(huì)調(diào)動(dòng)所有驅(qū)動(dòng)器。
Redirect-on-write 快照技術(shù)(PIT)
傳統(tǒng)的快照技術(shù)都是基于即寫即拷(copy-on-write)快照和分割鏡像快照。但創(chuàng)新科存儲(chǔ)的PIT技術(shù)完全不同與傳統(tǒng)的快照,而使用了指針重定向技術(shù)。
Redirect-on-write快照技術(shù)執(zhí)行時(shí)一個(gè)寫I/O請求會(huì)通過hash表查找LBA隊(duì)列和數(shù)據(jù)段. 不同的是如果在Hash表中發(fā)現(xiàn)了LBA,就在Snapshot卷上執(zhí)行了一個(gè)寫操作,在源卷上沒有執(zhí)行寫操作.
如果在Hash表中沒有發(fā)現(xiàn)LBA的寫操作,LBA新地址就插入到Hash表中,在Snapshot卷上執(zhí)行寫操作,Redirect-on-write保留原卷不受任何影響。那么,原數(shù)據(jù)就保留在源卷上,所有的變化寫在Snapshot卷上,point-in-time快照影像完全保留在源卷上。源卷在備份后或者創(chuàng)建了另外一個(gè)快照后就會(huì)更新。因此 redirect-on-write快照不會(huì)刪除復(fù)制,可以推遲到稍后的時(shí)間而不是在當(dāng)前的生產(chǎn)時(shí)間。
因?yàn)樽钚碌淖兓瘮?shù)據(jù)在Snapshot卷中,沒有變化的數(shù)據(jù)在源卷中,讀I/O需要合并這兩個(gè)卷中的數(shù)據(jù)。當(dāng)一個(gè)讀I/O 請求過來時(shí),讀請求會(huì)被分割成一個(gè)或者多個(gè)請求,這個(gè)取決于Snap_block 大小和LBA。每一個(gè)分割的讀請求,會(huì)利用LBA作為關(guān)鍵值在Hash表中尋找。如果發(fā)現(xiàn)了LBA,說明此Block最新的數(shù)據(jù)在Snapshot卷中。我們快照卷中讀取數(shù)據(jù)塊. 否則就是從源卷中讀取。當(dāng)所有的數(shù)據(jù)段讀取后,將需要的數(shù)據(jù)Block合并到Read Buffer中,給發(fā)起者發(fā)出可讀響應(yīng)。在這里面會(huì)用到許多I/O優(yōu)化技術(shù),一個(gè)直接的優(yōu)化就是利用Bloomfilter 技術(shù)快速?zèng)Q定我們將從哪個(gè)卷讀取。我們當(dāng)前用的是結(jié)合多種優(yōu)化方法在此并沒有展開論述。
數(shù)據(jù)段和隊(duì)列
對redirect-on-write來說數(shù)據(jù)段和隊(duì)列都是必需的。數(shù)據(jù)段將請求分割成幾個(gè)小的請求。I/O請求的LBA需要排列snap_block的LBA,這樣I/O請求可以從任何地址開始,也許是Snap_block的中間。
假設(shè)開始I/O的LBA為A,Snap_block 大小為B,I/O請求的大小為L。假設(shè)一個(gè)LBA就是一個(gè)邏輯扇區(qū)地址,一個(gè)扇區(qū)是512字節(jié)。
段請求和最后一個(gè)段請求可能會(huì)處理Block數(shù)據(jù)的一部分。我們簡單化了這些過程通過排列LBA地址到A-Remain而且從源卷第一個(gè)和最后一個(gè)Block段填滿其它數(shù)據(jù)。實(shí)際上snap_block只是被部分?jǐn)?shù)據(jù)填滿就像眾所周知的內(nèi)部數(shù)據(jù)段(碎片). 這樣的內(nèi)部段會(huì)導(dǎo)致性能損失,因?yàn)閮?nèi)部段不僅僅額外占用snapshot卷的空間,而且導(dǎo)致額外的I/O操作。幾個(gè)優(yōu)化方法會(huì)避免這些額外的開銷,例如變化的Block大小。但是這些優(yōu)化通常需要在Hash表中額外的數(shù)據(jù)結(jié)構(gòu)。這樣會(huì)導(dǎo)致Hash表非常復(fù)雜但優(yōu)化效果依然可以看到。
SVM快照使用描述
如下圖所示,假如生產(chǎn)數(shù)據(jù)的原始卷是存儲(chǔ)區(qū)域(1)(假設(shè)只包含1-16個(gè)數(shù)據(jù)塊,用對應(yīng)序號(hào)所示),如果系統(tǒng)要在時(shí)間點(diǎn)10:00時(shí)對原始卷做快照(SnapShot),SVM首先將原始卷凍結(jié),同時(shí)開辟臨時(shí)存儲(chǔ)區(qū)域(2)(缺省初始大小256M,其大小隨著數(shù)據(jù)塊改變量的增加會(huì)由SVM控制動(dòng)態(tài)改變 ),同時(shí)創(chuàng)建對應(yīng)的數(shù)據(jù)塊指針表(用于為文件系統(tǒng)重新定向被應(yīng)用改變的數(shù)據(jù)塊指針),也就是說,從時(shí)間點(diǎn)10:00開始,到下一個(gè)時(shí)間點(diǎn)(例如 11:00)快照建立之前,應(yīng)用程序?qū)ιa(chǎn)原始卷對應(yīng)的數(shù)據(jù)塊的改變都以緊密排列方式相應(yīng)地寫到快照_01的存儲(chǔ)區(qū)域(2),(例如 被改變的塊 2、4、5、8、9、11、16),此時(shí)生產(chǎn)系統(tǒng)將根據(jù)SVM為其定向的文件系統(tǒng)數(shù)據(jù)塊指針,同時(shí)訪問原始卷和快照_01,原始卷為只讀(暫時(shí)不可改寫,固態(tài)方式保存時(shí)間點(diǎn)10:00之前的生產(chǎn)卷的真實(shí)數(shù)據(jù)),快照_01為讀寫屬性(動(dòng)態(tài)方式保存時(shí)間點(diǎn)10:00之后原始生產(chǎn)卷對應(yīng)數(shù)據(jù)塊的改變狀態(tài))。此時(shí)從應(yīng)用的角度看來,存儲(chǔ)區(qū)域(1)和存儲(chǔ)區(qū)域(2)合為當(dāng)前的生產(chǎn)卷;
同理,當(dāng)時(shí)間點(diǎn)11:00的時(shí)刻創(chuàng)建快照_02時(shí),系統(tǒng)會(huì)將這之前的快照_01和原始卷同時(shí)凍結(jié),也就是說,從現(xiàn)在開始,原始生產(chǎn)卷對應(yīng)的數(shù)據(jù)塊的改變,將全部動(dòng)態(tài)地記錄到快照_03對應(yīng)的存儲(chǔ)區(qū)域(3)之中,此區(qū)域和先前凍結(jié)的快照_01以及原始卷,合為當(dāng)前的生產(chǎn)卷,應(yīng)用程序?qū)⒏鶕?jù)SVM為文件系統(tǒng)定向的指針,訪問當(dāng)前的生產(chǎn)卷,而此之前凍結(jié)的快照_01和原始卷,以只讀方式記錄著時(shí)間點(diǎn)11:00之前生產(chǎn)卷的數(shù)據(jù)狀態(tài);
當(dāng)對快照刪除或系統(tǒng)從快照進(jìn)行數(shù)據(jù)回滾時(shí),對應(yīng)的快照中的數(shù)據(jù)塊將回寫到它之前的存儲(chǔ)區(qū)域中,如下左圖所示,如果刪除快照_01,其當(dāng)中保存的此期間的數(shù)據(jù)塊的變化量,將按塊序號(hào)一一對應(yīng)回寫到原始卷的對應(yīng)塊的位置(Merge),原快照_01對應(yīng)的存儲(chǔ)區(qū)域(2)將釋放為自由空間,以備之后用于其它的快照臨時(shí)存儲(chǔ)空間創(chuàng)建;
同理,如果刪除快照_02,將發(fā)生如下右圖所示的類似情況,原快照_02所對應(yīng)的存儲(chǔ)區(qū)域(2)也將釋放為自由空間,系統(tǒng)中不存在小的碎塊在存儲(chǔ)中遍布的情況;
PIT快照技術(shù)在電信數(shù)據(jù)容災(zāi)上的使用
從以上的原理描述中我們可以看到,Redirect-on-write快照技術(shù)能通過指針的重定向,保留各個(gè)時(shí)間不同的數(shù)據(jù)版本。而這些數(shù)據(jù)版本能讓用戶快速的將應(yīng)用切換到以前不同的時(shí)間點(diǎn)。大家看看下圖:
Source卷中的數(shù)據(jù)到拍第一個(gè)快照的時(shí)候就凍結(jié)了,比如9點(diǎn)中,我們開始做第一個(gè)快照PIT1,那么所有的數(shù)據(jù)新增及變化都將加入到PIT1的卷中。到了10點(diǎn),我們做第二個(gè)快照的時(shí)候,又將SOURCE和PIT1卷都進(jìn)行凍結(jié),而10點(diǎn)以后的所有數(shù)據(jù)變化都將放入PIT2卷中。 大家可以看到這樣的好處就是,我們同時(shí)保留了9點(diǎn),10點(diǎn),和現(xiàn)在的生產(chǎn)數(shù)據(jù)。 并且以前的數(shù)據(jù)版本可以生成VIEW給別的機(jī)器使用。 這樣的系統(tǒng),第一可以作為一個(gè)很好的測試系統(tǒng), 每個(gè)測試人員都可以針對自己想要的數(shù)據(jù)進(jìn)行測試,而不對生產(chǎn)系統(tǒng)造成影響。 第二,將每個(gè)PIT卷復(fù)制到容災(zāi)站點(diǎn)就可以進(jìn)行數(shù)據(jù)的保護(hù)及容災(zāi)。并且UIT SVM設(shè)備獨(dú)有的通過IP 的斷點(diǎn)續(xù)傳功能能保證,將數(shù)據(jù)傳遞到世界的任何地方。 如圖:
生產(chǎn)站點(diǎn)定期的做邏輯快照,將新增和變化的數(shù)據(jù)放在新的快照卷中,然后將凍結(jié)的快照卷不斷的復(fù)制到容災(zāi)站點(diǎn),和傳統(tǒng)的容災(zāi)方式比較: UIT 的PIT快照技術(shù)能讓容災(zāi)端隨時(shí)查看復(fù)制過來的結(jié)構(gòu)化數(shù)據(jù),并且不需要帶寬上有很高的要求。
創(chuàng)新科存儲(chǔ)(UIT)的PIT快照技術(shù)顛覆了傳統(tǒng)的磁盤式容災(zāi),容災(zāi)站點(diǎn)隨時(shí)查看數(shù)據(jù)使容災(zāi)系統(tǒng)的功能多元化,不僅可以做容災(zāi)中心,也可以作為數(shù)據(jù)查詢中心和報(bào)告及數(shù)據(jù)統(tǒng)計(jì)中心。 在電信級(jí)的高可用數(shù)據(jù)保護(hù)需求下,相信創(chuàng)新科存儲(chǔ)(UIT)的PIT快照技術(shù)能在數(shù)據(jù)容災(zāi)及保護(hù)領(lǐng)域發(fā)揮更大的作用。
來源:C114