[點(diǎn)晴永久免費(fèi)OA]也談騰訊云的靜默損壞
騰訊云在這次事件中的結(jié)論表述為因受所在物理硬盤(pán)固件版本Bug導(dǎo)致的靜默錯(cuò)誤,文件系統(tǒng)元數(shù)據(jù)損壞:根據(jù)這個(gè)表述,故障應(yīng)出現(xiàn)在硬盤(pán)固件故障導(dǎo)致的文件系統(tǒng)元數(shù)據(jù)損壞。這其中,涉及具備因果關(guān)系的三個(gè)知識(shí)點(diǎn): 硬盤(pán)固件故障—>文件系統(tǒng)元數(shù)據(jù)損壞—>文件損壞。 在此大致畫(huà)一下騰訊云可能用到的存儲(chǔ)架構(gòu)方案。 帶*號(hào)的是不一定存在的存儲(chǔ)鏈。事實(shí)上,這個(gè)邏輯肯定不準(zhǔn)確,比如有些環(huán)節(jié)精減或不需要,有些環(huán)節(jié)有更詳細(xì)的設(shè)計(jì)等。但是不是和真實(shí)場(chǎng)景一致不重要,重要的是,問(wèn)題如果出現(xiàn),總會(huì)出現(xiàn)在我列出的項(xiàng)或我沒(méi)列出的項(xiàng)中(廢話(huà)),這些項(xiàng)是相互關(guān)聯(lián)的。 我們?cè)僦貜?fù)一下現(xiàn)象:硬盤(pán)固件故障(層1故障)導(dǎo)致的文件系統(tǒng)元數(shù)據(jù)損壞,從而導(dǎo)致部分文件校驗(yàn)出錯(cuò),導(dǎo)致文件損壞。針對(duì)現(xiàn)象,努力從上述10個(gè)環(huán)節(jié)匹配,每一層會(huì)有可能出錯(cuò),導(dǎo)致上述故障嗎: 一、 第1層:存儲(chǔ)介質(zhì) 以硬盤(pán)為例,每個(gè)構(gòu)成數(shù)據(jù)的最小單位扇區(qū)都會(huì)有嚴(yán)格的校驗(yàn),包括扇區(qū)頭部的CRC校驗(yàn)以及地址標(biāo)識(shí)校驗(yàn)。理論上,如果層1的數(shù)據(jù)出現(xiàn)磁力失真(或閃存狀態(tài)丟失)等比特出錯(cuò),其頭部校驗(yàn)不匹配時(shí),介質(zhì)控制器就會(huì)向上層反饋錯(cuò)誤(一般表現(xiàn)為壞扇區(qū)),上層會(huì)啟動(dòng)修正模式進(jìn)行修正。 當(dāng)然也有例外,比如硬盤(pán)內(nèi)部程序出錯(cuò),根本不按上述原則執(zhí)行,忽略校驗(yàn)值的情況下,任何對(duì)數(shù)據(jù)的篡改都是可以的。可以表現(xiàn)為騰訊所說(shuō)的靜默損壞(即層1在合理的邏輯里偷梁換柱)。這種情況,基本大帽子就能扣在硬盤(pán)固件BUG這上面了,但硬盤(pán)固件這種BUG是致命的,等同于我們存進(jìn)銀行的錢(qián)不知什么原因變多或變少,沒(méi)有硬盤(pán)廠(chǎng)商站出來(lái)承認(rèn),也沒(méi)有緊急發(fā)布BUG修復(fù)固件,完全歸因于硬盤(pán)固件,可能偏激了些(也可能事件背后有固件BUG的原因,那也應(yīng)該是添油加醋型的)。 二、 第2層:RAID RAID自身有冗余算法,可實(shí)現(xiàn)在部分介質(zhì)(硬盤(pán))損壞后,由其他成員及算法控制來(lái)接管損壞硬盤(pán)的數(shù)據(jù)服務(wù),保證上層業(yè)務(wù)不中斷,不出故障。但RAID也并非完全可靠。 一種錯(cuò)誤是軟RAID中的寫(xiě)漏洞(write hole),如果是軟RAID,這無(wú)法避免,可能導(dǎo)致騰訊本次事故。但軟RAID是玩具產(chǎn)品,自然騰訊是不會(huì)用這種方案的。 還有可能的錯(cuò)誤是buffer dirty,當(dāng)緩沖數(shù)據(jù)掉電清空,或有意無(wú)意損壞后,會(huì)導(dǎo)致數(shù)據(jù)出現(xiàn)本例的表現(xiàn)錯(cuò)誤。但這個(gè)原因可以很容易推到控制器BUG上面,騰訊沒(méi)提及這個(gè)原因,或者是他們沒(méi)找到病根,或者的確和這個(gè)無(wú)關(guān)。 還有最可能的錯(cuò)誤是RAID中超過(guò)冗余數(shù)量的磁盤(pán)損壞。比如RAID5只支持一塊盤(pán)損壞,但現(xiàn)實(shí)中出現(xiàn)了: 情形1:同時(shí)2塊或以上硬盤(pán)損壞 情形2:1塊損壞后未及時(shí)重建,第2塊又損壞 情形2出現(xiàn)的可能性非常大,幾乎IT類(lèi)公司沒(méi)有不濕鞋的,只是數(shù)據(jù)或不重要,或未千萬(wàn)公眾效應(yīng)。本次騰訊事故,情形2導(dǎo)致的數(shù)據(jù)災(zāi)難,不是沒(méi)有可能。想象一下,以RAID5為例,若底層RAID有硬盤(pán)壞,管理人員沒(méi)及時(shí)跟進(jìn)重建,希捷負(fù)載加重后,其他硬盤(pán)壞,是非常正常的事情。更有一種情況,與硬盤(pán)固件有關(guān),就是硬盤(pán)已經(jīng)有壞道了,但并未碰觸到壞道區(qū),這時(shí)表現(xiàn)一切完好,一旦重建,就會(huì)導(dǎo)致RAID崩潰。 一般而言,工程師的修復(fù)方法就是強(qiáng)制上線(xiàn),讓帶病的硬盤(pán)強(qiáng)行工作,也可能不懂的工程師隨便上線(xiàn)了舊掉線(xiàn)的硬盤(pán),這時(shí),就會(huì)表現(xiàn)為大多數(shù)數(shù)據(jù)可訪(fǎng)問(wèn),但部分?jǐn)?shù)據(jù)(尤其較新)出現(xiàn)損壞,與騰訊公開(kāi)的表現(xiàn)相似。 三、 第3層:虛擬卷層 虛擬卷往往用在大的云存儲(chǔ)中心,簡(jiǎn)單地舉例來(lái)說(shuō),如果由1000個(gè)硬盤(pán)構(gòu)成的一個(gè)存儲(chǔ)系統(tǒng),再按8硬盤(pán)一組的方式進(jìn)行存儲(chǔ)劃分,會(huì)有很多問(wèn)題(高故障、空間利用不集中等)。為此,很多廠(chǎng)商開(kāi)始提及虛擬化存儲(chǔ),方法各有不同,但基本就是存儲(chǔ)池化---意思是所有可用的空間在確保案例的前提下,匯總到一個(gè)統(tǒng)一管理的“池”中,再根據(jù)需求靈活分配虛擬磁盤(pán)。 一種方法是把所有硬盤(pán)放到池子里,再切塊組RAID,再組個(gè)存儲(chǔ)池,再劃分虛擬卷。華為把這個(gè)技術(shù)稱(chēng)為RAID2.0,其實(shí)HP EVA、3PAR也都按這個(gè)技術(shù)在實(shí)現(xiàn)(網(wǎng)絡(luò)上的主流資料描述HP EVA的算法均有誤),DELL康貝(Compellent)都是這樣實(shí)現(xiàn)。這種思路硬盤(pán)如果足夠多,在使用前期安全性很好(有足夠多的混在隊(duì)伍中的替補(bǔ),可以快速替換故障數(shù)據(jù)塊),但后期隨著損壞硬盤(pán)數(shù)量的增加(尤其越是自動(dòng)替換,管理人員就越松懈),故障率就會(huì)增加。 舉個(gè)HP-EVA的例子,一組存儲(chǔ)144個(gè)硬盤(pán),在崩潰臨界點(diǎn),先后有近40個(gè)硬盤(pán)報(bào)故障。故障的根源其實(shí)來(lái)源于硬盤(pán)預(yù)警失效、控制器又完全呆傻的BUG。40個(gè)故障硬盤(pán)遠(yuǎn)遠(yuǎn)超過(guò)可以激活系統(tǒng)的故障數(shù)量,就導(dǎo)致所有部署在本存儲(chǔ)上的數(shù)據(jù)全部下線(xiàn)。一般HP官方的最高解決辦法(美國(guó)的一線(xiàn)),就是用指令強(qiáng)行激活存儲(chǔ),讓存儲(chǔ)自己計(jì)算缺失數(shù)據(jù),當(dāng)數(shù)據(jù)的確落到壞道處無(wú)法校驗(yàn)生成時(shí),就會(huì)用舊狀態(tài)數(shù)據(jù)(EVA快速重建時(shí)會(huì)可能保留某些數(shù)據(jù)塊的舊狀態(tài))或全0代替。這樣,就會(huì)導(dǎo)致上層文件系統(tǒng)故障。文件系統(tǒng)故障就是表現(xiàn)為元文件故障,否則元文件沒(méi)壞,文件系統(tǒng)就不會(huì)壞,頂多表現(xiàn)為文件內(nèi)容不正確。 騰訊本次的事故也有這個(gè)可能。 另一種方法是把所有硬盤(pán)按xD+yP的方式構(gòu)建RAID(如8個(gè)硬盤(pán)的數(shù)據(jù),配一個(gè)硬盤(pán)的校驗(yàn)),再把所有的RAID放到池里,再?gòu)某刂袆澐痔摂M磁盤(pán)。IBM DS8000、HP X20000、DELL EqualLogic都用這個(gè)方案。這是非常垃圾的方案,IBM和HP的上述兩類(lèi)存儲(chǔ)都是上千萬(wàn)一套的產(chǎn)品,但故障風(fēng)險(xiǎn)極大,我們的國(guó)企,政府常用,也常出問(wèn)題,只是沒(méi)人知道。故障主要來(lái)源于不斷放大的RAID風(fēng)險(xiǎn),每一組RAID假設(shè)有1/10000的概率損壞(如第2層中的情形2),如果1000個(gè)硬盤(pán),有100組,損壞概率就放大了100倍,想想也可怕。但騰訊本次事故不太可能用IBM、HP、EMC的存儲(chǔ),因?yàn)樘F了,又不是存自己的核心數(shù)據(jù)??赡苡行S(chǎng)商或騰訊自己用軟件定義的方式搭建本類(lèi)存儲(chǔ),損壞的可能也就如同第2層中的情形2。 四、 第4層:虛擬卷快照 快照是對(duì)某個(gè)數(shù)據(jù)集某個(gè)時(shí)間段的差異數(shù)據(jù)組合??煺占B加到其父集上,就可以表現(xiàn)為最新的數(shù)據(jù)副本。集中在快照上的故障往往因人為發(fā)生,比如以為某個(gè)快照副本已經(jīng)失效,刪除后發(fā)現(xiàn)刪錯(cuò)了;比如在回到某個(gè)快照狀態(tài)時(shí)選錯(cuò)了,再也退不回去等等。 如果照著騰訊本次的事故,至少有一種可能會(huì)導(dǎo)致故障現(xiàn)象的發(fā)生:管理人員因故(遷移、維護(hù)等原因)對(duì)數(shù)據(jù)做了快照,在清理臨時(shí)數(shù)據(jù)時(shí)不小心刪除了快照副本,緊急搶救后,快照數(shù)據(jù)救回來(lái)有部分損壞,快照合并后表現(xiàn)為部分?jǐn)?shù)據(jù)損壞。當(dāng)然,這個(gè)可能性不大,騰訊本次事故中沒(méi)有選擇數(shù)據(jù)恢復(fù)專(zhuān)業(yè)公司介入(只要有選擇數(shù)據(jù)恢復(fù)方案,北亞不會(huì)不知道),應(yīng)該不會(huì)有這種實(shí)施可能。 五、 第5層:大數(shù)據(jù)或云存儲(chǔ)層 出問(wèn)題的騰訊云是基于虛擬化技術(shù)構(gòu)建的,涉及虛擬化,就一定會(huì)設(shè)計(jì)資源的集中分配。涉及數(shù)據(jù)部分,單一或獨(dú)立存儲(chǔ)很難響應(yīng)IO的不確定性峰谷請(qǐng)求,所以,騰訊應(yīng)該會(huì)設(shè)計(jì)Hadoop之類(lèi)的平臺(tái)來(lái)提供數(shù)據(jù)資源分配。 在大數(shù)據(jù)平臺(tái)的設(shè)計(jì)邏輯里,數(shù)據(jù)IO資源會(huì)以可能平均地分配在所有節(jié)點(diǎn)中。而管理他們的元數(shù)據(jù)或集中或分布式。邏輯上,用戶(hù)數(shù)據(jù)與元數(shù)據(jù)是獨(dú)立的。 但現(xiàn)在的大數(shù)據(jù)平臺(tái)往往是基于傳統(tǒng)單機(jī)文件系統(tǒng)為載體進(jìn)行架構(gòu)。單機(jī)文件系統(tǒng)的操作手段、命令并未廢止。所以,在一些情況下,大數(shù)據(jù)平臺(tái)出故障,可能會(huì)導(dǎo)致騰訊類(lèi)似的數(shù)據(jù)災(zāi)難。 僅僅是舉幾個(gè)想象的例子。 如果維護(hù)人員不小心刪除大數(shù)據(jù)平臺(tái)下一層文件系統(tǒng)上的某些數(shù)據(jù)塊,大數(shù)據(jù)平臺(tái)的冗余也無(wú)法還原某個(gè)數(shù)據(jù)塊的話(huà),就會(huì)表現(xiàn)某個(gè)用戶(hù)的虛擬機(jī)數(shù)據(jù)缺失。 如果維護(hù)人員沒(méi)及時(shí)維護(hù)節(jié)點(diǎn),某些節(jié)點(diǎn)損壞,超過(guò)了冗余級(jí)別,也會(huì)導(dǎo)致某個(gè)用戶(hù)的虛擬機(jī)數(shù)據(jù)缺失(也有可能用VMware vSAN之類(lèi)的技術(shù),同樣這種可能也存在)。 騰訊的事故是否如此,不得而知。 六、 第6層:虛擬化文件系統(tǒng) VMware vsphere、Xen、KVM或Hyper-V是專(zhuān)門(mén)的虛擬化系統(tǒng)平臺(tái)。這些虛擬化平臺(tái),為了實(shí)現(xiàn)塊級(jí)別的同時(shí)訪(fǎng)問(wèn),且適應(yīng)虛擬機(jī)的大塊分配原則,有時(shí)要設(shè)計(jì)自己的文件系統(tǒng),最為典型的是VMware的VMFS。 以VMFS為例,對(duì)VMFS引發(fā)本次事故表現(xiàn)的可能舉舉例子,如下: 1、VMFS是典型的共享塊設(shè)備文件系統(tǒng),是基于每臺(tái)VMWARE服務(wù)器的約定,如果接入存儲(chǔ)網(wǎng)絡(luò)的是普通單機(jī),他可不管是不是共享,有時(shí)就會(huì)獨(dú)占存儲(chǔ)設(shè)備,導(dǎo)致VMFS的破壞。強(qiáng)行修復(fù)后,就會(huì)出現(xiàn)某臺(tái)虛擬機(jī)數(shù)據(jù)損壞的情況。 2、VMFS管理時(shí)不小心刪除數(shù)據(jù),或擴(kuò)容、縮容,也會(huì)導(dǎo)致VMFS文件系統(tǒng)損壞,修復(fù)后,可能出現(xiàn)某臺(tái)虛擬機(jī)數(shù)據(jù)損壞的情況。 七、 第7~8層:虛擬磁盤(pán)文件與快照 虛擬機(jī)的數(shù)據(jù)載體是虛擬磁盤(pán),往往表現(xiàn)為宿主系統(tǒng)上的一個(gè)文件或一個(gè)獨(dú)立區(qū)域。以文件形式表現(xiàn)的居多,如RAW、VMDK、VHD、VHDX、QCOW2等格式。 這些虛擬磁盤(pán)和普通文件表現(xiàn)相同,就會(huì)面臨和普通文件一樣的損壞可能。比如上層誤刪除文件、上層格式化、文件截?cái)?、文件遷移時(shí)中斷等。這些文件一旦破壞,即使恢復(fù)回來(lái),也可能不是100%,就會(huì)與騰訊本次數(shù)據(jù)災(zāi)難的表現(xiàn)相同。 磁盤(pán)文件快照與第四層的卷快照原理相似,Hyper-V對(duì)其稱(chēng)為差異磁盤(pán),表述直接明了??煺瘴募G失或損壞后,也可能與騰訊本次數(shù)據(jù)災(zāi)難表現(xiàn)相同。 八、 第9層:虛擬機(jī)文件系統(tǒng) 分配給用戶(hù)的虛擬機(jī),其硬盤(pán)就是前文提到的虛擬磁盤(pán)文件,但進(jìn)入虛擬機(jī)后,就等同于物理硬盤(pán)。這些硬盤(pán)也被正常操作方法分區(qū)、格式化、安裝系統(tǒng)、安裝應(yīng)用等。不論Windows的NTFS、Linux的Ext4等,文件系統(tǒng)總會(huì)可能有突發(fā)性的災(zāi)難。但本次事幫顯然不屬于此,僅聊聊可能的數(shù)據(jù)風(fēng)險(xiǎn)。 一是來(lái)自誤操作。如格式化、刪除數(shù)據(jù)、同名文件覆蓋等。 二是來(lái)自系統(tǒng)bug。但bug并非是特別明顯的,有時(shí)是需要多方環(huán)境因素催化。舉個(gè)例子,在NTFS上打開(kāi)卷壓縮,存入一個(gè)上百GB的文件,文件系統(tǒng)8成會(huì)崩潰,連現(xiàn)有文件都可能找不到(在早些年,我做了很多這處條件下的試驗(yàn),最終確定的確是系統(tǒng)bug,最近未做實(shí)驗(yàn),或許Microsoft已修正)。另一個(gè)例子,非常常見(jiàn),在WINDOWS上運(yùn)行ORACLE數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)文件的增長(zhǎng)粒子設(shè)置過(guò)小(比如1M之類(lèi)),當(dāng)數(shù)據(jù)大小到上百G時(shí),不出5年,幾乎肯定會(huì)崩潰(數(shù)據(jù)文件大小截為0,或內(nèi)容交串出錯(cuò))。 九、 第10層:文件 這一層沒(méi)什么好說(shuō)的,往往是來(lái)自于上述幾層的故障,導(dǎo)致文件損壞。除此之外,就謹(jǐn)防勒索病毒吧。 十、 建議 數(shù)據(jù)災(zāi)難大方向有2個(gè):人為災(zāi)難和不可抗力災(zāi)難。能給出的建議大概如下: 1、備份。 備份的重要性毫無(wú)疑問(wèn),但要講方法,為避免硬件故障,就不能備份在同一個(gè)或同一類(lèi)硬件載體上;為避免自然災(zāi)害,就要異地備份;為避免備份集過(guò)多帶來(lái)的管理問(wèn)題(找數(shù)據(jù)都費(fèi)勁之類(lèi)的),應(yīng)制定良好的備份計(jì)劃;為避免同類(lèi)介質(zhì)受環(huán)境的影響,就應(yīng)該考慮不同介質(zhì)的方案,如光存儲(chǔ)與磁存儲(chǔ)各自備份;為避免有意或無(wú)意破壞,備份集就應(yīng)該設(shè)不同的存取權(quán)限,不能一把鑰匙開(kāi)所有門(mén)…… 2、規(guī)范管理和實(shí)施。 很多企業(yè)級(jí)數(shù)據(jù)災(zāi)難往往來(lái)自于人為,因?yàn)槿魏我粋€(gè)系統(tǒng),在涉及維護(hù)的時(shí)候,都必須工作在無(wú)保護(hù)狀態(tài),任何一個(gè)不小心都可能導(dǎo)致無(wú)法回溯的后果。制定嚴(yán)格的維護(hù)實(shí)施方案、備份計(jì)劃、預(yù)警機(jī)制是非常重要的保障。 3、數(shù)據(jù)取舍。 太老的數(shù)據(jù)就刪了吧,再對(duì)數(shù)據(jù)精簡(jiǎn)整理,再做詳細(xì)的管理計(jì)劃。要知道,娶妻越多,頭頂發(fā)綠的機(jī)會(huì)就越大。 該文章在 2018/10/16 15:46:18 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |