突破存儲跨中心雙活方案設計階段難點之三:數據一致性風險
跨中心的雙活存儲數據一致性如何保障?
一方面,當寫入數據時,在復制過程中,數據傳遞是在緩存中進行的,這樣做的好處是提升了性能,問題是當出現控制器節點異常宕機事件時,就會導致緩存內的數據不能寫入存儲中,從而造成數據的不一致,這時有沒有保障單個存儲數據一致性的措施?另外一方面,兩個站點的存儲之間的數據一致性,從緩存層、底層數據層又是如何保障的?
解析和解答
鄧毓 某農信社資深骨干工程師
***個問題:前端節點寫緩存與后端存儲間的數據一致性如何保障?
存儲跨中心雙活中的單個存儲架構分為三種:
1.物理存儲的內部雙控制器
比如V5000/V7000/V9000 HYPERSWAP,寫存儲的操作也就是寫緩存的過程,寫了一個控制器,控制器也會將緩存數據同步至另一控制器的緩存,只有當真正同步完,這次的寫操作才算完成,當寫緩存達到水位線后,會將寫緩存刷入到磁盤組中,當一個控制器異常宕機時,IO HANG住一小段時間,另一控制器將接管,緩存數據也不會因此丟失,一致性得到保障;單控制器時,寫緩存被禁止,之前的緩存被刷入后端存儲,即使這時這個控制器也異常宕機,后端磁盤的數據完整性和一致性也得到了保障;如果不幸兩個控制器的電源同時斷電了,這時寫緩存數據還未及時刷入磁盤組,不用怕,幾乎所有存儲都會考慮到這一點,都有專門的電池模塊維持供電幾分鐘,保證緩存數據能夠順利落到磁盤組當中。
2.物理存儲+存儲虛擬化網關(有寫緩存)
比如SVC ESC/HYPERSWAP,NETAPP MCC(叫寫日志),這種架構也就是相當于在物理存儲前端又加了一道控制器,也存在寫緩存,相當于擴大了后端物理存儲的緩存容量,寫操作要先寫入SVC節點,再同步至另一SVC節點,只有完全同步成功,才算做是一個完整的寫周期,后面的操作也是等待寫緩存達到水位線刷后端存儲。佑了這種機制的保障,存儲虛擬化網關的緩存與后端物理存儲的數據完整性和一致性得到保障,無論是單SVC節點故障,另一節點緩存數據冗余,寫緩存被禁止,所有緩存刷入后端存儲,還是SVC的電源斷電,SVC有專門的UPS供電模塊保障寫緩存及時刷入后端存儲,都能完整的保障數據的完整性和一致性。這里不再贅述。
3.物理存儲+存儲虛擬化網關(無寫緩存)
比如EMC VPLEX METRO,它只有讀緩存,寫緩存還是由后端的物理存儲提供,所以該問題還是和前面說的類似的保障機制。
第二個問題:兩個站點的雙活存儲間的數據一致性如何保障?
這里分兩種方式來闡述這個問題:
1.一種是兩個站點的主機識別的是相同的VOLUME
比如:SVC ESC、EMC VPLEX、HDS GAD等,兩個站點的主機對這一個VOLUME寫操作時,數據被刷入兩個鏡像的后端存儲,這有兩個存儲都寫完成返回,才算一個完整的緩存刷后端存儲的寫周期,這時兩個存儲從數據塊角度來說,是一致的,一個站點或者存儲故障,另一個站點的存儲是可以接管,而不會造成數據丟失。
2.另一種是兩個站點的主機識別的是不同的VOLUME
比如:SVC V7000/V5000 HYPERSWAP、NET APP MCC等,由于兩個站點的主機識別的不是同一個VOLUME,必然存在存儲或者存儲虛擬化網關的VOLUME與VOLUME的同步復制技術,HYPERSWAP有METRO MIRROR,MCC有Syncmirror,它們的技術共同點是復制技術的一致性校驗機制,更高級的有以多個卷為單位的卷組一致性校驗機制,來保障跨站點的兩個卷/卷組的一致性,在某站點所有控制器或者站點完全故障時,另一站點有完整的、一致的存儲可以接管。