一種san共享文件系統中實現離線讀文件的方法
2024-02-16 12:15:15 1
專利名稱:一種san共享文件系統中實現離線讀文件的方法
技術領域:
本發明涉及一種SAN共享文件系統中實現離線讀文件的方法,是一種網絡系統讀取視頻文件的方法,是一種適用於廣電應用領域的SAN共享文件系統下的文件離線讀取方法。
背景技術:
目前,通用的SAN共享文件系統由元數據伺服器(MDS)、共享存儲和多客戶端通過 LAN網絡和SAN網絡組成,元數據伺服器和客戶端都可以通過FC或ISCSI協議直接訪問共享存儲,分別為FC-SAN和IP-SAN架構。SAN網絡由於是光纖傳輸,帶寬、容量大、速度快,常用來傳輸數據量巨大的文件,如視頻文件。
SAN共享文件系統中的元數據是描述數據組織方法的數據結構,元數據主要記錄了 SAN共享文件系統中該文件在塊設備上的劃分方法、存放位置以及文件的一些相關屬性等。SAN共享文件系統通過元數據將連續的塊設備存儲組織成文件結構,元數據的大小與文件數據相比很小,所以不需要很高的傳輸帶寬,所以用LAN網絡傳輸。SAN共享文件系統上的元數據信息由元數據伺服器統一管理。客戶端在LAN網絡下通過tcp/ip協議與元數據伺服器相連並通訊,客戶端要進行SAN共享文件系統中的文件讀寫操作時,首先需通過LAN 網絡向元數據伺服器發起該文件的元數據請求,元數據伺服器將該文件的元數據信息返回給客戶端,客戶端依據所獲得的元數據對共享存儲進行讀寫訪問,完成文件讀寫功能。這種通用的SAN共享文件系統雖然具有效率高、適用性廣的特點,但元數據伺服器是其中的瓶頸和單點故障點,一旦元數據伺服器出現問題,整個SAN網絡就會癱瘓無法工作;同樣,如果LAN網絡出現問題導致客戶端無法與元數據伺服器通訊,也會導致SAN網絡的癱瘓。發明內容
為克服現有技術的問題,本發明的目的是提出一種SAN共享文件系統中實現離線讀文件的方法。所述的方法可以在元數據服務出現文件是元數據的讀寫中斷的時候,或者 LAN網絡出現問題導致客戶端無法與元數據伺服器通訊時,客戶端仍能繼續進行SAN網絡中的文件讀取工作。
本發明的目的是這樣實現的一種SAN共享文件系統中實現離線讀文件的方法, 所述的方法所使用的硬體系統包括多個客戶端通過傳輸視頻文件的SAN網絡與元數據伺服器和磁碟列陣連接,所述的多個客戶端通過傳輸元數據的LAN網絡與元數據伺服器連接,所述方法的步驟如下打開文件的步驟用於客戶端向元數據伺服器發出請求,要求打開一個磁碟陣列中的文件;獲取元數據的步驟用於元數據伺服器根據客戶端待讀取文件的內容,發出與待讀取文件所對應的元數據至客戶端,客戶端獲取並存儲待讀取文件的全部元數據,同時客戶端接受分配給自己的機會鎖;讀取文件的步驟用於客戶端獲取元數據段,並根據所獲得的元數據段,對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取;文件讀取結束的步驟用於客戶端向元數據伺服器發出要求,關閉已打開的待讀取文件句柄,完成本次文件讀取;所述的「獲取元數據的步驟」中客戶端獲取元數據包括以下子步驟 檢測是否有原始記錄的子步驟用於客戶端在本地內存或硬碟中檢查是否有待讀取文件的元數據,如果「否」則進入「開闢存儲空間的子步驟」,如果「是」則進入下一子步驟;檢測元數據有效性的子步驟用於客戶端檢測本地內存或硬碟中的待讀取文件的元數據是否有效,如果「否」則進入「讀取文件的步驟」,如果「是」則進入下一子步驟;開闢存儲空間的子步驟用於客戶端在本地內存或硬碟中開闢用於存儲待讀取文件的元數據的存儲空間;選擇處理的子步驟用於客戶端對元數據存入請求選擇是放在後臺隊列等待還是實時處理,如果是後臺等待則將元數據存入請求放入元數據請求隊列中等待,如果是實時處理則進入下一子步驟;獲取全部元數據的子步驟用於客戶端根據通訊規則循環向元數據伺服器請求獲取待讀取文件的整個元數據,作為元數據備份,按照客戶端自定義的數據結構保存在已開闢的存儲空間中。
本發明產生的有益效果是本發明利用客戶端伺服器在讀取文件流程中,向元數據伺服器獲取元數據時,提供特定的元數據預獲取方法、緩存方法,使得在標準讀寫流程正常進行的同時,客戶端也在本地保留一份元數據的備份,並通過同步方法保證該元數據的一致和有效性,這樣在元數據伺服器或LAN網絡出現故障時,客戶端伺服器可以根據本地的元數據備份繼續正常進行文件讀取工作本發明可實現在元數據伺服器停止工作後,客戶端伺服器根據本地的備份元數據繼續讀取SAN共享文件的功能。當檢查到元數據伺服器有數據改變時,客戶端伺服器自動更新備份元數據,以保證元數據的正確性。本發明有效地提高SAN共享系統的文件讀取效率,保證了文件讀取的連續性、容錯性和抗幹擾性,提高了 SAN共享文件系統的安全性。由於在廣播電視行業的文件管理中,存在大量一次性寫入、反覆讀取、基本不修改的大數據視音頻文件,這種文件非常適用本發明的文件離線讀取方法。
下面結合附圖和實施例對本發明作進一步說明。
圖1是本發明實施例一所述的方法所使用的系統結構示意圖; 圖2是本發明實施例一所述方法的流程圖;圖3是本發明實施例二所述方法的流程圖; 圖4是本發明實施例三所述方法的流程圖。
具體實施方式
實施例一本實施例是一種SAN共享文件系統中實現離線讀文件的方法。所述的方法所使用的硬體系統,如圖1所示。圖中的粗實線表示的是SAN網絡,細實線表示的是LAN網絡。本實施例包括多個客戶端通過傳輸視頻文件的SAN網絡與元數據伺服器和磁碟列陣連接,所述的多個客戶端通過傳輸元數據的LAN網絡與元數據伺服器連接。其中客戶端可以是普通的 PC機工作站,也可以是伺服器,具有連接SAN網絡的能力,並可以處理大型的文件,例如高清晰度視頻文件。本實施例所述的SAN網絡是由光纖交換機和光纜組成的光纖網,是帶寬超過IG的寬帶網絡,可以傳輸高清晰度的視頻文件,也可以用千M或萬M的高速乙太網構成SAN網絡。本實施例所述的LAN網絡是由以太交換機組成並使用TCP/IP為通訊協議的乙太網,具有數百K的帶寬,可以快速的傳輸幾百K的元數據文件。在通常情況下可以為了避免元數據伺服器出現問題而影響整個SAN系統的正常運行,可增加一臺備用的元數據伺服器,即兩臺元數據伺服器,使其互為備份,在同步數據的基礎上實現元數據伺服器冗餘。 系統中的存儲設備通常使用磁碟陣列,磁碟陣列通過SAN網絡與客戶端與元數據伺服器相連,客戶端和元數據伺服器可以通過fc協議或iscsi協議對其進行訪問。
本實施例的基本思路是將待讀取文件所需要的元數據全部存儲在客戶端備用, 可以實現文件離線讀取。通過元數據在客戶端的備份當SAN系統中的元數據伺服器或LAN 網絡出現問題時,客戶端仍能離線讀取文件系統中的文件數據,保證正常的讀寫業務在故障發生時不陷入癱瘓和繼續進行。本實施例所述方法可表述為客戶端伺服器在讀取文件流程中,向元數據伺服器獲取元數據時,提供特定的元數據預獲取方法、緩存方法,使得在標準讀寫流程正常進行的同時,客戶端也在本地保留一份元數據的備份,並通過特定的同步方法保證該元數據的一致和有效性,這樣在元數據伺服器或LAN網絡出現故障時,客戶端伺服器可以根據本地的元數據備份繼續正常進行文件讀取工作。在通常的SAN系統文件讀取過程中,一個文件的元數據文件並不是一次全部讀取的,而是一段一段的讀取。客戶端讀取一段元數據後,即開始讀取該段元數據對應的文件塊,當該文件塊讀完後,在讀取下一段的元數據,之後讀取下一個文件塊,如此循環讀取全部文件。而本實施例則在文件讀取之前,將所有元數據客戶端的元數據全部獲取,並在客戶端開闢存儲區,存儲這些元數據,之後在文件讀取過程中,或直接讀取本地存儲的一段元數據,或作為備份而讀取元數據伺服器中的一段元數據。總之,在正常情況下,本實施例還是採取一段一段的讀取方式,變化僅在於這一段段的元數據可能來自於元數據伺服器,也可能來自於本地存儲的元數據。以此可有效地提高SAN共享系統的文件讀取效率,保證了文件讀取的連續性、容錯性和抗幹擾性,提高了 SAN共享文件系統的安全性。
本實施例所述方法的具體過程步驟如下,流程見圖2 1、打開文件的步驟用於客戶端向元數據伺服器發出請求,要求打開一個磁碟陣列中的待讀取文件。本步驟是基本步驟,當用戶需要讀取一個待讀取文件的時候,用戶在客戶端打開待讀取文件的句柄,客戶端根據該文件的句柄和待讀取文件的數據偏移,向元數據伺服器發出請求。在客戶端伺服器與一個元數據伺服器建立連接時,創建對應的處理線程,該線程用來後臺處理離線讀取相關的功能,如果不在後臺運行,可能會影響標準讀取流程的效率。
2、獲取元數據的步驟用於元數據伺服器根據客戶端待讀取文件的內容,發出與待讀取文件所對應的元數據至客戶端,客戶端獲取並存儲待讀取文件的全部元數據,同時客戶端接受分配給自己的機會鎖。
本步驟與傳統SAN共享文件的讀取的差別在於傳統的讀取只在於讀取一定數量的元數據(元數據段),接著就讀取磁碟陣列中與該元數據段對應的待讀取文件塊,而本步驟則讀取待讀取文件的完整元數據,並在本地開闢存儲區域存貯這些元數據。因此,本步驟所述的客戶端獲取元數據還包括以下子步驟(1)檢測是否有原始記錄的子步驟用於客戶端在本地內存或硬碟中檢查是否有待讀取文件的元數據,如果「否」則進入「開闢存儲空間的子步驟」,如果「是」則進入下一子步驟。
本子步驟是一個檢測並判斷的步驟,判斷本地硬碟或內存中是否已經存在待讀取文件所使用的元數據。有元數據存在的情況一般是待讀取文件已經在本客戶端使用過,或者由於在以前的讀取過程中某種原因而中斷讀取等等,在這種情況下可以進入下一子步驟檢測該元數據是否有效。如果沒有找到相應的元數據,則需要啟動獲取元數據的過程。
(2)檢測元數據有效性的子步驟用於客戶端檢測本地內存或硬碟中的待讀取文件的元數據是否有效,如果「否」則進入「讀取文件的步驟」,如果「是」則進入下一子步驟。
本實施例在離線讀取文件時,因為已與元數據伺服器斷開通訊,所以需要一套機制來保證元數據的有效性(即數據一致性),對於元數據的有效性檢查包括實時和非實時兩方面,通過以下兩點來保證a.在文件關閉時,客戶端與伺服器不能實時同步元數據信息,所以這段時間如果元數據發生改變,要通過非實時的方法來保證有效性。可採用如下辦法在保存文件元數據時, 同時記錄文件的修改時間。下次打開時,如果發現該文件的修改時間與元數據備份中記錄的相同,則說明元數據沒被修改過,元數據備份有效,否則則需要刪除原備份創建新的記錄。
b.在文件打開進行數據讀取時,通過機會鎖機制來實時保證元數據未被修改。機會鎖由伺服器控制,描述了本客戶端與其他客戶端對同一文件的共享情況,在本客戶端有機會鎖的情況下,說明其他客戶端不會修改文件,文件的元數據也不會發生改變,則可以使用離線元數據功能;如果有其他客戶端要修改文件,則伺服器會主動剝奪本客戶端的機會鎖,此時元數據可能會發生改變,所以客戶端在無機會鎖的狀態下不能使用離線元數據功能。不過由於在廣播電視行業的文件管理中,存在大量一次性寫入、反覆讀取、基本不修改的大數據視音頻文件,所以本實施例尤其適用於廣電和視音頻處理領域。
滿足以上條件,在讀取過程中元數據伺服器出現故障時,可以使用本地離線元數據的備份而不會出現數據一致性問題,否則就要退出讀取。
(3)開闢存儲空間的子步驟用於客戶端在本地內存或硬碟中開闢用於存儲待讀取文件的元數據的存儲空間。
根據需要可以在硬碟或內存中開闢存儲空間,如果多次反覆使用待讀取文件,則可以在硬碟中開闢存儲空間,如果是臨時使用則可以在內存中開闢存儲空間。
(4)選擇處理的子步驟用於客戶端對元數據存入請求選擇是放在後臺隊列等待還是實時處理,如果是後臺等待則將元數據存入請求放入元數據請求隊列中等待,如果是實時處理則進入下一子步驟。
處理文件的讀取,在客戶端可以同時進行多個,為了提高效率可以開闢多個文件讀取線程,這樣就會有多個線程的運行隊列,需要處理是就可以從隊列中取出,進行處理。 如果是後臺運行,將後面的步驟加入請求隊列,交由先前創建的處理線程處理;如果不是後臺運行,直接在本線程中處理。
(5)獲取全部元數據的子步驟用於客戶端根據通訊規則循環向元數據伺服器請求獲取待讀取文件的整個元數據,作為元數據備份,按照客戶端自定義的數據結構保存在已開闢的存儲空間中。
獲取一個文件的全部元數據與文件讀取過程是一樣的,只是在讀取一段元數據之後不是讀取文件的塊數據,而是繼續請求讀取元數據,這樣讀一段元數據,請求一次,再讀一段,如此循環將整個元數據讀完,並存儲在客戶端的本地硬碟或內存中。至本子步驟,整個「獲取元數據的步驟」結束。
3、讀取文件的步驟用於客戶端獲取一定量的元數據,稱為元數據段,並根據所獲得的元數據段,對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取。
本步驟可以有種選擇一種是如果從元數據伺服器獲取元數據的路徑暢通,則可以按照常規的方式從元數據伺服器獲取元數據,即從元數據伺服器獲取一段元數據,然後從磁碟陣列中讀取一段待讀取文件的塊數據,再從元數據伺服器讀取一段元數據,再從磁碟陣列中讀取一段待讀取文件的塊數據,如此循環,如果從元數據伺服器獲取元數據的路徑阻斷,則使用本地內存或硬碟中的元數據。另一種方式是直接使用本地硬碟中的元數據,如果出現問題再檢測與元數據伺服器的通訊是否暢通,如果暢通則使用元數據伺服器的元數據,如果不暢通則退出文件讀取。
4、文件讀取結束的步驟用於客戶端向元數據伺服器發出要求,關閉已打開的待讀取文件句柄,完成本次文件讀取。
實施例二 本實施例是實施例一的改進,是實施例一關於讀取文件的步驟的細化,如圖3所示。本實施例是客戶端本地內存或硬碟存儲了元數據的情況下進行。雖然本地內存或硬碟中存有元數據,但本實施例還是按照傳統的方式進行元數據的獲取,本地存儲的元數據只是在客戶端與元數據伺服器的通訊不暢通的情況下在使用。本實施例所述的讀取文件的步驟中的子步驟如下la、從元數據伺服器獲取元數據段的子步驟用於客戶端向元數據伺服器獲取元數據段,如果成功則進入「對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取」,如果失敗則進入下一步驟。
本子步驟為選擇過程,條件是客戶端與元數據伺服器的通訊是否暢通,如果暢通則使用元數據伺服器中的元數據,如果不暢通則使用本地存儲的元數據。
2a、檢測客戶端是否有元數據備份的子步驟用於客戶端對本地的內存或硬碟進行檢查,是否有待讀取文件的元數據備份,如果沒有則退出文件讀取,如果有則進入下一子步驟。
本子步驟是為了檢測本地是否存儲元數據,以此防止在某種情況下,已經存儲的元數據意外丟失,從而導致系統運行意外中斷。
3a、客戶端檢測備份元數據備份是否有效的子步驟用於客戶端檢測本地內存或硬碟中的待讀取文件的元數據是否有效,如果「否」則退出文件讀取,如果「是」則進入「對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取」。
本子步驟所進行的判斷可以包括兩項內容實時有效性和非實時有效性,即包括元數據存儲的停留時間長度和機會鎖的有效性。兩項要求均得到滿足時,才能進行文件塊數據的讀取。
實施例三本實施例是實施例一的改進,是實施例一關於讀取文件的步驟的細化,如圖4所示。本實施例是客戶端本地內存或硬碟存儲了元數據的情況下進行。因為本地已經存儲了元數據,可以直接使用本地的元數據。如果從本地獲取元數據失敗再從元數據伺服器獲取元數據。本實施例所述的讀取文件的步驟中的子步驟如下lb、從本地內存或硬碟中獲取元數據段的子步驟用於客戶端從本地內存或硬碟中獲取元數據段,如果成功則進入「對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取」,如果失敗則進入下一步驟。
本子步驟首先使用本地存儲的元數據,如果失敗再使用元數據伺服器存儲的元數據。
2b、客戶端檢測與元數據伺服器的連接是否暢通的子步驟用於客戶端檢測與元數據伺服器的連接是否暢通,如果「否」則退出文件讀取,如果「是」進入下一子步驟。
3b、從元數據伺服器獲取元數據段的子步驟用於客戶端從元數據伺服器獲取元數據,之後對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取, 循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取。
最後應說明的是,以上僅用以說明本發明的技術方案而非限制,儘管參照較佳布置方案對本發明進行了詳細說明,本領域的普通技術人員應當理解,可以對本發明的技術方案(比如各個步驟的前後順序、元數據在客戶端存儲的位置等)進行修改或者等同替換, 而不脫離本發明技術方案的精神和範圍。
權利要求
1.一種SAN共享文件系統中實現離線讀文件的方法,所述的方法所使用的硬體系統包括多個客戶端通過傳輸視頻文件的SAN網絡與元數據伺服器和磁碟列陣連接,所述的多個客戶端通過傳輸元數據的LAN網絡與元數據伺服器連接,所述方法的步驟如下打開文件的步驟用於客戶端向元數據伺服器發出請求,要求打開一個磁碟陣列中的文件;獲取元數據的步驟用於元數據伺服器根據客戶端待讀取文件的內容,發出與待讀取文件所對應的元數據至客戶端,客戶端獲取並存儲待讀取文件的全部元數據,同時客戶端接受分配給自己的機會鎖;讀取文件的步驟用於客戶端獲取元數據段,並根據所獲得的元數據段,對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取;文件讀取結束的步驟用於客戶端向元數據伺服器發出要求,關閉已打開的待讀取文件句柄,完成本次文件讀取; 其特徵在於所述的「獲取元數據的步驟」中客戶端獲取元數據包括以下子步驟 檢測是否有原始記錄的子步驟用於客戶端在本地內存或硬碟中檢查是否有待讀取文件的元數據,如果「否」則進入「開闢存儲空間的子步驟」,如果「是」則進入下一子步驟;檢測元數據有效性的子步驟用於客戶端檢測本地內存或硬碟中的待讀取文件的元數據是否有效,如果「否」則進入「讀取文件的步驟」,如果「是」則進入下一子步驟;開闢存儲空間的子步驟用於客戶端在本地內存或硬碟中開闢用於存儲待讀取文件的元數據的存儲空間;選擇處理的子步驟用於客戶端對元數據存入請求選擇是放在後臺隊列等待還是實時處理,如果是後臺等待則將元數據存入請求放入元數據請求隊列中等待,如果是實時處理則進入下一子步驟;獲取全部元數據的子步驟用於客戶端根據通訊規則循環向元數據伺服器請求獲取待讀取文件的整個元數據,作為元數據備份,按照客戶端自定義的數據結構保存在已開闢的存儲空間中。
2.根據權利要求1所述的方法,其特徵在於,所述的讀取文件的步驟中的子步驟從元數據伺服器獲取元數據段的子步驟用於客戶端向元數據伺服器獲取元數據段, 如果成功則進入「對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取」,如果失敗則進入下一步驟;檢測客戶端是否有元數據備份的子步驟用於客戶端對本地的內存或硬碟進行檢查, 是否有待讀取文件的元數據備份,如果沒有則退出文件讀取,如果有則進入下一子步驟;客戶端檢測備份元數據備份是否有效的子步驟用於客戶端檢測本地內存或硬碟中的待讀取文件的元數據是否有效,如果「否」則退出文件讀取,如果「是」則進入「對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取」。
3.根據權利要求1所述的方法,其特徵在於,所述的讀取文件的步驟中的子步驟從本地內存或硬碟中獲取元數據段的子步驟用於客戶端從本地內存或硬碟中獲取元數據段,如果成功則進入「對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取」,如果失敗則進入下一步驟;客戶端檢測與元數據伺服器的連接是否暢通的子步驟用於客戶端檢測與元數據伺服器的連接是否暢通,如果「否」則退出文件讀取,如果「是」進入下一子步驟;從元數據伺服器獲取元數據段的子步驟用於客戶端從元數據伺服器獲取元數據,之後對磁碟陣列發起待讀取文件的塊數據請求,以完成該元數據段對應塊數據讀取,循環的讀取元數據段和讀取元數據段對應的塊數據,直至完成整個待讀取文件的讀取。
全文摘要
本發明涉及一種SAN共享文件系統中實現離線讀文件的方法,所述方法的步驟打開文件的步驟;獲取元數據的步驟;讀取文件的步驟;文件讀取結束的步驟。所述的「獲取元數據的步驟」包括檢測是否有原始記錄的子步驟;檢測元數據有效性的子步驟;開闢存儲空間的子步驟;選擇處理的子步驟;獲取全部元數據的子步驟。本發明利用客戶端也在本地保留一份元數據的備份,並通過同步方法保證該元數據的一致和有效性,這樣在元數據伺服器或LAN網絡出現故障時,客戶端伺服器可以根據本地的元數據備份繼續正常進行文件讀取工作本發明可實現在元數據伺服器停止工作後,客戶端伺服器根據本地的備份元數據繼續讀取SAN共享文件的功能。
文檔編號H04L29/08GK102546776SQ20111044408
公開日2012年7月4日 申請日期2011年12月27日 優先權日2011年12月27日
發明者劉強, 劉昌鑫, 孫軼瑋, 張躍, 朱詩波, 龍瑪娜 申請人:北京中科大洋科技發展股份有限公司