- 論壇徽章:
- 0
|
我的一點看法:
我是做售前的,對技術細節(jié)沒有深入了解,以下觀點未必正確,請大家指正。\r\n1.基于陣列的同步模式遠程復制是能夠保證數據一致性的,至于數據是在陣列Cache還是寫入了Disk沒有什么關系;在數據庫Cache中的數據不一致是由數據庫自己的log機制負責的,和陣列沒有關系;\r\n2.在異步模式下比較復雜\r\n 1).異步模式丟數據很正常,但是需要保證2個事情,a.鏈路中斷后已傳輸的數據始終是一致的,b.鏈路恢復后續(xù)傳的數據也是一致的(當鏈路再次中斷仍然能夠保持正確)\r\n 2)大多數陣列異步模式的實現方法:在Cache中建立IO隊列(可能有timestamp),在多個磁盤卷之間建立一致性組(包括數據庫的數據文件、日志文件等),這樣基本都能滿足a.的需求\r\n 3)問題是陣列Cache大小有限,當鏈路速度太慢或者長時間中斷時,Cache隊列溢出了,有些陣列只能放棄復制,等鏈路恢復后重新來過(所有源數據再拷貝一次),有些陣列放棄隊列模式,改用Bitmap模式,在鏈路恢復后先按照Bitmap復制,完成后再回到正常的隊列模式,這兩種陣列都不能滿足b.的需求。在容災系統(tǒng)規(guī)劃中就是“二次容災問題”,當第一次災難結束/鏈路恢復后,如果在數據沒有完全同步時再來一次災難,那么遠端數據就是不一致的,容災就白做了(僅指陣列層面),所以在第一次鏈路恢復后,不能立刻同步數據,而是先把遠端的數據做一個本地復制(Shadowimage之類),然后再同步,即使再次發(fā)生災難,至少遠端還有一份老一點的數據。關鍵它是\"一致的\",可以用來恢復應用;\r\n 4)在高端磁盤陣列中(其實真正的高端也就HDS USP和EMC,加HP OEM的XP),USP/XP有3種復制模式:“同步”,“異步”,“日志異步”。日志異步就是在陣列中專門配置一個RAID組用于存放IO日志(帶Timestamp),這樣在鏈路中斷時可以繼續(xù)記錄IO隊列(RAID組可以保存TB級的數據,Cache是GB級的),因此可以滿足b.的需求。還有一些其他的好處,日志異步方式是由遠端主動到本地讀取日志的“拉”模式,而不是本地發(fā)送到遠端的“推”模式,這樣本地陣列在復制中始終是被動的,負載較小,而且鏈路中斷時也不需要操心,鏈路恢復后由遠端來“拉”即可;另外日志模式可以容易實現1點對多點的容災,1個本地陣列可以復制到多臺遠端陣列\(zhòng)r\n 5)在中端陣列中(EMC CX, HP EVA, IBM/SUN/ DS, Netapp FAS),我只知道EVA的異步復制是日志模式的,稱作\"WHL\"(Write History Log),因為EVA的磁盤空間是劃分是自動分配的,所以陣列上沒有專門的日志盤,所有空閑的磁盤空間都可以拿來做日志,無需管理員干預,所以EVA基本也可以滿足二次容災的需求。\r\n 6)綜上所述,異步有“Cache隊列Timestamp+磁盤Bitmap”,“磁盤寫日志”2中模式,后面一種可以始終保持數據一致性\r\n\r\n3.順便說句和存儲無關的題外話\r\n 在容災中要求保證一致性其實有很多層面的方法,陣列是其中一個層次,還需要其它層面的配合\r\n 1)業(yè)務流程,例如每個業(yè)務操作都留有憑證,即使數據庫中丟了數據也能再輸進去\r\n 2)應用軟件,在寫數據庫之前先做一個log并傳到異地\r\n 3)數據庫、操作系統(tǒng)/文件系統(tǒng)層面的日志/回滾技術\r\n 4)最低層,最簡單的是陣列復制層面的\n\n[ 本帖最后由 ffaatt 于 2009-6-4 18:46 編輯 ] |
|