笑話(huà)聽(tīng)罷,我們來(lái)講講高端存儲(chǔ)快照實(shí)現(xiàn)的兩種技術(shù)。
目前實(shí)現(xiàn)快照一般有兩種方法,傳統(tǒng)的存儲(chǔ)快照技術(shù)COW(Copy-On-Write)和現(xiàn)在漸漸流行的基于寫(xiě)重定向的存儲(chǔ)快照技術(shù)ROW(Redirect-On-Write)。
3PAR采用COW技術(shù),我們用它舉例來(lái)看一下實(shí)現(xiàn)原理:
大家看到,快照創(chuàng)建的以后,如果有對(duì)原卷的數(shù)據(jù)修改,修改的數(shù)據(jù)第一次被修改的時(shí)候就把數(shù)據(jù)COPY到快照卷里,如圖中的D。只需要第一次修改的時(shí)候復(fù)制,因此有些書(shū)也把這種技術(shù)叫COFW(Copy-On-First-Write)。
而IBM XIV采用完全一種不同的技術(shù)ROW(Redirect-On-Write),我們來(lái)看一下XIV如何做的:
大家可以看到,ROW的不做復(fù)制,如果原卷有數(shù)據(jù)塊被修改,重新寫(xiě)到一個(gè)新的地方好了,原卷的修改一下數(shù)據(jù)塊指針,這個(gè)動(dòng)作非???,而快照卷不用做任何改變。
估計(jì)你馬上會(huì)問(wèn)我,那個(gè)技術(shù)好,我就知道為這么問(wèn),哈哈。
這又是一個(gè)藝術(shù)的問(wèn)題,為啥這也是一個(gè)藝術(shù)問(wèn)題,別急,聽(tīng)我說(shuō)。
COW最大的問(wèn)題是對(duì)寫(xiě)性能有影響。第一次修改原卷,需要復(fù)制數(shù)據(jù),因此需要多一次讀寫(xiě)的數(shù)據(jù)塊遷移過(guò)程。這個(gè)就比較要命,應(yīng)用需要等待時(shí)間比較長(zhǎng)。但原卷數(shù)據(jù)的布局沒(méi)有任何改變,因此對(duì)讀性能沒(méi)有任何影響。
ROW最大的問(wèn)題是對(duì)讀性能影響比較大。ROW寫(xiě)的時(shí)候性能基本沒(méi)有損耗,只是修改指針,實(shí)現(xiàn)效率很高。但多次讀寫(xiě)后,原卷的數(shù)據(jù)就分散到各個(gè)地方,對(duì)于連續(xù)讀寫(xiě)的性能不如COW。
由于這兩種實(shí)現(xiàn)機(jī)制不同,因此性能也不同,一般來(lái)說(shuō),ROW就像采用電子快門(mén)的照相機(jī),拍照的速度快,每分鐘得到的快照數(shù)就多;而COW就像采用機(jī)械快門(mén)的傳統(tǒng)相機(jī),快門(mén)的速度慢,系統(tǒng)支持的快照數(shù)一般都比較少。下表是我整理的各個(gè)廠(chǎng)商的高端存儲(chǔ)性能,大家對(duì)比一下就知道差別了。
你可能會(huì)問(wèn),怎么沒(méi)有HW HVS。我找了很多資料,都沒(méi)有找到HVS的快照的資料,但我曾經(jīng)看到一份華為中端存儲(chǔ)的資料,說(shuō)采用的也是COW技術(shù),性能和3PAR一樣256。因此,考慮到HVS也采用3PAR一樣的RAID 2.0技術(shù),因此,個(gè)人估計(jì)高端也一樣或者比中端高一些。因此,大家理解的時(shí)候可以等同3PAR好了。
COW是最傳統(tǒng)的實(shí)現(xiàn)方法,當(dāng)然,現(xiàn)在COW也有很多改進(jìn),比如采用異步COW,現(xiàn)在的高端存儲(chǔ)Cache都很大,如HVS最大支持3TB,因此可以先寫(xiě)到CACHE里面就回復(fù)主機(jī)寫(xiě)完了,這樣應(yīng)用就不用等待。等落盤(pán)的時(shí)候再觸發(fā)快照復(fù)制的動(dòng)作。還有,高端存儲(chǔ)一般是數(shù)據(jù)庫(kù)的應(yīng)用,這些應(yīng)用有一個(gè)特點(diǎn),就是寫(xiě)少讀多,一般是1:3到1:10。這個(gè)也比較容易理解,你銀行存了一筆錢(qián)(寫(xiě)),但可能經(jīng)常查詢(xún)余額(讀),就怕錢(qián)少了,哈哈。因此,COW這種方式在還是比較適合這種應(yīng)用的。
但現(xiàn)在的備份技術(shù)發(fā)展也對(duì)快照提出了更高的要求,用戶(hù)需要更快更多的快照來(lái)滿(mǎn)足RTO/RPO的要求。人總是很貪婪的。IBM XIV由于底層采用非常小的1M大小的CHUNK,因此,本來(lái)數(shù)據(jù)就全部打散的非常均勻了,因此高端存儲(chǔ)之父深知原來(lái)symmetrix的缺點(diǎn),讓XIV直接采用ROW技術(shù),個(gè)人感覺(jué)是一個(gè)亮點(diǎn)。因?yàn)镽OW的缺點(diǎn)是連續(xù)讀寫(xiě)比較慢,但XIV的CHUNK比較小,如果是大數(shù)據(jù)庫(kù)的讀寫(xiě),可以分散到很多個(gè)CHUNK里面,因此,讀寫(xiě)性能應(yīng)該影響不大。但3PAR的CHUNK是1G,太大了些,但設(shè)計(jì)的時(shí)候可以按照extend的粒度來(lái)打散,應(yīng)該問(wèn)題也不大。估計(jì)是10+年前,ROW的技術(shù)還沒(méi)有流行吧。而HW,估計(jì)也是由于延續(xù)使用了中端存儲(chǔ)的快照代碼,有了歷史的包袱,因此也沒(méi)有采用ROW技術(shù)。當(dāng)然XIV的ROW實(shí)現(xiàn)有一個(gè)問(wèn)題,因?yàn)樗臄?shù)據(jù)塊是1M大小,上面不在細(xì)分了,因此如果比較小的I/O,如每次只寫(xiě)8K,那么8K需要寫(xiě)到新的地方,原來(lái)的數(shù)據(jù)也要COPY過(guò)來(lái),ROW的優(yōu)勢(shì)就沒(méi)有了。
從XIV的實(shí)現(xiàn)機(jī)制看,我感覺(jué)不太適合數(shù)據(jù)庫(kù)應(yīng)用,如ORACLE目前缺省的I/O塊大小還是8K,這樣ROW的優(yōu)勢(shì)就發(fā)揮不出來(lái)了。
個(gè)人認(rèn)為,RAID 2.0和ROW是個(gè)絕配,雖然現(xiàn)在3PAR和HW在快照性能這塊已經(jīng)強(qiáng)于很多傳統(tǒng)的高端存儲(chǔ)廠(chǎng)商,但如果采用ROW將會(huì)給用戶(hù)帶來(lái)更大的價(jià)值。當(dāng)然,我建議廠(chǎng)商實(shí)現(xiàn)的時(shí)候能克服XIV的缺陷,可以依據(jù)Grain的粒度來(lái)做最好,但這樣可能管理的開(kāi)銷(xiāo)會(huì)變大,這又是一個(gè)藝術(shù)的問(wèn)題,還是由廠(chǎng)商去回答吧,我這等屌絲也就是唧歪一下罷了。
總之,個(gè)人認(rèn)為ROW應(yīng)該是快照的發(fā)展方向,據(jù)說(shuō)EMC的中端支持COW的同時(shí)也支持ROW了。
最近我重點(diǎn)看了IBM的DS8870的手冊(cè),800多頁(yè)全英文的,看得我頭都大了。前面介紹open system的時(shí)候有一個(gè)錯(cuò)誤,這里糾正一下。
IBM說(shuō)DS8000支持open systems and system z/os。從IBM的描述來(lái)看,如果z系列大機(jī)安裝linux應(yīng)該算open system。另外,DS8000的FC主機(jī)接口支持FCP和FICON協(xié)議,不需要單獨(dú)的FICON口。我 原來(lái)以為DS8000分不同的口,發(fā)現(xiàn)物理層都一樣,只是上面管理員要選擇跑FCP協(xié)議還是FICON協(xié)議,但不能同時(shí)支持。因此3PAR和HW HVS這些只支持open system的高端存儲(chǔ),也可以支持大機(jī)了,只要和大機(jī)做一個(gè)兼容性的測(cè)試就可以了。以后,大機(jī)和open system并不能對(duì)立來(lái)看,這是我的理解。
上面我們說(shuō)了快照實(shí)現(xiàn)的兩種方法COW和ROW。雖然采用同樣的技術(shù),但每個(gè)廠(chǎng)商實(shí)現(xiàn)的細(xì)節(jié)都 不同,加上底層RAID技術(shù)不同,因此空間的利用率方面差距也比較大。大家看到,同樣采用COW技術(shù),3PAR和HW由于底層采用RAID 2.0技術(shù),因此實(shí)現(xiàn)的效率更高,性能指標(biāo)也高不少。因?yàn)镽IAD 2.0具備完全塊虛擬化能力,存儲(chǔ)空間是在寫(xiě)時(shí)完成分配,而且具備非常靈活的擴(kuò)展能力。
1、在創(chuàng)建快照的時(shí)候,不用為快照匹配資源池。按照COW原理,當(dāng)快照需要額外空間保存數(shù)據(jù)時(shí),RAID 2.0會(huì)自動(dòng)從存儲(chǔ)池中分配空閑空間給快照。
2、當(dāng)存儲(chǔ)池空閑存儲(chǔ)空間不足時(shí),只需要簡(jiǎn)單給存儲(chǔ)池?cái)U(kuò)容即可。
3、因?yàn)闃I(yè)務(wù)LUN和快照共享存儲(chǔ)池,所以不會(huì)出現(xiàn)資源池浪費(fèi)或不足等存儲(chǔ)空間管理問(wèn)題。
但采用傳統(tǒng)RAID的高端存儲(chǔ),如EMC V-MAX,在最新的Enginuity version 5876才加入TimeFinder VP Snap功能,只有針對(duì)thin LUN做快照具有上面的部分優(yōu)點(diǎn),一般LUN的快照系統(tǒng)需要保留20%-30%左右的預(yù)留快照空間才行。
快照另外一個(gè)非常重要的特性是快照一致性組(Consistency Group)。我們今天重點(diǎn)來(lái)介紹這個(gè)功能對(duì)于高端存儲(chǔ)的意義。
這個(gè)功能就是支持多個(gè)LUN或者叫卷volume同時(shí)做快照,保證數(shù)據(jù)的一致性。我們舉一個(gè)生活的照集體照的例子來(lái)說(shuō)明這個(gè)這個(gè)功能的用處。
我的大情人在銀行工作,她曾經(jīng)告訴我,她們銀行很NB,每次部門(mén)合影,別人一般只會(huì)喊“茄子”,她們都是這樣喊的:
攝影師:大家別動(dòng),馬上要拍照了。
攝影師:我們銀行什么最多?
眾人:錢(qián)!(啪,第一張快照)
攝影師:錢(qián)多怎么辦?
眾人:花?。ㄅ荆诙埧煺眨?/p>
攝影師:花完怎么辦?
眾人:搶?zhuān)。ㄅ?,第三張快照?/p>
你看,是否是很有氣勢(shì)。以后你們照合影都可以這么學(xué),把銀行改成你們部門(mén)就好了。不過(guò)現(xiàn)在銀行銀根缺緊,應(yīng)該沒(méi)這么牛氣了吧。
為什么要大家統(tǒng)一喊“錢(qián)”、“花”、“搶”?意思這個(gè)口型類(lèi)似“茄子”,說(shuō)起來(lái)像笑的樣子,關(guān)鍵是同時(shí)笑,這張集體照才完美。
看這樣的畢業(yè)照多美,是吧。為什么一般集體照要多照幾張,就是怕有些人臉長(zhǎng),笑容爬得慢,不同步。你看這個(gè)小伙就不老實(shí),需要重拍。
快照一致性組就是解決這個(gè)問(wèn)題。我說(shuō)一個(gè)ORACLE數(shù)據(jù)庫(kù)的例子,10多年前我還是一個(gè)認(rèn)證的ORACLE DBA(當(dāng)時(shí)中國(guó)認(rèn)證的人很少,我們封閉學(xué)了一個(gè)月,考了5門(mén)課才拿到證書(shū)。據(jù)說(shuō)當(dāng)時(shí)如果直接技術(shù)移民加拿大都沒(méi)有問(wèn)題,和CCIE有一拼。不過(guò)現(xiàn)在好像 掉下個(gè)椰子都會(huì)砸著兩,哎),我們建數(shù)據(jù)庫(kù)的時(shí)候一般采用多個(gè)裸設(shè)備(LUN),不同的LUN用來(lái)放不同的數(shù)據(jù)。如果采用陣列的快照來(lái)做數(shù)據(jù)庫(kù)的備份,必 須所有的LUN都是一個(gè)時(shí)間點(diǎn)的才行,這樣數(shù)據(jù)庫(kù)恢復(fù)的時(shí)候才能起來(lái),否則數(shù)據(jù)庫(kù)必須回滾到某一個(gè)一致的時(shí)間點(diǎn),意味數(shù)據(jù)的丟失。比較完美的做法就是在主 機(jī)安裝一個(gè)快照的agent,最好是多路徑軟件具備這個(gè)功能(據(jù)說(shuō)華為已經(jīng)整合在一起了),在高端存儲(chǔ)要做快照的時(shí)候,對(duì)主機(jī)的快照agent說(shuō),別動(dòng), 要照相了。主機(jī)agent接受到攝影師的命令后,把ORACEL主機(jī)緩存的內(nèi)容flush一下到陳列來(lái),然后hold住,陣列也盡快把cache的內(nèi)容 flush到硬盤(pán)里,ORACLE用到的所有硬盤(pán)一塊喊”茄子“,攝像師一按快門(mén),一幅完美的快照就產(chǎn)生了。
一致性組除了保證照相的時(shí)候一致性外,還有恢復(fù)的時(shí)候要一致性恢復(fù)。這塊的實(shí)現(xiàn)的重要性就不如照相的時(shí)候重要,可以人工選擇同一時(shí)間的LUN快照恢復(fù)就可以了。最重要的是照相的時(shí)候必須要一致,而且這個(gè)人工干不了。
高端存儲(chǔ)手冊(cè)里面的KiB,MiB,GiB是啥意思?
接下來(lái)隨便聊一個(gè)我過(guò)去不太注意的小細(xì)節(jié)。也就是在我看使用的廠(chǎng)商手冊(cè)里面,經(jīng)常出現(xiàn)KiB,MiB,GiB這些術(shù)語(yǔ),我詳細(xì)里面有很多童鞋了解它的意思,我也相信很多童鞋不太了解。
這個(gè)原因只要是KiB,MiB,GiB是采用2進(jìn)制來(lái),而我們常見(jiàn)的KB,MB,GB都是采用10進(jìn)制來(lái)表示的單位。
這是十進(jìn)制的單位:
這是采用二進(jìn)制的單位:
造成這種原因主要是計(jì)算機(jī)操作系統(tǒng)都是采用二進(jìn)制來(lái)表示的,而一般硬盤(pán)廠(chǎng)商都喜歡采用十進(jìn)制來(lái)表示容量(估計(jì)這樣容量就可以大一些?),害得我們經(jīng)常需要在這兩種容量中算來(lái)算去。
在 購(gòu)買(mǎi)硬盤(pán)之后,細(xì)心的人會(huì)發(fā)現(xiàn),在操作系統(tǒng)當(dāng)中硬盤(pán)的容量與官方標(biāo)稱(chēng)的容量不符,都要少于標(biāo)稱(chēng)容量,容量越大則這個(gè)差異越大。標(biāo)稱(chēng)40GB的硬盤(pán),在操作 系統(tǒng)中顯示只有38GB;80GB的硬盤(pán)只有75GB;而120GB的硬盤(pán)則只有114GB。這并不是廠(chǎng)商或經(jīng)銷(xiāo)商以次充好欺騙消費(fèi)者,而是硬盤(pán)廠(chǎng)商對(duì)容 量的計(jì)算方法和操作系統(tǒng)的計(jì)算方法有不同而造成的,不同的單位轉(zhuǎn)換關(guān)系造成的。
眾所周知,在計(jì)算機(jī)中是采用二進(jìn)制,在電腦世界里,以2的次 方數(shù)為“批量”處理Byte會(huì)方便一些,整齊一些。每1024Byte為1KB,每1024KB為1MB,每1024MB為1GB,每1024GB為 1TB,而在國(guó)際單位制中TB、GB、MB、KB是“1000進(jìn)制”的數(shù),為此國(guó)際電工協(xié)會(huì)(IEC)擬定了"KiB"、“MiB”、“GiB"的二進(jìn)制單位,專(zhuān)用來(lái)標(biāo)示“1024進(jìn)位”的數(shù)據(jù)大?。?/strong>而 硬盤(pán)廠(chǎng)商在計(jì)算容量方面是以每1000為一進(jìn)制的,每1000字節(jié)為1KB,每1000KB為1MB,每1000MB為1GB,每1000GB為1TB, 在操作系統(tǒng)中對(duì)容量的計(jì)算是以1024為進(jìn)位的,并且并未改為"KiB"、“MiB”、“GiB"的二進(jìn)制單位,這差異造成了硬盤(pán)容量“縮水”。
還有,硬盤(pán)需要分區(qū)和格式化,操作系統(tǒng)之間存在著差異,再加上安裝操作系統(tǒng)時(shí)的復(fù)制文件的行為,硬盤(pán)會(huì)被占用更多空間,所以在操作系統(tǒng)中顯示的硬盤(pán)容量和標(biāo)稱(chēng)容量會(huì)存在差異,而硬盤(pán)的兩類(lèi)容量差值在5%-10%左右應(yīng)該是正常的。
大家了解了這些知識(shí)后,希望以后看到帶“i"的單位就知道是啥意思了,不要以為是廠(chǎng)商創(chuàng)造的新術(shù)語(yǔ)哦。
不過(guò),我看到很多國(guó)產(chǎn)的產(chǎn)品手冊(cè),好像從來(lái)不區(qū)分這兩個(gè)單位,因此,我感覺(jué)嚴(yán)謹(jǐn)性不夠。比如,IBM DS8870的Extent大小,寫(xiě)得很清楚是1GiB,XIV的手冊(cè)也很?chē)?yán)謹(jǐn),MB和MiB區(qū)別得很清楚。我們中國(guó)人需要學(xué)習(xí)這種嚴(yán)謹(jǐn)?shù)膶?xiě)法(啊,又扔 臭雞蛋,我錯(cuò)了,行嗎,我前面的文章所有的單位都應(yīng)該帶i,除了表示硬盤(pán)容量的單位外??磥?lái)講別人容易,自己改起來(lái)難?。?。
好的,今天我們先聊到這里。希望大家積極反饋你的意見(jiàn)和建議,微信掃描如下二維碼,關(guān)注微信公眾號(hào)“高端存儲(chǔ)知識(shí)”,與作者微信互動(dòng)。