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