本公開的實施例一般涉及存儲系統(tǒng),并且特別涉及一種用于存儲系統(tǒng)中的軟切換的方法和裝置。
背景技術(shù):
為了防范可能破壞數(shù)據(jù)可用性的事件,對數(shù)據(jù)而言具有冗余副本是至關(guān)重要的。復(fù)制(replication)是一種進程,在該進程中,使用快照(snapshot)技術(shù)在對文件應(yīng)用和塊應(yīng)用的本地保護或者遠程保護對數(shù)據(jù)進行復(fù)制。在源端的存儲系統(tǒng)失效的情況中,這提供了增強級別的冗余。
軟切換復(fù)制是用于對存儲資源的災(zāi)難恢復(fù)的復(fù)制情況之一。軟切換(同步失效轉(zhuǎn)移)使得目標端存儲資源的邏輯單元號(LUN)或者文件系統(tǒng)能夠可用于所托管的存儲資源而沒有數(shù)據(jù)丟失。它逆轉(zhuǎn)復(fù)制會話,從而在管理路徑和數(shù)據(jù)路徑上都可用并且完全參與整個進程的原始資源成為新的目標存儲資源。
在復(fù)制進程中,從禁用主機數(shù)據(jù)訪問的步驟開始到啟用主機數(shù)據(jù)訪問的步驟結(jié)束,系統(tǒng)將會禁止輸入/輸出(I/O)操作,即數(shù)據(jù)的寫入和/或讀取操作。當用戶從系統(tǒng)得到快速和及時的反饋時,系統(tǒng)才被認為是有響應(yīng)的。因此,通常應(yīng)當在3秒內(nèi)向用戶命令提供反饋,但是現(xiàn)有的復(fù)制同步操作要求比3秒長得多的時間。當網(wǎng)絡(luò)狀況不佳時,將會花費更多的時間。為此,期望在存儲陣列上的周轉(zhuǎn)時間非常短。
技術(shù)實現(xiàn)要素:
鑒于現(xiàn)有技術(shù)中存在的上述問題,本公開的實施例的目的在于 提供一種用于存儲系統(tǒng)中的軟切換的方法和裝置,以在源端離線或者被設(shè)置為只讀之后并且目標端還沒有就緒時處理用戶對源端數(shù)據(jù)的訪問操作。根據(jù)本發(fā)明的實施例的方法和裝置可以幫助確保軟切換完成而無需中止或者中斷用戶對數(shù)據(jù)的輸入/輸出操作,從而解決現(xiàn)有技術(shù)中的上述以及其他的問題。
根據(jù)本公開的實施例的第一方面,提供了一種用于存儲系統(tǒng)中的軟切換的方法。該方法包括:響應(yīng)于軟切換請求,將軟切換的源端的數(shù)據(jù)設(shè)置為只讀并且啟動所述數(shù)據(jù)向軟切換的目標端的復(fù)制進程;在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作,并且將所述更新操作同步記錄到所述目標端;響應(yīng)于所述復(fù)制進程的完成,在所述目標端利用所述同步記錄的更新操作來更新所復(fù)制的數(shù)據(jù);以及禁用對所述源端的數(shù)據(jù)訪問并且啟用對所述目標端的數(shù)據(jù)訪問。
在一些實施例中,在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作,并且將所述更新操作同步記錄到所述目標端包括:在所述源端還記錄在所述復(fù)制進程期間寫入的新數(shù)據(jù),并且將所述寫入的新數(shù)據(jù)同步記錄到所述目標端。
在一些實施例中,在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作,并且將所述更新操作同步記錄到所述目標端包括:在所述源端創(chuàng)建源端緩存并且在所述目標端創(chuàng)建目標端緩存,以用于在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作和寫入的新數(shù)據(jù)并且同步記錄到所述目標端。
在一些實施例中,在所述源端創(chuàng)建源端緩存并且在所述目標端創(chuàng)建目標端緩存,以用于在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作和寫入的新數(shù)據(jù)并且同步記錄到所述目標端包括:通過所述源端緩存來記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作和寫入的新數(shù)據(jù),并且同步記錄到所述目標端緩存。
在一些實施例中,所述源端緩存和所述目標端緩存在邏輯上通過互為鏡像的數(shù)據(jù)結(jié)構(gòu)來表示。
在一些實施例中,所述數(shù)據(jù)結(jié)構(gòu)包括頭部和主體,所述頭部包括緩存指針和inode鏈,所述主體至少包括所述寫入的新數(shù)據(jù)。
在一些實施例中,所述緩存指針至少存儲所述inode鏈的入口地址,并且所述inode鏈存儲記錄所述更新操作的inode。
在一些實施例中,在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作,并且將所述更新操作同步記錄到所述目標端包括:響應(yīng)于針對所述數(shù)據(jù)或者所述寫入的新數(shù)據(jù)的讀取操作,從所述源端返回所述數(shù)據(jù)或者所記錄的新數(shù)據(jù)。
在一些實施例中,啟動所述數(shù)據(jù)向軟切換的目標端的復(fù)制進程包括:根據(jù)所述復(fù)制進程的配置來確定軟切換的目標端,并且配置所確定的目標端的存儲空間以用于所述復(fù)制進程。
在一些實施例中,啟動所述數(shù)據(jù)向軟切換的目標端的復(fù)制進程包括:選擇所述源端與所述目標端之間的內(nèi)部連接,并且在所選擇的內(nèi)部連接上建立會話以作為用于所述復(fù)制進程的通信管道。
在一些實施例中,在所述目標端利用所述同步記錄的更新操作來更新所復(fù)制的數(shù)據(jù)包括:將所記錄的更新操作作為所復(fù)制的數(shù)據(jù)的最新快照。
在一些實施例中,禁用對所述源端的數(shù)據(jù)訪問并且啟用對所述目標端的數(shù)據(jù)訪問包括:斷開與所述源端的數(shù)據(jù)連接并且建立與所述目標端的數(shù)據(jù)連接。
根據(jù)本公開的實施例的第二方面,提供了一種用于存儲系統(tǒng)中的軟切換的裝置。該裝置包括:復(fù)制單元,被配置為響應(yīng)于軟切換請求,將軟切換的源端的數(shù)據(jù)設(shè)置為只讀并且啟動所述數(shù)據(jù)向軟切換的目標端的復(fù)制進程;記錄單元,被配置為在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作,并且將所述更新操作同步記錄到所述目標端;更新單元,被配置為響應(yīng)于所述復(fù)制進程的完成,在所述目標端利用所述同步記錄的更新操作來更新所復(fù)制的數(shù)據(jù);以及切換單元,被配置為禁用對所述源端的數(shù)據(jù)訪問并且啟用對所述目標端的數(shù)據(jù)訪問。
根據(jù)本公開的實施例的第三方面,提供了一種包括程序代碼的計算機程序產(chǎn)品。所述程序代碼在處理器上被執(zhí)行時,可以促使所述處理器執(zhí)行根據(jù)本公開的實施例的第一方面的方法。
根據(jù)本公開的實施例的第四方面,提供了一種存儲系統(tǒng)。該存儲系統(tǒng)可以包括根據(jù)本公開的實施例的第二方面的裝置。
附圖說明
通過參考附圖閱讀下文的詳細描述,本公開的實施例的上述以及其他目的、特征和優(yōu)點將變得容易理解。在附圖中,以示例性而非限制性的方式示出了本公開的若干實施例,其中:
圖1示意性地示出了從源端到目標端的現(xiàn)有切換架構(gòu)圖;
圖2示意性地示出了根據(jù)本公開的一個實施例的用于存儲系統(tǒng)中的軟切換的方法;
圖3示意性地示出了根據(jù)本公開的一個實施例的用于源端緩存和目標端緩存的示例性數(shù)據(jù)結(jié)構(gòu);
圖4示意性地示出了根據(jù)本公開的一個實施例的用于存儲系統(tǒng)中的軟切換的裝置;
圖5示意性地示出了根據(jù)本公開的一個實施例的軟切換的拓撲結(jié)構(gòu);
圖6示意性地示出了根據(jù)本公開的一個實施例的軟切換代理模塊的示例性結(jié)構(gòu)圖;
圖7示意性地示出了根據(jù)本發(fā)明的一個實施例的軟切換的示例性進程;
圖8示意性地示出了可以用來實現(xiàn)本公開的實施例的示例性計算機系統(tǒng)/服務(wù)器的框圖。
具體實施方式
下面將參考附圖中所示出的若干示例性實施例來描述本公開的原理和精神。應(yīng)當理解,描述這些具體的實施例僅是為了使本領(lǐng)域 的技術(shù)人員能夠更好地理解并實現(xiàn)本公開,而并非以任何方式限制本公開的范圍。
圖1示意性地示出了從源端到目標端的現(xiàn)有切換架構(gòu)圖。如圖1中所示出的,在源端處,用戶可以使用圖形界面GUI或者命令行界面CLI通過CIC、HTTP、或TCP等協(xié)議經(jīng)由存儲處理器SP來與操作系統(tǒng)中的數(shù)據(jù)處理DP管理器進行交互??商鎿Q地,用戶也可以使用命令行界面CLI通過NBS或TCP協(xié)議來直接與DP管理器交互。在目標端處,用戶可以使用GUI或者CLI經(jīng)由存儲處理器SP來與操作系統(tǒng)中的數(shù)據(jù)處理DP管理器進行交互。在源端處并且在目標端處,DP管理器可以與數(shù)據(jù)控制模塊和復(fù)制引擎進行交互。
在復(fù)制進程中,源端的數(shù)據(jù)控制模塊可以通過文件系統(tǒng)和iSCSI LUN取出要進行軟切換的數(shù)據(jù)并且傳送給源端的復(fù)制引擎。源端的復(fù)制引擎可以通過RCP、TCP IP等協(xié)議將該數(shù)據(jù)傳送給目標端引擎。目標端引擎可以再將數(shù)據(jù)傳送給目標端的數(shù)據(jù)控制模塊,目標端的數(shù)據(jù)控制模塊進而可以通過文件系統(tǒng)和iSCSI LUN將數(shù)據(jù)存儲到目標端的存儲空間。在復(fù)制進程期間,源端的數(shù)據(jù)處理管理器可以通過CIC、HTTP、TCP等協(xié)議來與目標端的數(shù)據(jù)處理管理器進行必要的通信。
一般而言,軟切換的基本過程可以包括以下的步驟。首先,存儲管理員可以選擇要進行軟切換的源端數(shù)據(jù),系統(tǒng)可以執(zhí)行一系列的內(nèi)部同步,直到源端的存儲資源未完成的復(fù)制少于100MB。第二,系統(tǒng)可以禁用對源端的數(shù)據(jù)的主機訪問,對于文件存儲資源而言,系統(tǒng)將源端數(shù)據(jù)設(shè)置為只讀并且使得共享的文件夾服務(wù)器不激活。第三,系統(tǒng)可以執(zhí)行到目標端的最終同步。第四,系統(tǒng)可以進行驗證過程,包括驗證源端處于只讀狀態(tài)、目標端處于讀寫狀態(tài)、以及沒有數(shù)據(jù)丟失。第五,系統(tǒng)可以逆轉(zhuǎn)復(fù)制會話。最后,系統(tǒng)可以啟用對目標端的數(shù)據(jù)的主機訪問,即對于文件存儲資源而言,系統(tǒng)將存儲資源設(shè)置為讀寫并且使得共享的文件夾服務(wù)器激活。
如上文所討論的,在復(fù)制進程中,從禁用主機數(shù)據(jù)訪問的步驟 開始到啟用主機數(shù)據(jù)訪問的步驟結(jié)束,系統(tǒng)將會禁止對數(shù)據(jù)的輸入/輸出(I/O)操作。當用戶從系統(tǒng)得到快速和及時的反饋時,系統(tǒng)才被認為是有響應(yīng)的。因此,通常應(yīng)當在3秒內(nèi)向用戶命令提供反饋,但是現(xiàn)有的復(fù)制同步操作要求比3秒長得多的時間。當網(wǎng)絡(luò)狀況不佳時,將會花費更多的時間。為此,期望在存儲陣列上的周轉(zhuǎn)時間非常短。
本公開的實施例可以在源端離線或者被設(shè)置為只讀之后并且目標端還沒有就緒時處理用戶對源端數(shù)據(jù)的訪問操作,幫助確保軟切換完成而無需中止或者中斷對數(shù)據(jù)的輸入/輸出操作,從而解決現(xiàn)有技術(shù)中的上述以及其他的問題。
圖2示意性地示出了根據(jù)本公開的一個實施例的用于存儲系統(tǒng)中的軟切換的方法200。
如圖2中所示出的,方法200在開始之后可以進入步驟201。在步驟201中,響應(yīng)于軟切換請求,將軟切換的源端的數(shù)據(jù)設(shè)置為只讀并且啟動所述數(shù)據(jù)向軟切換的目標端的復(fù)制進程。本領(lǐng)域的技術(shù)人員可以理解,軟切換可以由于各種原因由各種相關(guān)的實體發(fā)起,諸如由于定期的冗余備份、存儲管理員臨時觸發(fā)等等,本公開對此不進行限制。存儲系統(tǒng)中的任何軟切換都可以應(yīng)用本公開內(nèi)容的實施例所提供的方法200。
本領(lǐng)域的技術(shù)人員還可以理解,在進行步驟201的過程中,特別是在啟動所述數(shù)據(jù)向軟切換的目標端的復(fù)制進程之前,系統(tǒng)可能還需要進行與軟切換相關(guān)聯(lián)的復(fù)制準備工作,諸如內(nèi)部同步、獲取復(fù)制進程的參數(shù)、狀態(tài)驗證等。由于這些過程由本領(lǐng)域的技術(shù)人員所熟知,本公開對此不再贅述。
在一個實施例中,方法200還可以包括:根據(jù)所述復(fù)制進程的配置來確定軟切換的目標端,并且配置所確定的目標端的存儲空間以用于所述復(fù)制進程。在存儲系統(tǒng)中,在準備進行軟切換時,可能存在多個可用的候選目標端。因此,方法200可以根據(jù)復(fù)制進程的相關(guān)配置來最終確定進行軟切換的目標端。在一個實施例中,方法 200還可以包括:選擇所述源端與所述目標端之間的內(nèi)部連接,并且在所選擇的內(nèi)部連接上建立會話以作為用于所述復(fù)制進程的通信管道。在存儲系統(tǒng)中,在確定了進行軟切換的目標端之后,在源端與目標端之間可能存在多個可用的候選內(nèi)部連接。因此,方法200可以在這些可用的候選內(nèi)部連接中選擇出一個或者多個內(nèi)部連接來進行軟切換。進一步地,方法200可以在所選擇的內(nèi)部連接上建立連接會話,作為用于所述復(fù)制進程和/或其他數(shù)據(jù)同步的通信管道。
接著,方法200可以前進至步驟202。在步驟202中,在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作,并且將所述更新操作同步記錄到所述目標端。在源端的數(shù)據(jù)被設(shè)置為只讀之后,在復(fù)制進程完成之前,系統(tǒng)可能還會接收到來自用戶的對這些被設(shè)置為只讀的數(shù)據(jù)的更新操作,諸如對這些數(shù)據(jù)進行修改等。根據(jù)本公開的一個實施例,為了這些更新操作能夠在被復(fù)制到目標端的數(shù)據(jù)上得以體現(xiàn),方法200在源端對這些更新操作進行記錄,并且同步記錄到目標端,以便于在復(fù)制進程完成之后在目標端根據(jù)這些更新操作對所復(fù)制的數(shù)據(jù)進行更新。如此,在復(fù)制進程期間,用戶對數(shù)據(jù)的更新操作不會被中斷,因此沒有受到軟切換的影響,從而相比于現(xiàn)有的方法而言改進了用戶體驗。
在一個實施例中,方法200還可以包括:在所述源端還記錄在所述復(fù)制進程期間寫入的新數(shù)據(jù),并且將所述寫入的新數(shù)據(jù)同步記錄到所述目標端。如上所述,在方法200中,針對源端已經(jīng)被設(shè)置為只讀的原有數(shù)據(jù)的更新操作可以被記錄。除此以外,方法200還可以記錄用戶在復(fù)制進程期間寫入的新數(shù)據(jù),并且將寫入的新數(shù)據(jù)同步記錄到目標端。如此,在軟切換完成之后,用戶在這個復(fù)制進程期間寫入的新數(shù)據(jù)也會體現(xiàn)在目標端。因此,在復(fù)制過程期間,從用戶的視角來看,用戶不僅可以對原有數(shù)據(jù)進行更新操作,還可以寫入新的數(shù)據(jù),進一步改進了用戶體驗。
在一個實施例中,方法200還可以包括:在源端創(chuàng)建源端緩存并且在目標端創(chuàng)建目標端緩存,以用于在源端記錄在復(fù)制進程期間 針對數(shù)據(jù)的更新操作和寫入的新數(shù)據(jù)并且同步記錄到目標端。根據(jù)本公開的一個實施例,在源端對于上述更新操作以及寫入的新數(shù)據(jù)的記錄工作可以通過源端緩存來完成,而在目標端對于上述更新操作以及寫入的新數(shù)據(jù)的同步記錄工作可以通過目標端緩存來完成。因此,在進行上述記錄和同步記錄工作之前,方法200分別在源端和目標端創(chuàng)建源端緩存和目標端緩存,以用于在源端處記錄在復(fù)制進程期間針對原有數(shù)據(jù)的更新操作和寫入的新數(shù)據(jù)并且同步記錄到目標端。
在一個實施例中,源端緩存和目標端緩存在邏輯上可以通過互為鏡像的數(shù)據(jù)結(jié)構(gòu)來表示。在一個實施例中,該數(shù)據(jù)結(jié)構(gòu)可以包括頭部和主體,頭部可以包括緩存指針和inode鏈,主體至少可以包括寫入的新數(shù)據(jù)。在一個實施例中,緩存指針可以至少存儲inode鏈的入口地址,并且inode鏈存可以儲記錄更新操作的inode。
圖3示意性地示出了根據(jù)本公開的一個實施例的用于源端緩存和目標端緩存的示例性數(shù)據(jù)結(jié)構(gòu)300。
如上面所描述的,源端緩存和目標端緩存可以是存在于源端和目標端作為鏡像的一種數(shù)據(jù)存儲區(qū)域,在邏輯上可以通過數(shù)據(jù)結(jié)構(gòu)300來表示。它們可以用于記錄在源端的對數(shù)據(jù)的連續(xù)輸入/輸出I/O操作,并且將任何更新同步地鏡像到遠程的目標端。
如圖3所示出的,示例性數(shù)據(jù)結(jié)構(gòu)300可以包括頭部310和主體320。頭部301可以包括緩存指針311和inode鏈312。主體320可以包括源端基于ROFW(首寫時重定向)技術(shù)所更新的數(shù)據(jù)(可以包括寫入的新數(shù)據(jù))以及必要的數(shù)據(jù)結(jié)構(gòu)。
緩存指針311可以存儲用于被更新的數(shù)據(jù)塊的inode鏈312的入口地址,并且還可以包括指向源端數(shù)據(jù)的指針。在一個實施例中,除了系統(tǒng)預(yù)留的存儲格(Cell)之外,緩存指針311可以起始于每個源端緩存或目標端緩存的第一個可用的存儲格,緩存指針311的具體大小可以根據(jù)具體的存儲環(huán)境和實際的需求進行確定。具體而言,緩存指針311可以由2N個存儲格構(gòu)成,存儲格是操作系統(tǒng)訪問源端 緩存或者目標端緩存的最小單元,即塊存儲(block device)中的一個塊(block)空間或者文件存儲(file device)中的一個頁面(page)空間。比如,Linux訪問文件存儲的最小單元是4KB(即一個page),那么Cell大小就是4KB。也就是說,緩存指針311的大?。?N個Cell(N=0,1,2,…,并且N基于實施方式的要求),而Cell在塊存儲中是指1個block,在文件存儲中是指一個page。
inode鏈312可以存儲一系列的inode,這些inode可以使得用于源端緩存與原數(shù)據(jù)之間基于ROFW技術(shù)的更新的指針重定向。inode鏈312可以與高級快照功能使用相同的邏輯。
返回到參考圖2,在一個實施例中,方法200還可以包括:響應(yīng)于針對所述數(shù)據(jù)或者所述新數(shù)據(jù)的讀取操作,從源端返回所述數(shù)據(jù)或者所記錄的新數(shù)據(jù)。具體而言,在復(fù)制進程期間,用戶可能還需要對正在進行復(fù)制的原有數(shù)據(jù)和在復(fù)制進程期間所寫入的新數(shù)據(jù)進行讀取的操作。由于原數(shù)據(jù)在復(fù)制期間仍然是可讀的,并且用戶所寫入的新數(shù)據(jù)也已經(jīng)被記錄。因此,方法200可以根據(jù)相應(yīng)的讀取操作來返回用戶所要讀取的數(shù)據(jù)。如此,在復(fù)制進程期間,用戶不僅可以進行對原有數(shù)據(jù)的更新操作和寫入新的數(shù)據(jù),還可以實現(xiàn)對原有數(shù)據(jù)以及所寫入的新數(shù)據(jù)的讀取操作。
繼續(xù)參考圖2,在步驟202之后,方法200可以前進至步驟203。在步驟203中,響應(yīng)于所述復(fù)制進程的完成,在所述目標端利用同步記錄的更新操作來更新所復(fù)制的數(shù)據(jù)。在復(fù)制進程完成之后,由于用戶在復(fù)制進程期間可能對所復(fù)制的數(shù)據(jù)進行了更新操作,為了將這些更新操作體現(xiàn)在目標端所復(fù)制的數(shù)據(jù)上,方法200可以利用目標端同步記錄的更新操作來更新所復(fù)制的數(shù)據(jù)。如此,在進行軟切換之后,用戶可以無縫地在原有更新操作的基礎(chǔ)上繼續(xù)對這些數(shù)據(jù)進行后續(xù)的讀寫操作。
在一個實施例中,方法200還可以包括:將所記錄的更新操作作為所復(fù)制的數(shù)據(jù)的最新快照。在這個方面,更新操作可以基于快照技術(shù)來進行。方法200可以采用快照技術(shù)來記錄這些更新操作, 從而在復(fù)制進程完成時,所記錄的更新操作就是所復(fù)制的數(shù)據(jù)的最新快照。在目標端處,方法200將同步記錄的所復(fù)制的數(shù)據(jù)的最新快照與所復(fù)制的數(shù)據(jù)進行關(guān)聯(lián),即實現(xiàn)了對所復(fù)制數(shù)據(jù)的更新操作。
接著,方法200可以前進至步驟204。在步驟204中,禁用對所述源端的數(shù)據(jù)訪問并且啟用對所述目標端的數(shù)據(jù)訪問。在一個實施例中,方法200還可以包括:斷開與所述源端的數(shù)據(jù)連接并且建立與所述目標端的數(shù)據(jù)連接,從而實現(xiàn)了禁用對所述源端的數(shù)據(jù)訪問并且啟用對所述目標端的數(shù)據(jù)訪問。
在步驟204之后,方法200可以結(jié)束。
圖4示意性地示出了根據(jù)本公開的一個實施例的用于存儲系統(tǒng)中的軟切換的裝置400。
如圖4中所示出的,裝置400可以包括:復(fù)制單元401、記錄單元402、更新單元403、以及切換單元404。根據(jù)本公開內(nèi)容的實施例,復(fù)制單元401可以被配置為響應(yīng)于軟切換請求,將軟切換的源端的數(shù)據(jù)設(shè)置為只讀并且啟動所述數(shù)據(jù)向軟切換的目標端的復(fù)制進程。記錄單元402可以被配置為在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作,并且將所述更新操作同步記錄到所述目標端。更新單元403可以被配置為響應(yīng)于所述復(fù)制進程的完成,在所述目標端利用所述同步記錄的更新操作來更新所復(fù)制的數(shù)據(jù)。切換單元404可以被配置為禁用對所述源端的數(shù)據(jù)訪問并且啟用對所述目標端的數(shù)據(jù)訪問。
在一個實施例中,記錄單元402可以進一步被配置為:在所述源端還記錄在所述復(fù)制進程期間寫入的新數(shù)據(jù),并且將所述寫入的新數(shù)據(jù)同步記錄到所述目標端。在一個實施例中,記錄單元402可以進一步被配置為:在所述源端創(chuàng)建源端緩存并且在所述目標端創(chuàng)建目標端緩存,以用于在所述源端記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作和寫入的新數(shù)據(jù)并且同步記錄到所述目標端。在一個實施例中,記錄單元402可以進一步被配置為:通過所述源端緩存來記錄在所述復(fù)制進程期間針對所述數(shù)據(jù)的更新操作和寫入的 新數(shù)據(jù),并且同步記錄到所述目標端緩存。
在一個實施例中,源端緩存和所述目標端緩存在邏輯上通過互為鏡像的數(shù)據(jù)結(jié)構(gòu)來表示。在一個實施例中,數(shù)據(jù)結(jié)構(gòu)包括頭部和主體,所述頭部包括緩存指針和inode鏈,所述主體至少包括所述寫入的新數(shù)據(jù)。在一個實施例中,緩存指針至少存儲所述inode鏈的入口地址,并且所述inode鏈存儲記錄所述更新操作的inode。
在一個實施例中,記錄單元402可以進一步被配置為:響應(yīng)于針對所述數(shù)據(jù)或者所述寫入的新數(shù)據(jù)的讀取操作,從所述源端返回所述數(shù)據(jù)或者所記錄的新數(shù)據(jù)。
在一個實施例中,復(fù)制單元401可以進一步被配置為:根據(jù)所述復(fù)制進程的配置來確定軟切換的目標端,并且配置所確定的目標端的存儲空間以用于所述復(fù)制進程。在一個實施例中,復(fù)制單元401可以進一步被配置為:選擇所述源端與所述目標端之間的內(nèi)部連接,并且在所選擇的內(nèi)部連接上建立會話以作為用于所述復(fù)制進程的通信管道。
在一個實施例中,更新單元403可以進一步被配置為:將所記錄的更新操作作為所復(fù)制的數(shù)據(jù)的最新快照。在一個實施例中,切換單元404可以進一步被配置為:斷開與所述源端的數(shù)據(jù)連接并且建立與所述目標端的數(shù)據(jù)連接。
在下文中,參考圖5-7,通過僅為示例的方式,將描述本公開的一種具體實施方式。本領(lǐng)域的技術(shù)人員將會理解,本公開的并不限于該具體實施方式中的具體細節(jié),而是也可以采用不同于該具體實施方式的細節(jié)來實施。
圖5示意性地示出了根據(jù)本公開的一個實施例的軟切換的拓撲結(jié)構(gòu)500。在圖5中所示出的軟切換的示例性拓撲結(jié)構(gòu)500中,在遠端和目標端分別形成了根據(jù)本公開的一個實施例的思想的軟切換代理模塊504和512,以用于實施根據(jù)本公開內(nèi)容的用于存儲系統(tǒng)中的軟切換的方法。
在圖5中所示出的示例性拓撲結(jié)構(gòu)500中,源端的軟切換代理 504可以放置在源端的數(shù)據(jù)路徑管理器503與源端的復(fù)制引擎506之間。相應(yīng)地,目標端的軟切換代理512可以放置在目標端的數(shù)據(jù)路徑管理器511與目標端的復(fù)制引擎514之間。系統(tǒng)中原有的模塊使用虛線框來表示,而根據(jù)本公開的實施例新加入的模塊,即源端軟切換代理模塊504和目標端軟切換代理模塊512以及源端緩存模塊508和目標端緩存模塊516,使用實線框來表示。各模塊之間的交互過程在圖5中可以使用箭頭來表示,在軟切換過程中已有的交互步驟由于對本領(lǐng)域的技術(shù)人員而言是熟知的,所以此處不再對這些交互操作進行贅述。
根據(jù)本公開的一個實施例,當軟切換被調(diào)用時,源端的軟切換代理504可以首先接收用戶對源端數(shù)據(jù)輸入/輸出I/O操作。隨后,源端緩存508和目標端緩存516可以被創(chuàng)建用于針對源端數(shù)據(jù)的連續(xù)的同步寫入。然后,這兩個緩存508和516可以接收來自源端的軟切換代理模塊504的對源端數(shù)據(jù)的同步輸入/輸出I/O操作,直到復(fù)制完成并且目標端的服務(wù)就緒。最后,在目標端數(shù)據(jù)路徑建立之前,目標端的軟切換代理模塊512中對所復(fù)制的數(shù)據(jù)進行更新的模塊可以將目標端緩存516作為目標端數(shù)據(jù)的最新快照。
圖6示意性地示出了根據(jù)本公開的一個實施例的軟切換代理模塊600的示例性結(jié)構(gòu)圖。如圖6中所示出的,軟切換代理模塊600可以包括映射管理模塊610、連接管理模塊620、以及數(shù)據(jù)傳送模塊630。
映射管理模塊610可以保持源端與目標端之間的映射信息,它可以搜索目標端并且在數(shù)據(jù)傳送之前建立源端與目標端之間的映射關(guān)系。如圖6中所示出的,映射管理模塊610可以包括目標端發(fā)現(xiàn)模塊611和目標端選擇模塊612。目標端發(fā)現(xiàn)模塊611可以用于根據(jù)當前的復(fù)制進程配置來發(fā)現(xiàn)并確定目標端。目標端選擇模塊612可以在確定目標端之后對目標端的存儲空間進行配置。
連接管理模塊620可以用于建立源端與目標端之間的內(nèi)部連接。如圖6中所示出的,連接管理模塊620可以包括連接選擇模塊621 和連接管道模塊622。連接選擇模塊621可以用于選擇源端與目標端之間的內(nèi)部連接并且完成為了在它們之間建立會話的準備工作。連接管道模塊622可以用于在源端與目標端之間建立連接會話,該連接會話是源端與目標端之間的通信管道,該通信管道可以用于服務(wù)傳送和數(shù)據(jù)同步。
數(shù)據(jù)傳送模塊630可以用于同步地將數(shù)據(jù)傳送給源端緩存和目標端緩存。如圖6中所示出的,數(shù)據(jù)傳送模塊630可以包括數(shù)據(jù)處置器631和緩存切換器632。數(shù)據(jù)處置器631可以用于處置所請求的輸入/輸出I/O操作,并且根據(jù)復(fù)制會話的狀態(tài)返回來自源端或者目標端的數(shù)據(jù)。緩存切換器632可以用于將目標端緩存切換作為目標端資源的最新快照。
圖7示意性地示出了根據(jù)本發(fā)明的一個實施例的軟切換的示例性進程700。應(yīng)當注意,進程700僅是本公開的一個實施例的一個示例性進程,本領(lǐng)域的技術(shù)人員可以根據(jù)具體的技術(shù)環(huán)境和技術(shù)要求以除了進程700之外的其他適當?shù)姆绞絹韺嵤└鶕?jù)本公開的實施例的方法。
如圖7中所示出的,進程700包括步驟a-k。在步驟a中,軟切換代理模塊可以選擇復(fù)制進程的目標端。在步驟b中,軟切換代理可以接收來自源端的軟切換請求,包括與要進行的軟切換相關(guān)聯(lián)的參數(shù)等等。在步驟c中,軟切換代理模塊可以分別在源端和目標端創(chuàng)建源端緩存和目標端緩存以用于針對源端的連續(xù)的同步寫入。在步驟d中,源端可以將數(shù)據(jù)(包括文件系統(tǒng)或者LUN)設(shè)置為只讀并且使主機的數(shù)據(jù)訪問脫離。在步驟e中,如果需要的話,源端可以在復(fù)制進程開始之前進行必要的同步數(shù)據(jù)操作。在步驟f中,系統(tǒng)可以執(zhí)行到目標端的復(fù)制進程,同時源端緩存和目標端緩存從軟切換代理接收記錄了更新操作的同步的inode和數(shù)據(jù)輸出/輸出I/O操作,直到復(fù)制完成并且目標端的服務(wù)準備就緒。在步驟g中,系統(tǒng)可以從目標端所復(fù)制的數(shù)據(jù)和目標端緩存中準備最新的數(shù)據(jù)。在步驟h中,目標端緩存切換器可以將目標端緩存作為目標端數(shù)據(jù)的最 新快照。在步驟i中,軟切換代理可以解除激活。在步驟j中,目標端可以建立數(shù)據(jù)路徑。在步驟k中,目標端可以返回軟切換請求。
圖8示意性地示出了可以用來實現(xiàn)本公開的實施例的示例性計算機系統(tǒng)/服務(wù)器812的框圖。應(yīng)當注意,圖8中所示出的計算機系統(tǒng)/服務(wù)器812僅是一種示例,不對本公開實施方式的功能和使用范圍進行任何限制。
如圖8中所示出的,計算機系統(tǒng)/服務(wù)器812以通用計算設(shè)備的形式表現(xiàn)。計算機系統(tǒng)/服務(wù)器812的組件可以包括但不限于:一個或者多個處理器或者處理單元816,系統(tǒng)存儲器828,連接不同系統(tǒng)組件(包括系統(tǒng)存儲器828和處理單元816)的總線818。
總線818表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來說,這些體系結(jié)構(gòu)包括但不限于工業(yè)標準體系結(jié)構(gòu)(ISA)總線,微通道體系結(jié)構(gòu)(MAC)總線,增強型ISA總線、視頻電子標準協(xié)會(VESA)局域總線以及外圍組件互連(PCI)總線。
計算機系統(tǒng)/服務(wù)器812典型地包括多種計算機系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被計算機系統(tǒng)/服務(wù)器812訪問的可用介質(zhì),包括易失性和非易失性介質(zhì),可移除的和不可移除的介質(zhì)。
系統(tǒng)存儲器828可以包括易失性存儲器形式的計算機系統(tǒng)可讀介質(zhì),例如存儲器830和/或緩存器832。計算機系統(tǒng)/服務(wù)器812可以進一步包括其他可移除/不可移除的、易失性/非易失性計算機系統(tǒng)存儲介質(zhì)。盡管圖8中未示出,可以提供用于對可移除非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動器,以及對可移除非易失性光盤(例如CD-ROM、DVD-ROM或者其他光介質(zhì))讀寫的光盤驅(qū)動器。在這些情況下,每個驅(qū)動器可以通過一個或者多個數(shù)據(jù)介質(zhì)接口與總線818相連。存儲器828可以包括至少一個程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執(zhí)行本公開各實施方式的功能。
具有至少一個程序模塊842的程序/實用工具840,可以存儲在例如存儲器828中,這樣的程序模塊842包括但不限于:操作系統(tǒng)、一個或者多個應(yīng)用程序、其他程序模塊以及程序數(shù)據(jù),這些示例中的每一個或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實現(xiàn)。程序模塊842通常執(zhí)行本公開所描述的實施方式中的功能和/或方法。
根據(jù)需要,計算機系統(tǒng)/服務(wù)器812也可以與一個或多個外部設(shè)備(例如顯示設(shè)備824、存儲設(shè)備814等)通信,還可與一個或者多個使得用戶能與該計算機系統(tǒng)/服務(wù)器812交互的設(shè)備通信,和/或與使得該計算機系統(tǒng)/服務(wù)器812能與一個或多個其他計算設(shè)備進行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(I/O)接口822進行。并且,計算機系統(tǒng)/服務(wù)器812還可以通過網(wǎng)絡(luò)適配器820與一個或者多個網(wǎng)絡(luò)(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器820通過總線818與計算機系統(tǒng)/服務(wù)器812的其他模塊通信。應(yīng)當明白,盡管圖中未示出,可以結(jié)合計算機系統(tǒng)/服務(wù)器812使用其他硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動器、冗余處理單元、外部磁盤驅(qū)動陣列、RAID系統(tǒng)、磁帶驅(qū)動器以及數(shù)據(jù)備份存儲系統(tǒng)等。
在對本公開的實施例的描述中,術(shù)語“包括”及其類似用語應(yīng)當理解為開放性包含,即“包括但不限于”。術(shù)語“基于”應(yīng)當理解為“至少部分地基于”。術(shù)語“一個實施例”或“該實施例”應(yīng)當理解為“至少一個實施例”。
應(yīng)當注意,本公開的實施例可以通過硬件、軟件或者軟件和硬件的結(jié)合來實現(xiàn)。硬件部分可以利用專用邏輯來實現(xiàn);軟件部分可以存儲在存儲器中,由適當?shù)闹噶顖?zhí)行系統(tǒng),例如微處理器或者專用設(shè)計硬件來執(zhí)行。本領(lǐng)域的技術(shù)人員可以理解上述的設(shè)備和方法可以使用計算機可執(zhí)行指令和/或包含在處理器控制代碼中來實現(xiàn),例如在可編程的存儲器或者諸如光學或電子信號載體的數(shù)據(jù)載體上提供了這樣的代碼。
此外,盡管在附圖中以特定順序描述了本公開方法的操作,但是,這并非要求或者暗示必須按照該特定順序來執(zhí)行這些操作,或是必須執(zhí)行全部所示的操作才能實現(xiàn)期望的結(jié)果。相反,流程圖中描繪的步驟可以改變執(zhí)行順序。附加地或備選地,可以省略某些步驟,將多個步驟組合為一個步驟執(zhí)行,和/或?qū)⒁粋€步驟分解為多個步驟執(zhí)行。還應(yīng)當注意,根據(jù)本公開的兩個或更多裝置的特征和功能可以在一個裝置中具體化。反之,上文描述的一個裝置的特征和功能可以進一步劃分為由多個裝置來具體化。
雖然已經(jīng)參考若干具體實施例描述了本公開,但是應(yīng)當理解,本公開不限于所公開的具體實施例。本公開旨在涵蓋所附權(quán)利要求的精神和范圍內(nèi)所包括的各種修改和等效布置。