一種文件系統(tǒng)序列化操作日志的捕獲與傳輸方法及其裝置制造方法
【專利摘要】本發(fā)明公開了一種文件系統(tǒng)序列化操作曰志的捕獲與傳輸方法及其裝置。本方法為:1)規(guī)則模塊將設(shè)定的復(fù)制規(guī)則發(fā)送到捕獲模塊;2)捕獲模塊對(duì)復(fù)制規(guī)則中指定監(jiān)控的文件和目錄的I/O操作信息進(jìn)行實(shí)時(shí)捕獲,并生成序列化I/O操作日志;3)緩存模塊將序列化I/O操作日志從內(nèi)核態(tài)拷貝到用戶態(tài),并針對(duì)不同復(fù)制規(guī)則捕獲生成的序列化I/O操作日志采用不同的緩存隊(duì)列進(jìn)行緩存;4)本地網(wǎng)絡(luò)模塊根據(jù)復(fù)制規(guī)則中目標(biāo)災(zāi)備機(jī)地址以及工作機(jī)上監(jiān)控的目錄建立網(wǎng)絡(luò)數(shù)據(jù)通道,將不同緩存隊(duì)列中的數(shù)據(jù)采用對(duì)應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)通道發(fā)送到不同備災(zāi)機(jī)中并本地保存。本發(fā)明既保證了對(duì)原始數(shù)據(jù)備份的一致性要求,也保證了對(duì)備份后數(shù)據(jù)中以往任意操作點(diǎn)的可恢復(fù)性。
【專利說明】一種文件系統(tǒng)序列化操作日志的捕獲與傳輸方法及其裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計(jì)算機(jī)數(shù)據(jù)容災(zāi)和備份【技術(shù)領(lǐng)域】,涉及一種文件系統(tǒng)序列化操作日志 的捕獲和傳輸裝置及其方法,可用于遠(yuǎn)程數(shù)據(jù)容災(zāi)和備份軟件中,以保護(hù)本地文件系統(tǒng)的 關(guān)鍵數(shù)據(jù),能夠?qū)?shí)時(shí)捕獲的文件系統(tǒng)序列化操作日志,通過并行化網(wǎng)絡(luò)傳輸?shù)竭h(yuǎn)程災(zāi)備 機(jī)器上,既保證了對(duì)于原始數(shù)據(jù)備份的數(shù)據(jù)一致性要求,也保證了對(duì)備份后數(shù)據(jù)中以往任 意操作點(diǎn)的可恢復(fù)性。
【背景技術(shù)】
[0002] 傳統(tǒng)的數(shù)據(jù)容災(zāi)和備份技術(shù),是對(duì)本地文件系統(tǒng)上的關(guān)鍵數(shù)據(jù),進(jìn)行定期的完全 或增量備份,并使用去重技術(shù)來減少對(duì)存儲(chǔ)空間的耗費(fèi)來實(shí)現(xiàn)的。
[0003] 上述技術(shù)存在如下幾個(gè)主要缺陷,不能滿足更高要求的容災(zāi)和備份應(yīng)用需求:(1) 傳統(tǒng)的數(shù)據(jù)容災(zāi)和災(zāi)備技術(shù),為了保證數(shù)據(jù)一致性,需要對(duì)生產(chǎn)設(shè)備相關(guān)狀態(tài)進(jìn)行暫時(shí)凍 結(jié)或進(jìn)行快照,然后進(jìn)行定期的完全或增量備份,無法在用戶使用過程中實(shí)時(shí)捕獲增量修 改,并以接近實(shí)時(shí)(取決于網(wǎng)絡(luò)速度)地同步保證數(shù)據(jù)同步,備份時(shí)間粒度、系統(tǒng)開銷需求 都遠(yuǎn)遠(yuǎn)超過本發(fā)明;(2)傳統(tǒng)的備份技術(shù)由于未能保存序列化的操作日志,在恢復(fù)數(shù)據(jù)粒 度上取決于定期備份的精度,而使用本發(fā)明的恢復(fù)精度達(dá)到了系統(tǒng)每次I/O操作的級(jí)別, 遠(yuǎn)遠(yuǎn)高于傳統(tǒng)容災(zāi)備份技術(shù);(3)傳統(tǒng)的備份技術(shù)需要考慮使用額外的數(shù)據(jù)去重技術(shù)來減 少對(duì)存儲(chǔ)空間的需求,增加了系統(tǒng)資源和處理開銷。而本裝置中傳輸和保存的都是I/O操 作級(jí)別的增量數(shù)據(jù),節(jié)省了存儲(chǔ)和處理開銷。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的在于提供一種文件系統(tǒng)序列化操作日志的捕獲和傳輸方法及其裝 置,通過捕獲本地文件系統(tǒng)的序列化I/O操作日志,并通過使用基于規(guī)則的應(yīng)用緩存隊(duì)列、 多線程多規(guī)則并發(fā)機(jī)制,以及網(wǎng)絡(luò)保序機(jī)制,異步實(shí)時(shí)將災(zāi)備數(shù)據(jù)傳輸?shù)竭h(yuǎn)端災(zāi)備機(jī)器上 保存起來,既保證了災(zāi)備數(shù)據(jù)和原始數(shù)據(jù)的同步一致性;通過本發(fā)明提供的序列化操作日 志支持,在災(zāi)備恢復(fù)時(shí)能指定恢復(fù)到任意操作點(diǎn),可以實(shí)現(xiàn)指定具體哪個(gè)進(jìn)程(who)、什 么時(shí)間點(diǎn)(when)、針對(duì)哪個(gè)文件(which)、文件的操作位置(where),以及具體操作內(nèi)容 (what)的可針對(duì)性恢復(fù);通過本發(fā)明的增量序列化操作日志復(fù)制,節(jié)省了存儲(chǔ)空間,并減 少了系統(tǒng)處理資源開銷。
[0005] 本發(fā)明的技術(shù)方案為:
[0006] -種文件系統(tǒng)序列化操作日志的捕獲與傳輸方法,其步驟為:
[0007] 1)規(guī)則模塊將設(shè)定的復(fù)制規(guī)則發(fā)送到捕獲模塊;所述復(fù)制規(guī)則中的信息包括指 定文件和目錄、目標(biāo)備災(zāi)機(jī)地址、災(zāi)備路徑和工作機(jī)地址;
[0008] 2)捕獲模塊對(duì)復(fù)制規(guī)則中指定監(jiān)控的文件和目錄的I/O操作信息進(jìn)行實(shí)時(shí)捕獲, 并生成序列化I/O操作日志;
[0009] 3)緩存模塊將序列化I/O操作日志從內(nèi)核態(tài)拷貝到用戶態(tài),并針對(duì)不同復(fù)制規(guī)則 捕獲生成的序列化I/O操作日志采用不同的緩存隊(duì)列進(jìn)行緩存;
[0010] 4)本地網(wǎng)絡(luò)模塊根據(jù)復(fù)制規(guī)則中目標(biāo)災(zāi)備機(jī)地址以及工作機(jī)上監(jiān)控的目錄建立 網(wǎng)絡(luò)數(shù)據(jù)通道,將不同緩存隊(duì)列中的數(shù)據(jù)采用對(duì)應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)通道發(fā)送到不同備災(zāi)機(jī)中并 本地保存。
[0011] 進(jìn)一步的,所述序列化操作日志包括:1/〇操作發(fā)生的時(shí)間、發(fā)起的進(jìn)程、操作具 體針對(duì)哪個(gè)文件、文件的具體操作位置、操作的內(nèi)容。
[0012] 進(jìn)一步的,生成所述序列化I/O操作日志的方法為:捕獲模塊根據(jù)捕獲的系統(tǒng)I/O 操作信息,對(duì)系統(tǒng)I/O操作的類型進(jìn)行識(shí)別;并且使用分類匹配算法,將捕獲的I/O操作信 息中包含的相關(guān)路徑信息與下發(fā)的復(fù)制規(guī)則進(jìn)行匹配,判斷I/O操作是否在復(fù)制規(guī)則范圍 之內(nèi),如果是,則對(duì)其進(jìn)行遞增的唯一標(biāo)記,并保存其產(chǎn)生的時(shí)間戳信息;同時(shí)在捕獲一 1/ 0操作時(shí),為其設(shè)置一并行互斥鎖,保證此I/O操作進(jìn)入對(duì)應(yīng)的緩存對(duì)列之前的所有指令是 不能被中斷的原子操作。
[0013] 進(jìn)一步的,所述序列化I/O操作日志按先進(jìn)先出的隊(duì)列形式來緩存;每一所述緩 存隊(duì)列分成四個(gè)部分:已發(fā)送但未確認(rèn)的數(shù)據(jù),等待發(fā)送的數(shù)據(jù),已保存在磁盤中的數(shù)據(jù), 新加入的數(shù)據(jù)。
[0014] 進(jìn)一步的,所述捕獲模塊截獲每一 I/O操作時(shí),為該操作的操作日志記錄一個(gè)序 列化的遞增的唯一數(shù)字序號(hào),目標(biāo)災(zāi)備機(jī)根據(jù)數(shù)字序號(hào)對(duì)收到的I/O操作日志重新進(jìn)行1/ 0操作序列化。
[0015] 進(jìn)一步的,所述本地網(wǎng)絡(luò)模塊對(duì)每個(gè)序列化I/O操作日志的數(shù)據(jù)包設(shè)置一遞增的 包序列號(hào),目標(biāo)災(zāi)備機(jī)在收到若干個(gè)數(shù)據(jù)包后發(fā)送最新收到的包序列號(hào)給該本地網(wǎng)絡(luò)模塊 進(jìn)行確認(rèn),該本地網(wǎng)絡(luò)模塊刪除緩存隊(duì)列中已確認(rèn)的數(shù)據(jù)包;如果目標(biāo)災(zāi)備機(jī)發(fā)現(xiàn)有丟包 則發(fā)送包序列錯(cuò)誤的消息,該本地網(wǎng)絡(luò)模塊找到對(duì)應(yīng)序列號(hào)的數(shù)據(jù)包重新發(fā)送。
[0016] 進(jìn)一步的,在Linux操作系統(tǒng)上,所述捕獲模塊利用堆疊式文件系統(tǒng)中的VFS層對(duì) I/O操作進(jìn)行截獲;在Windows操作系統(tǒng)上,所述捕獲模塊通過可加載的文件系統(tǒng)IFS對(duì)1/ 0請(qǐng)求包進(jìn)行截獲;所述復(fù)制規(guī)則還包括是否壓縮、加密以及帶寬控制處理策略參數(shù)。
[0017] 一種文件系統(tǒng)序列化操作日志的捕獲與傳輸裝置,其特征在于包括通過網(wǎng)絡(luò)連接 的若干工作機(jī)和若干備災(zāi)機(jī);每一工作機(jī)上包括規(guī)則模塊、捕獲模塊、緩存模塊、本地網(wǎng)絡(luò) 模塊;
[0018] 其中,所述規(guī)則模塊,用于將設(shè)定的復(fù)制規(guī)則發(fā)送到捕獲模塊;所述復(fù)制規(guī)則中的 信息包括指定文件和目錄、目標(biāo)備災(zāi)機(jī)地址;
[0019] 所述捕獲模塊,用于對(duì)復(fù)制規(guī)則中指定監(jiān)控的文件和目錄的I/O操作信息進(jìn)行實(shí) 時(shí)捕獲,并生成序列化I/O操作日志;
[0020] 所述緩存模塊,用于將序列化I/O操作日志從內(nèi)核態(tài)拷貝到用戶態(tài),并針對(duì)不同 復(fù)制規(guī)則捕獲生成的序列化I/O操作日志采用不同的緩存隊(duì)列進(jìn)行緩存;
[0021] 所述本地網(wǎng)絡(luò)模塊,用于根據(jù)復(fù)制規(guī)則中目標(biāo)災(zāi)備機(jī)地址以及工作機(jī)上監(jiān)控的目 錄建立網(wǎng)絡(luò)數(shù)據(jù)通道,將不同緩存隊(duì)列中的數(shù)據(jù)采用對(duì)應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)通道發(fā)送到不同備災(zāi) 機(jī)中并本地保存。
[0022] 進(jìn)一步的,所述序列化操作日志包括:1/0操作發(fā)生的時(shí)間、發(fā)起的進(jìn)程、操作具 體針對(duì)哪個(gè)文件、文件的具體操作位置、操作的內(nèi)容。
[0023] 進(jìn)一步的,所述捕獲模塊截獲每一 I/O操作時(shí),為該操作的操作日志記錄一個(gè)序 列化的遞增的唯一數(shù)字序號(hào),目標(biāo)災(zāi)備機(jī)根據(jù)數(shù)字序號(hào)對(duì)收到的I/O操作日志重新進(jìn)行1/ 〇操作序列化;所述復(fù)制規(guī)則還包括是否壓縮、加密以及帶寬控制處理策略參數(shù);所述本地 網(wǎng)絡(luò)模塊對(duì)每個(gè)序列化I/O操作日志的數(shù)據(jù)包設(shè)置一遞增的包序列號(hào),目標(biāo)災(zāi)備機(jī)在收到 若干個(gè)數(shù)據(jù)包后發(fā)送最新收到的包序列號(hào)給該本地網(wǎng)絡(luò)模塊進(jìn)行確認(rèn),該本地網(wǎng)絡(luò)模塊刪 除緩存隊(duì)列中已確認(rèn)的數(shù)據(jù)包;如果目標(biāo)災(zāi)備機(jī)發(fā)現(xiàn)有丟包則發(fā)送包序列錯(cuò)誤的消息,該 本地網(wǎng)絡(luò)模塊找到對(duì)應(yīng)序列號(hào)的數(shù)據(jù)包重新發(fā)送。
[0024] 本裝置的上述發(fā)明是通過如下的系統(tǒng)模塊結(jié)構(gòu)和技術(shù)方案實(shí)現(xiàn)的:
[0025] 本發(fā)明裝置主要包含有規(guī)則模塊、捕獲模塊、本地緩存模塊、本地網(wǎng)絡(luò)模塊,以及 遠(yuǎn)程網(wǎng)絡(luò)模塊。
[0026] 其中規(guī)則模塊用于管理復(fù)制規(guī)則,復(fù)制規(guī)則指定工作機(jī)上需要進(jìn)行捕獲序列化操 作的文件和目錄、指定災(zāi)備機(jī)地址、災(zāi)備路徑等傳輸目的,以及設(shè)定傳輸是否進(jìn)行加密、壓 縮、帶寬控制等處理策略,復(fù)制規(guī)則還包含有識(shí)別規(guī)則的UUID、以及工作機(jī)地址等信息;捕 獲模塊進(jìn)行序列化操作的捕獲;本地緩存模塊主要解決生產(chǎn)機(jī)(即工作機(jī))系統(tǒng)資源和性 能之間的平衡問題;本地和遠(yuǎn)程網(wǎng)絡(luò)模塊用于并行異步的網(wǎng)絡(luò)傳輸。
[0027] 本發(fā)明裝置主要的技術(shù)要點(diǎn)及方法步驟如下:
[0028] 1.文件系統(tǒng)序列化I/O操作日志的實(shí)時(shí)捕獲
[0029] 應(yīng)用程序在對(duì)文件系統(tǒng)中具體文件進(jìn)行讀寫I/O操作時(shí),通常都是通過調(diào)用操作 系統(tǒng)的API接口函數(shù)來實(shí)現(xiàn),系統(tǒng)產(chǎn)生I/O操作的序列化請(qǐng)求包,發(fā)送到文件系統(tǒng)和底層設(shè) 備驅(qū)動(dòng),才將應(yīng)用程序需要保存的數(shù)據(jù)保存到硬件存儲(chǔ)設(shè)備上。本發(fā)明通過加載文件系統(tǒng) 的操作捕獲模塊,并通過規(guī)則模塊下發(fā)復(fù)制規(guī)則到捕獲模塊,對(duì)指定的目錄和文件進(jìn)行監(jiān) 控,實(shí)時(shí)透明截獲規(guī)則指定的上層應(yīng)用程序傳遞的I/O操作請(qǐng)求。本發(fā)明裝置在Linux操 作系統(tǒng)上通過堆疊式文件系統(tǒng)(Stackable Filesystem)中VFS(Virtual File System)層 對(duì)I/O操作進(jìn)行截獲,在Windows操作系統(tǒng)上通過可加載的文件系統(tǒng)(Installable File System,IFS)對(duì)IRP (I/O請(qǐng)求包)進(jìn)行截獲。捕獲模塊通過對(duì)I/O操作信息的序列化獲取, 將各個(gè)I/O操作發(fā)生的時(shí)間(when)、發(fā)起的進(jìn)程(who)、操作具體針對(duì)哪個(gè)文件(which)、文 件的具體操作位置(where)、操作的內(nèi)容(what)組織成序列化操作日志。
[0030] 建立在現(xiàn)代多核并行處理結(jié)構(gòu)之上的硬件體系和操作系統(tǒng),基于性能考慮,其I/O 操作是異步并發(fā)分層傳遞的,本系統(tǒng)的捕獲模塊位于操作系統(tǒng)的應(yīng)用程序接口和系統(tǒng)緩存 機(jī)制(例如PageCache和BufferCache)之間,也存在系統(tǒng)內(nèi)的I/O并發(fā)、異步和緩存處理 導(dǎo)致的亂序問題,而對(duì)于文件和目錄、特別是數(shù)據(jù)庫操作,必須進(jìn)行嚴(yán)格的序列化處理,才 能保證災(zāi)備端的數(shù)據(jù)和工作機(jī)的實(shí)時(shí)同步以及數(shù)據(jù)一致性。
[0031] 捕獲模塊提供了基于規(guī)則的序列化10隊(duì)列,首先通過提取捕獲的系統(tǒng)1/ 0操作相關(guān)引用和堆棧信息,對(duì)系統(tǒng)I/O操作的類型進(jìn)行識(shí)別;同時(shí)通過使用優(yōu)化的 CSAC(Classification on Self-Adaptive Cache)分類匹配算法,將此捕獲的I/O操作信息 中包含的相關(guān)路徑信息和用編譯下發(fā)的規(guī)則進(jìn)行匹配,判斷I/O操作是否在復(fù)制規(guī)則范圍 之內(nèi);如果此I/O操作符合規(guī)則,則對(duì)其進(jìn)行規(guī)則內(nèi)的遞增唯一標(biāo)記,以及保存其產(chǎn)生的時(shí) 間戳信息;同時(shí)在捕獲發(fā)生時(shí),就設(shè)置并行互斥鎖,保證此I/O操作進(jìn)入規(guī)則緩存隊(duì)列之前 的所有指令是不能被中斷的原子操作。通過以上步驟,將可能亂序傳遞的捕獲I/O操作進(jìn) 行序列化標(biāo)記,放入待上傳工作機(jī)應(yīng)用層的緩存隊(duì)列。
[0032] 2.注意此時(shí)I/O操作日志中雖然進(jìn)行了序列化處理,但由于內(nèi)核數(shù)據(jù)上傳以及應(yīng) 用線程調(diào)度等原因,應(yīng)用層發(fā)送隊(duì)列中的數(shù)據(jù)發(fā)送次序,以及災(zāi)備機(jī)接收到的I/O操作日 志順序,卻不一定是按照序列化排列的,需要在災(zāi)備端進(jìn)一步按照序號(hào)標(biāo)記進(jìn)行序列化處 理,后面也會(huì)提到相關(guān)內(nèi)容。序列化I/O操作日志的傳輸緩存機(jī)制
[0033] 本發(fā)明將序列化I/O操作日志通過對(duì)應(yīng)系統(tǒng)環(huán)境提供的數(shù)據(jù)拷貝機(jī)制(例如 linux下的netlink和windows下的CommunicationPort)從內(nèi)核態(tài)拷貝到用戶態(tài),然后再 將這些操作日志緩存在內(nèi)存或磁盤中等待網(wǎng)絡(luò)傳輸?shù)竭h(yuǎn)端的災(zāi)備機(jī)。緩存隊(duì)列的作用是序 列化I/O操作日志產(chǎn)生的速度高于網(wǎng)絡(luò)的傳輸?shù)乃俣葧r(shí)保證I/O不受影響且操作的日志不 會(huì)丟失。序列化I/O操作日志按先進(jìn)先出的隊(duì)列形式來緩存,緩存隊(duì)列的組織方式是按每 規(guī)則(對(duì)于規(guī)則的解釋見3中關(guān)于的描述)來分開存儲(chǔ)的,即由規(guī)則模塊下發(fā)到捕獲模塊 中的每一條復(fù)制規(guī)則都擁有各自對(duì)應(yīng)的獨(dú)立的緩存隊(duì)列,這樣在后續(xù)發(fā)送到災(zāi)備機(jī)的過程 中,就可以進(jìn)行并發(fā)的異步傳輸,提高系統(tǒng)效率。在本發(fā)明中的本地緩存模塊將一個(gè)獨(dú)立的 緩存隊(duì)列分成四個(gè)部分:sended--已發(fā)送但未確認(rèn)的數(shù)據(jù)(數(shù)據(jù)即指隊(duì)列中的序列化1/ 〇操作日志),ready-等待發(fā)送的數(shù)據(jù),save-保存在磁盤中的數(shù)據(jù),new-新加入 的數(shù)據(jù)。sended數(shù)據(jù)是在網(wǎng)絡(luò)傳輸出錯(cuò)時(shí)用來重新發(fā)送的,ready數(shù)據(jù)是馬上能用來網(wǎng)絡(luò) 發(fā)送的數(shù)據(jù),save數(shù)據(jù)是緩存在磁盤中的數(shù)據(jù),在內(nèi)存緊張時(shí)由new轉(zhuǎn)存到磁盤上,new數(shù) 據(jù)是新加入隊(duì)列的數(shù)據(jù),即剛從內(nèi)核態(tài)收上來的數(shù)據(jù)。為了合理的利用內(nèi)存和磁盤的資源 并減少性能瓶頸,sended,ready,new的數(shù)據(jù)都在內(nèi)存中,提高數(shù)據(jù)的存取速度,save的數(shù) 據(jù)在磁盤上,通過先進(jìn)先出(FIFO)調(diào)度策略轉(zhuǎn)換到ready中,sendecbready有內(nèi)存使用限 制,new根據(jù)內(nèi)存的情況決定內(nèi)存使用量,save對(duì)磁盤的使用受磁盤資源的限制。
[0034] 3.基于規(guī)則的數(shù)據(jù)并行網(wǎng)絡(luò)傳輸處理
[0035] 本發(fā)明中,緩存在2所描述隊(duì)列中的序列化1/0操作日志這些數(shù)據(jù)需要通過網(wǎng)絡(luò) 的方式從本地工作機(jī)傳輸?shù)竭h(yuǎn)端災(zāi)備機(jī),傳輸數(shù)據(jù)的準(zhǔn)備和接收數(shù)據(jù)的處理,統(tǒng)稱為網(wǎng)絡(luò) 傳輸處理,是裝置系統(tǒng)中重要的組成,包含了本地網(wǎng)絡(luò)模塊和對(duì)應(yīng)的遠(yuǎn)程網(wǎng)絡(luò)模塊。本發(fā)明 中的規(guī)則是指:工作機(jī)地址,災(zāi)備機(jī)地址,工作機(jī)上監(jiān)控的源目錄為主要元素構(gòu)成的一個(gè)組 合,若改變其中任何一個(gè)元素又構(gòu)成一個(gè)新的組合,一個(gè)組合稱為一條規(guī)則。在工作機(jī)和災(zāi) 備機(jī)都可以設(shè)定多條規(guī)則,每條規(guī)則有獨(dú)立的網(wǎng)絡(luò)數(shù)據(jù)通道,數(shù)據(jù)的網(wǎng)絡(luò)傳輸處理基于不 同的網(wǎng)絡(luò)數(shù)據(jù)通道用不同的線程來并行處理,提高不同規(guī)則的并行處理能力。
[0036] 4.序列化1/0操作日志的保序機(jī)制
[0037] 文件系統(tǒng)的1/0操作通常是要求序列化的,因此這些操作日志也必須保持他原有 的操作次序。正如上文所描述的,截獲模塊在1/0操作被截獲時(shí)的次序是已經(jīng)經(jīng)過序列化 處理的,但在內(nèi)核態(tài)的截獲模塊向用戶態(tài)拷貝過程中或在網(wǎng)絡(luò)傳輸?shù)倪^程中,由于拷貝的 機(jī)制和線程調(diào)度的原因有可能導(dǎo)致這種次序被打亂,這種次序被打亂會(huì)破壞數(shù)據(jù)的一致 性。工作機(jī)為保證1/0操作被截獲時(shí)的次序真實(shí)正確的提供給災(zāi)備機(jī),在1/0操作被截獲 時(shí)通過對(duì)系統(tǒng)1/0操作的類型識(shí)別、規(guī)則匹配度判斷、操作發(fā)生標(biāo)記,以及上下文互斥時(shí)間 戳同步技術(shù),為每個(gè)操作日志在規(guī)則緩存隊(duì)列內(nèi),記錄一個(gè)序列化的遞增的唯一數(shù)字序號(hào)。 雖然工作機(jī)捕獲的1/0操作已經(jīng)做了序列化標(biāo)記處理,但由于內(nèi)核數(shù)據(jù)上傳以及應(yīng)用層調(diào) 度,災(zāi)備機(jī)收到的1/0操作日志,還是可能會(huì)存在亂序情況,災(zāi)備機(jī)接受模塊還需要對(duì)個(gè)別 亂序通過日志記錄中的數(shù)字序號(hào)重新將I/O操作序列化。這種保序機(jī)制的數(shù)字序號(hào)遞增是 在每規(guī)則內(nèi)進(jìn)行的,并且需要通過滑動(dòng)窗口判斷,重新序列化時(shí)對(duì)此規(guī)則隊(duì)列內(nèi)的序號(hào)進(jìn) 行溢出翻轉(zhuǎn)處理。
[0038] 5.序列化I/O操作日志的網(wǎng)絡(luò)發(fā)送和接收異步操作
[0039] 本發(fā)明為減少線程調(diào)度的開銷和網(wǎng)絡(luò)的吞吐率,網(wǎng)絡(luò)傳輸采用異步的方式。因?yàn)?采用異步傳輸方式,為確保I/O操作日志在傳輸?shù)倪^程中不被丟失,工作機(jī)在每個(gè)操作日 志的數(shù)據(jù)包都要加入遞增的包序列號(hào),災(zāi)備機(jī)在收到若干個(gè)數(shù)據(jù)包后發(fā)送最新收到的包序 列號(hào),工作機(jī)則刪除已發(fā)送的規(guī)則隊(duì)列內(nèi)確認(rèn)的數(shù)據(jù)包,如果災(zāi)備機(jī)發(fā)現(xiàn)有丟包則發(fā)送包 序列錯(cuò)誤的消息,工作機(jī)找到按要求的序列號(hào)重新發(fā)送數(shù)據(jù)包。數(shù)據(jù)包的序列號(hào)的遞增和 確認(rèn)是在每個(gè)規(guī)則的網(wǎng)絡(luò)數(shù)據(jù)通道中實(shí)現(xiàn)的,即規(guī)則間互不影響。
[0040] 本發(fā)明的優(yōu)點(diǎn)和積極效果如下:
[0041] 1.本發(fā)明通過將文件系統(tǒng)序列化I/O操作日志實(shí)時(shí)捕獲并傳輸?shù)綖?zāi)備端,通過 使用多規(guī)則隊(duì)列并發(fā)異步處理機(jī)制,在盡可能短的時(shí)間內(nèi)保證了源數(shù)據(jù)和災(zāi)備數(shù)據(jù)的一致 性;
[0042] 2.本發(fā)明通過保存捕獲的文件系統(tǒng)序列化I/O操作日志,保證了災(zāi)備信息的完整 性,使容災(zāi)系統(tǒng)可以做到針對(duì)指定進(jìn)程(who),在指定時(shí)間(when),對(duì)指定文件(which),指 定文件的位置(where),以及指定的操作內(nèi)容(what)進(jìn)行恢復(fù),大大提高了容災(zāi)恢復(fù)的精 確性和靈活程度;
[0043] 3.本發(fā)明通過保存規(guī)則內(nèi)的文件系統(tǒng)序列化I/O操作的增量數(shù)據(jù),最大限度減少 了對(duì)備份存儲(chǔ)空間的要求。
【專利附圖】
【附圖說明】
[0044] 圖1本發(fā)明的裝置系統(tǒng)結(jié)構(gòu)圖;
[0045] 圖2本發(fā)明的文件系統(tǒng)序列化I/O操作捕獲的示意圖;
[0046] 圖3本發(fā)明的文件系統(tǒng)序列化I/O操作并行網(wǎng)絡(luò)傳輸?shù)慕换D。
【具體實(shí)施方式】
[0047] 以下是參照附圖對(duì)本發(fā)明的一種文件系統(tǒng)序列化操作日志的捕獲和傳輸裝置及 其方法進(jìn)行詳細(xì)說明。
[0048] 圖1為本裝置的系統(tǒng)結(jié)構(gòu)圖。
[0049] 首先用戶通過規(guī)則模塊下發(fā)指定文件和目錄、傳輸目的,以及壓縮、加密、帶寬控 制等處理策略參數(shù)的復(fù)制規(guī)則到捕獲模塊,來決定捕獲和傳遞哪些指定文件和目錄的序列 化操作日志,這樣可以在各個(gè)數(shù)據(jù)流進(jìn)行各自的策略化處理,同時(shí)由于各個(gè)復(fù)制規(guī)則之間 是由不同的發(fā)送和接收線程并行處理的,所以各個(gè)數(shù)據(jù)流也是進(jìn)行并行化處理。
[0050] 當(dāng)應(yīng)用程序在對(duì)文件系統(tǒng)中復(fù)制規(guī)則指定的文件或目錄進(jìn)行讀、寫等訪問操作 時(shí),會(huì)通過系統(tǒng)API調(diào)用傳遞給操作系統(tǒng)內(nèi)核處理,在主流操作系統(tǒng)支持下,本裝置在文件 系統(tǒng)數(shù)據(jù)通道上加載對(duì)應(yīng)的堆疊式文件系統(tǒng)或可加載文件系統(tǒng)捕獲模塊,截獲文件操作 序列化的I/O操作數(shù)據(jù)流或IRP (I/O請(qǐng)求包)。例如在Linux系統(tǒng)中,通過可堆疊文件系 統(tǒng)(Stackable Filesystem)的 VFS(Virtual File System)架構(gòu)的支持,對(duì) inode 操作 (例如 create、link、unlink、mkdir、rmdir、rename、setattr 等操作)、file 操作(例如 open、flush、llseek、write、aio_write、release 等操作),以及 address_space 操作(例 如 writepage、prepare_write、commit_write 等操作)進(jìn)行截獲;在 Windows 系統(tǒng)中,通過 可加載的文件系統(tǒng)(Installable File System)的File System Filter架構(gòu)的支持,對(duì) IRP_MJ_SET_INFORMATION、IRP_MJ_SET_SECURITY、IRP_MJ_CREATE、IRP_MJ_WRITE、IRP_MJ_ CLOSE等IRP操作進(jìn)行截獲,將各個(gè)I/O操作發(fā)生的時(shí)間(when)、發(fā)起的進(jìn)程(who)、操作具 體針對(duì)哪個(gè)文件(which)、文件的具體操作位置(where)、操作的內(nèi)容(what)組織成序列化 操作日志。
[0051] 圖2即為本裝置捕獲模塊中文件系統(tǒng)序列化I/O操作捕獲的示意圖。
[0052] 在獲得序列化的I/O操作數(shù)據(jù)流以后,本裝置通過對(duì)應(yīng)系統(tǒng)環(huán)境提供的內(nèi)存空間 地址轉(zhuǎn)換管道(例如linux下的netlink機(jī)制,以及windows下的CommunicationPort),將 數(shù)據(jù)從內(nèi)核態(tài)傳遞到用戶態(tài)。緩存模塊的作用是序列化I/O操作日志產(chǎn)生的速度高于網(wǎng)絡(luò) 的傳輸?shù)乃俣葧r(shí),保證I/O不受影響且操作的日志不會(huì)丟失。本裝置的本地緩存模塊根據(jù) 當(dāng)前系統(tǒng)資源狀態(tài)(CPU、內(nèi)存、網(wǎng)絡(luò)等使用情況),決定是將數(shù)據(jù)先緩存到磁盤,后期再發(fā) 往網(wǎng)絡(luò)模塊處理,還是直接發(fā)往本地網(wǎng)絡(luò)模塊處理,以保證不影響本地工作機(jī)正常的生產(chǎn) 服務(wù)。
[0053] 圖3為該裝置本地及遠(yuǎn)程網(wǎng)絡(luò)模塊中的文件系統(tǒng)序列化1/0操作傳輸交互圖
[0054] 本裝置根據(jù)策略規(guī)則在生產(chǎn)機(jī)和遠(yuǎn)程的災(zāi)備機(jī)之間建立起網(wǎng)絡(luò)數(shù)據(jù)通道,將序列 化的1/0操作根據(jù)規(guī)則分配給對(duì)應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)通道,并根據(jù)數(shù)據(jù)通道的收發(fā)情況,決定是 否需要先緩存1/0操作到本地存儲(chǔ),而發(fā)送模塊會(huì)根據(jù)序列號(hào)優(yōu)先將緩存處理完畢。
[0055] 本裝置將基于規(guī)則的序列化1/0操作通過對(duì)應(yīng)網(wǎng)絡(luò)數(shù)據(jù)通道,以實(shí)現(xiàn)1/0操作數(shù) 據(jù)的并行發(fā)送傳輸。
[0056] 本裝置在每個(gè)1/0操作包上都帶有操作序號(hào)和規(guī)則信息,在傳遞1/0操作數(shù)據(jù)時(shí), 始終通過保證1/0操作的序號(hào)來保證文件的一致性。
[0057] 本裝置的網(wǎng)絡(luò)傳輸基于UDT平臺(tái),保證了網(wǎng)絡(luò)發(fā)送和接收異步操作的可靠性。
[0058] 最后應(yīng)說明的是:以上實(shí)施例僅用以說明而非限制本發(fā)明的技術(shù)方案,盡管參照 上述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解:依然可以對(duì)本發(fā)明進(jìn) 行修改或者等同替換,而不脫離本發(fā)明的精神和范圍的任何修改或局部替換,其均應(yīng)涵蓋 在本發(fā)明的權(quán)利要求范圍當(dāng)中。
【權(quán)利要求】
1. 一種文件系統(tǒng)序列化操作日志的捕獲與傳輸方法,其步驟為: 1) 規(guī)則模塊將設(shè)定的復(fù)制規(guī)則發(fā)送到捕獲模塊;所述復(fù)制規(guī)則中的信息包括指定文 件和目錄、目標(biāo)備災(zāi)機(jī)地址、災(zāi)備路徑和工作機(jī)地址; 2) 捕獲模塊對(duì)復(fù)制規(guī)則中指定監(jiān)控的文件和目錄的I/O操作信息進(jìn)行實(shí)時(shí)捕獲,并生 成序列化I/O操作日志; 3) 緩存模塊將序列化I/O操作日志從內(nèi)核態(tài)拷貝到用戶態(tài),并針對(duì)不同復(fù)制規(guī)則捕獲 生成的序列化I/O操作日志采用不同的緩存隊(duì)列進(jìn)行緩存; 4) 本地網(wǎng)絡(luò)模塊根據(jù)復(fù)制規(guī)則中目標(biāo)災(zāi)備機(jī)地址以及工作機(jī)上監(jiān)控的目錄建立網(wǎng)絡(luò) 數(shù)據(jù)通道,將不同緩存隊(duì)列中的數(shù)據(jù)采用對(duì)應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)通道發(fā)送到不同備災(zāi)機(jī)中并本地 保存。
2. 如權(quán)利要求1所述的方法,其特征在于所述序列化操作日志包括:1/0操作發(fā)生的時(shí) 間、發(fā)起的進(jìn)程、操作具體針對(duì)哪個(gè)文件、文件的具體操作位置、操作的內(nèi)容。
3. 如權(quán)利要求1或2所述的方法,其特征在于生成所述序列化I/O操作日志的方法為: 捕獲模塊根據(jù)捕獲的系統(tǒng)I/O操作信息,對(duì)系統(tǒng)I/O操作的類型進(jìn)行識(shí)別;并且使用分類匹 配算法,將捕獲的I/O操作信息中包含的相關(guān)路徑信息與下發(fā)的復(fù)制規(guī)則進(jìn)行匹配,判斷 I/O操作是否在復(fù)制規(guī)則范圍之內(nèi),如果是,則對(duì)其進(jìn)行遞增的唯一標(biāo)記,并保存其產(chǎn)生的 時(shí)間戳信息;同時(shí)在捕獲一 I/O操作時(shí),為其設(shè)置一并行互斥鎖,保證此I/O操作進(jìn)入對(duì)應(yīng) 的緩存對(duì)列之前的所有指令是不能被中斷的原子操作。
4. 如權(quán)利要求3所述的方法,其特征在于所述序列化I/O操作日志按先進(jìn)先出的隊(duì)列 形式來緩存;每一所述緩存隊(duì)列分成四個(gè)部分:已發(fā)送但未確認(rèn)的數(shù)據(jù),等待發(fā)送的數(shù)據(jù), 已保存在磁盤中的數(shù)據(jù),新加入的數(shù)據(jù)。
5. 如權(quán)利要求4所述的方法,其特征在于所述捕獲模塊截獲每一 I/O操作時(shí),為該操作 的操作日志記錄一個(gè)序列化的遞增的唯一數(shù)字序號(hào),目標(biāo)災(zāi)備機(jī)根據(jù)數(shù)字序號(hào)對(duì)收到的1/ 〇操作日志重新進(jìn)行I/O操作序列化。
6. 如權(quán)利要求1或2所述的方法,其特征在于所述本地網(wǎng)絡(luò)模塊對(duì)每個(gè)序列化I/O操 作日志的數(shù)據(jù)包設(shè)置一遞增的包序列號(hào),目標(biāo)災(zāi)備機(jī)在收到若干個(gè)數(shù)據(jù)包后發(fā)送最新收到 的包序列號(hào)給該本地網(wǎng)絡(luò)模塊進(jìn)行確認(rèn),該本地網(wǎng)絡(luò)模塊刪除緩存隊(duì)列中已確認(rèn)的數(shù)據(jù) 包;如果目標(biāo)災(zāi)備機(jī)發(fā)現(xiàn)有丟包則發(fā)送包序列錯(cuò)誤的消息,該本地網(wǎng)絡(luò)模塊找到對(duì)應(yīng)序列 號(hào)的數(shù)據(jù)包重新發(fā)送。
7. 如權(quán)利要求1或2所述的方法,其特征在于在Linux操作系統(tǒng)上,所述捕獲模塊利用 堆疊式文件系統(tǒng)中的VFS層對(duì)I/O操作進(jìn)行截獲;在Windows操作系統(tǒng)上,所述捕獲模塊通 過可加載的文件系統(tǒng)IFS對(duì)I/O請(qǐng)求包進(jìn)行截獲;所述復(fù)制規(guī)則還包括是否壓縮、加密以及 帶寬控制處理策略參數(shù)。
8. -種文件系統(tǒng)序列化操作日志的捕獲與傳輸裝置,其特征在于包括通過網(wǎng)絡(luò)連接的 若干工作機(jī)和若干備災(zāi)機(jī);每一工作機(jī)上包括規(guī)則模塊、捕獲模塊、緩存模塊、本地網(wǎng)絡(luò)模 塊; 其中,所述規(guī)則模塊,用于將設(shè)定的復(fù)制規(guī)則發(fā)送到捕獲模塊;所述復(fù)制規(guī)則中的信息 包括指定文件和目錄、目標(biāo)備災(zāi)機(jī)地址; 所述捕獲模塊,用于對(duì)復(fù)制規(guī)則中指定監(jiān)控的文件和目錄的I/O操作信息進(jìn)行實(shí)時(shí)捕 獲,并生成序列化I/O操作日志; 所述緩存模塊,用于將序列化I/O操作日志從內(nèi)核態(tài)拷貝到用戶態(tài),并針對(duì)不同復(fù)制 規(guī)則捕獲生成的序列化I/O操作日志采用不同的緩存隊(duì)列進(jìn)行緩存; 所述本地網(wǎng)絡(luò)模塊,用于根據(jù)復(fù)制規(guī)則中目標(biāo)災(zāi)備機(jī)地址以及工作機(jī)上監(jiān)控的目錄建 立網(wǎng)絡(luò)數(shù)據(jù)通道,將不同緩存隊(duì)列中的數(shù)據(jù)采用對(duì)應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)通道發(fā)送到不同備災(zāi)機(jī)中 并本地保存。
9. 如權(quán)利要求8所述的裝置,其特征在于所述序列化操作日志包括:1/0操作發(fā)生的時(shí) 間、發(fā)起的進(jìn)程、操作具體針對(duì)哪個(gè)文件、文件的具體操作位置、操作的內(nèi)容。
10. 如權(quán)利要求8或9所述的裝置,其特征在于所述捕獲模塊截獲每一 I/O操作時(shí),為 該操作的操作日志記錄一個(gè)序列化的遞增的唯一數(shù)字序號(hào),目標(biāo)災(zāi)備機(jī)根據(jù)數(shù)字序號(hào)對(duì)收 到的I/O操作日志重新進(jìn)行I/O操作序列化;所述復(fù)制規(guī)則還包括是否壓縮、加密以及帶寬 控制處理策略參數(shù);所述本地網(wǎng)絡(luò)模塊對(duì)每個(gè)序列化I/O操作日志的數(shù)據(jù)包設(shè)置一遞增的 包序列號(hào),目標(biāo)災(zāi)備機(jī)在收到若干個(gè)數(shù)據(jù)包后發(fā)送最新收到的包序列號(hào)給該本地網(wǎng)絡(luò)模塊 進(jìn)行確認(rèn),該本地網(wǎng)絡(luò)模塊刪除緩存隊(duì)列中已確認(rèn)的數(shù)據(jù)包;如果目標(biāo)災(zāi)備機(jī)發(fā)現(xiàn)有丟包 則發(fā)送包序列錯(cuò)誤的消息,該本地網(wǎng)絡(luò)模塊找到對(duì)應(yīng)序列號(hào)的數(shù)據(jù)包重新發(fā)送。
【文檔編號(hào)】H04L29/08GK104216806SQ201410439971
【公開日】2014年12月17日 申請(qǐng)日期:2014年9月1日 優(yōu)先權(quán)日:2014年7月24日
【發(fā)明者】吳開宇, 周華, 胡軍擎 申請(qǐng)人:英方軟件(上海)有限公司