大家周二好。
今天也是一樣難受,感覺像便秘似的,到現在還不知道給大家分享什么。白天看了很多VMAX3的資料,但感覺還不到分享的時候。
為了配合明天深圳分舵的活動,白菜群主要講分布式存儲,可惜我參加不了,不過我今晚我可以替他預熱一下,講講我對VMware的Virtual SAN(vSAN)的數據保護的一些學習心得。
大家知道,vSAN就是一種分布式存儲,其數據保護技術不是采用傳統的RAID方式,而是叫分布式RAID/RAIN。
VSAN在主機之間使用RAID-1(同步鏡像)來滿足對系統中存儲對象的可用性和可靠性的要求。虛擬機存儲對象的鏡像拷貝數量取決于虛擬機存儲策略。根據虛擬機存儲策略不同,一塊虛擬磁盤最多可在一個32節點的VSAN上擁有3個鏡像。
說白了,就是采用多副本技術,VSAN支持2副本或者3副本(目前實現)。
那么問題來了,為什么VSAN可以支持兩副本呢?大家知道,很多的產品,比如基于hadoop的開源實現,還有包括華為的UDS,愛數的Anyshare這些商業產品,都是采用三副本技術。西瓜哥曾經和愛數的米香總聊過,為啥備份產品也搞三副本,不是有點浪費嗎?米香總說三副本的可靠性比較高,如果一臺主機失效,那兩個副本還可以提供服務。如果是采用兩副本,如果發生一個主機失效(比如心跳斷了),這種腦裂特別難處理,因為,大家各有一個副本,到底哪個副本來提供服務呢?
西瓜哥想了想,這個確實是一個問題。但VSAN是如何解決的呢?
VSAN數據存儲其實是一種對象存儲。對象指的是一個獨立的存儲塊設備。對象取代LUN成了VSAN的主要存儲單元。在VSAN中最典型的對象就是VMDK、虛擬機交換文件、增量盤(快照)和虛擬機名字空間。
VSAN中的每個對象都有自己的RAID樹,組件是RAID樹上的葉子。存儲數據的副本就是一個組件,為了解決腦裂的問題,VSAN引入了一個非常重要的組件——見證(witness),也就是我們經常所的仲裁盤。
如果大家對集群系統如微軟的MSCS有所了解的話,都知道集群系統都會有一個仲裁的機制,一般是一個仲裁盤(LUN)。當發生腦裂的時候,誰可以訪問這個仲裁盤,那么這個主機就來對外提供服務。其實存儲里面的虛擬化網關,如華為的VIS、EMC VPLEX,IBM SVC都有這個仲裁的機制。
VSAN的聰明之處,就是引入了見證。這樣可以實現仲裁的效果,但由于見證只是一個邏輯組件,不是一個副本,沒有數據,只有元數據(大小僅2MB),占用的空間非常小。因此,可以只實現兩副本的分布式集群,使用率比三副本要高很多,但有效解決了腦裂的問題,可靠性也很高。
VSAN中的一個對象要被認為可用,必須滿足以下兩個條件:
RAID樹必須允許數據訪問(RAID-1必須最少有一個完好的副本,RAID-0必須所有的條帶都完好)
必須有超過50%的組件可用(注意,不包含等于哦)
簡單來說,哪個對象擁有超過一半的組件,那么這個對象就可以訪問。其他的對象就不能對外提供服務,這樣就防止了腦裂。
這種規則的抽象,可以讓VSAN支持不同的高可用策略。
這個是VSAN中不同高可用策略對副本以及主機數的要求:
有了見證這個組件,就可以支持不同的VSAN的高可用策略。比如,你允許故障數是2,那么你需要3個副本,5臺主機。這個時候需要多少個見證呢?需要主機數減去副本數,也就是需要2個見證。也就是5個主機,每個主機上要么有一個副本,要么有一個見證,這樣發生腦裂,只有擁有超過50%組件的對象才能提供服務。
好了,超過5分鐘了,總結一下。西瓜哥認為,見證(witness)是VSAN非常有技巧的一個實現,它可以支持不同的高可用策略,而且可以有效防止腦裂。這是實現方式使得兩副本這種比較經濟的方式,可以在大規模的分布式存儲里面實現。
延伸思考一下:IBM XIV也是采用兩副本,15臺主機,是否也有仲裁機制來防止腦裂呢?西瓜哥在紅皮書沒有看到,但考慮到XIV都在一個機柜了,工程上是一個緊密的系統,也就是主機壞了,網絡不可能壞,網絡不壞,心跳就可以正常通訊,就不會有腦裂的問題,或者腦裂的概率非常小。因此,不特別考慮也是可以理解的。