GlusterFS的分佈式鎖

“Glusterfs鎖,並沒有中央鎖服務器的概念。它可以使用一個或多個節點作爲鎖管理節點,而底層直接使用系統上的鎖機制,所以本身並不需要作過多的工作。它需要保證的是,鎖的事務性,即要麼鎖成功,要麼不鎖。對於多個鎖節點,這個尤其重要,必須所有節點都鎖上,纔是加鎖成功。不能一個節點加鎖成功,而其他節點不成功,這樣容易引起死鎖。”


GlusterFS鎖由記錄鎖構成,即通過fcntl實現,可對文件的某一區域進行加鎖,而不是直接對整個文件加鎖。採用這種細粒度鎖的實現,有利於多客戶端對同一文件不同區域的並行寫操作。如上所述,GlusterFS的鎖機制可分爲兩部分理解,一是底層的文件系統鎖,對應xlator/locks模塊;二是上層的事務鎖,對應不同的集羣模式。


一、文件系統鎖

代碼上看,GlusterFS鎖是由xlators/locks實現,它是一個Translator,一般直接在Server端的posix 文件系統上加載,即直接對Server端的本地文件系統上的文件加鎖(記錄鎖),當然,xlator/locks實現的鎖機制最終會反應到Server端本地文件系統上的鎖。它的主要原理是:如同不同客戶端對同一文件的重疊區域寫,則將此寫請求插入一等待隊列,由flush操作調度;否則,可並行讀寫。


二、事務鎖

邏輯上看,不同的集羣模式有不同的處理流程,會有不同的處理邏輯來保證鎖的事務性。讀操作處理流程相對簡單,以下主要分析寫流程。

對AFR,由於要同時向多個存儲節點寫文件,爲保證數據一致性,必須先獲得各個存儲節點的鎖,然後才能執行寫操作。這會涉及多個鎖管理節點,只要有一個節點沒有加鎖成功,必須放棄之前從其餘各節點獲取的鎖,並重新嘗試獲取所有節點的鎖。

對DHT,由於文件寫只會對應一個存儲節點,所以一旦節點定位成功,寫操作相對簡單。

對Stripe,首先通過計算,定位某文件片對應的存儲節點,然後才獲取對應節點的鎖,由於每一分片只涉及一個存儲節點,類似DHT,寫操作的處理也比較簡單。


在這裏,要感謝劉愛貴老師的幫助。謝謝!~~

http://blog.csdn.net/liuben/article/details/6284551

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章