本發(fā)明涉及云計算存儲技術領域,特別涉及一種優(yōu)化的基于LVM的遠程復制方法。
背景技術:
LVM(Logical Volume Manager,邏輯卷管理)是linux系統(tǒng)中一種動態(tài)管理存儲設備的管理機制,它通過將底層物理設備抽象封裝,向上層提供與普通塊存儲相同的連續(xù)存儲空間。LVM提供了完備的用戶態(tài)及內核態(tài)管理機制,同時LVM技術中提供的動態(tài)數(shù)據(jù)遷移、mirror、snapshot等特性,可以為數(shù)據(jù)復制系統(tǒng)提供完整的框架。
NBD(Network Block Device,網(wǎng)絡塊設備)通過提供client和server服務,將遠程主機提供的磁盤空間在本地當作塊設備使用。NBD是一個內核模塊,它通過定義在內核接口,可以和linux系統(tǒng)中其他塊設備管理器(如LVM)無縫對接。
遠程復制技術就是將源設備端的數(shù)據(jù),通過遠程連接復制到一個或多個目標設備端技術。該技術常用于容災系統(tǒng)中,它通過利用地理上的分散性,當一個地區(qū)的數(shù)據(jù)丟失后,可以通過遠端的數(shù)據(jù)快速恢復。
基于上述情況,本發(fā)明提出了一種優(yōu)化的基于LVM的遠程復制方法。
技術實現(xiàn)要素:
本發(fā)明為了彌補現(xiàn)有技術的缺陷,提供了一種簡單高效的優(yōu)化的基于LVM的遠程復制方法。
本發(fā)明是通過如下技術方案實現(xiàn)的:
一種優(yōu)化的基于LVM的遠程復制方法,其特征在于:基于LVM遠程復制架構包括LVM I/O Analysis模塊,LVM I/O Process模塊和LVM Remote Replication模塊三部分;所述LVM I/O Analysis模塊對上層應用的I/O請求解析進行優(yōu)化,對于讀請求直接訪問本地數(shù)據(jù),對于寫請求則發(fā)送到本地及遠程設備處理模塊;所述LVM I/O Process模塊對LVM中的Mirror接口進行優(yōu)化,更改寫請求的I/O處理流程,通過先記錄日志再更新數(shù)據(jù)的方法,將數(shù)據(jù)分別發(fā)送到本地及遠程設備;所述LVM Remote Replication模塊對NBD模塊進行更改,使之與LVM的內核結構對接,實現(xiàn)數(shù)據(jù)的遠程發(fā)送;同時,由于NBD報文是經(jīng)由TCP/IP傳輸?shù)?,所述LVM Remote Replication模塊還對TCP/IP網(wǎng)絡的參數(shù)也進行了優(yōu)化,調整TCP/IP網(wǎng)絡中的tcp_sack,tcp_timestamps,tcp_low_latency,tcp_westwood和tcp_bic參數(shù),使之更有效到適用于遠程復制場景。
所述LVM I/O Analysis模塊負責對上層應用發(fā)起的I/O請求過濾,通過改變lvm_make_request_fn()函數(shù)對I/O請求進行分類,讀請求或與復制無關的請求直接交由LVM自身機制從盤中讀取,寫請求則調用LVM I/O Process模塊的接口進行處理;所述LVM I/O Process模塊負責構建I/O的流程,同時與Remote Replication模塊對接;所述LVM Remote Replication模塊負責遠程復制的數(shù)據(jù)一致性定義及數(shù)據(jù)的遠程傳輸;將I/O請求在主端經(jīng)由LVM Remote Replication模塊處理后,發(fā)送到遠程設備端并成功提交日志寫到數(shù)據(jù)盤后,更新本地的日志信息并提交給LVM I/O Process模塊;當LVM I/O Process模塊中的mirror收到本地及遠程的返回消息后,向應用層返回寫成功。
所述LVM I/O Process模塊對寫請求的I/O處理流程,首先將I/O請求記錄到日志信息中,然后將BIOS復制兩份,一份發(fā)送到本地的數(shù)據(jù)盤,另一份發(fā)送到請求隊列中,最后調用Remote Replication模塊接口,利用多線程處理將數(shù)據(jù)發(fā)送到對端;當接收到本地及遠程設備兩個請求完成后,向上層應用返回請求處理成功。
所述LVM Remote Replication模塊對遠程復制的數(shù)據(jù)一致性定義是指采用實時同步的方式,即上層應用發(fā)出的多個寫請求必須等待主端和備端的數(shù)據(jù)同時寫入方可繼續(xù)執(zhí)行;當請求到來時,先按照請求順序提交日志,寫日志成功后再寫數(shù)據(jù)盤,寫數(shù)據(jù)盤時,按照順序依次寫盤,只有寫日志及寫數(shù)據(jù)盤同時成功提交后,才按照請求提交順序更新日志信息,最后通知上層請求完成;
所述LVM Remote Replication模塊對數(shù)據(jù)的遠程傳輸是基于NBD模塊完成的,首先對主端和備端通過nbd_init函數(shù)初始化并連接,然后利用do_nbd_request函數(shù)從請求隊列中讀取相應的請求,使用報文結構中的handle域裝載發(fā)送到備端;調用nbd_do_it循環(huán)等待并調用nbd_read_stat讀取備端的寫盤狀態(tài);當讀寫請求完成后,則從請求隊列中刪除請求并向上層返回成功。
所述LVM Remote Replication模塊對TCP/IP網(wǎng)絡的參數(shù)的優(yōu)化包括利用tcp_sack參數(shù)啟用有選擇應答模式,提升亂序報文的回復,只發(fā)送丟失的報文;利用tcp_timestamps參數(shù)啟用TCP時間戳,更精確控制報文重發(fā);關閉tcp_low_latency參數(shù)和選用tcp_westwood參數(shù)通過吞吐量評估對帶寬的整體利用情況進行優(yōu)化;為了快速長距離的傳輸啟用tcp_bic參數(shù)的Binary Increase Congestion,更好利用傳輸網(wǎng)絡的GB級速度。
本發(fā)明的有益效果是:該優(yōu)化的基于LVM的遠程復制方法,可以用于云計算領域的遠距離容災系統(tǒng)中,不需要特殊的物理環(huán)境,只需對原有的IP網(wǎng)絡作相應的改進,以完全軟件的方法將數(shù)據(jù)遠程復制到另一個遠端設備,提升了數(shù)據(jù)在遠程復制中的穩(wěn)定性、安全性及傳輸效率。
附圖說明
附圖1為本發(fā)明基于LVM遠程復制架構結構示意圖。
附圖2為本發(fā)明LVM I/O Process模塊處理流程示意圖。
附圖3為本發(fā)明LVM Remote Replication模塊IO流程優(yōu)化示意圖。
附圖4為本發(fā)明LVM Remote Replication模塊處理流程示意圖。
附圖5為本發(fā)明LVM Remote Replication模塊中NBD子模塊報文結構示意圖。
具體實施方式
為了使本發(fā)明所要解決的技術問題、技術方案及有益效果更加清楚明白,以下結合附圖和實施例,對本發(fā)明進行詳細的說明。應當說明的是,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
該優(yōu)化的基于LVM的遠程復制方法,基于LVM遠程復制架構包括LVM I/O Analysis模塊,LVM I/O Process模塊和LVM Remote Replication模塊三部分;所述LVM I/O Analysis模塊對上層應用的I/O請求解析進行優(yōu)化,對于讀請求直接訪問本地數(shù)據(jù),對于寫請求則發(fā)送到本地及遠程設備處理模塊;所述LVM I/O Process模塊對LVM中的Mirror接口進行優(yōu)化,更改寫請求的I/O處理流程,通過先記錄日志再更新數(shù)據(jù)的方法,將數(shù)據(jù)分別發(fā)送到本地及遠程設備;所述LVM Remote Replication模塊對NBD模塊進行更改,使之與LVM的內核結構對接,實現(xiàn)數(shù)據(jù)的遠程發(fā)送;同時,由于NBD報文是經(jīng)由TCP/IP傳輸?shù)?,所述LVM Remote Replication模塊還對TCP/IP網(wǎng)絡的參數(shù)也進行了優(yōu)化,調整TCP/IP網(wǎng)絡中的tcp_sack,tcp_timestamps,tcp_low_latency,tcp_westwood和tcp_bic參數(shù),使之更有效到適用于遠程復制場景。
所述LVM I/O Analysis模塊負責對上層應用發(fā)起的I/O請求過濾,通過改變lvm_make_request_fn()函數(shù)對I/O請求進行分類,lvm_make_request_fn()函數(shù)的主要功能是對將Mapped Device通過地址映射到底層的Target Device,并將映射的地址返回給系統(tǒng),讀請求或與復制無關的請求直接交由LVM自身機制從盤中讀取,寫請求則調用LVM I/O Process模塊的接口進行處理;所述LVM I/O Process模塊負責構建I/O的流程,同時與Remote Replication模塊對接,整個LVM I/O Process模塊是基于LVM的mirror特性更改實現(xiàn)的,mirror特性是將I/O請求分別發(fā)送到本地及復制卷中;所述LVM Remote Replication模塊負責遠程復制的數(shù)據(jù)一致性定義及數(shù)據(jù)的遠程傳輸;將I/O請求在主端經(jīng)由LVM Remote Replication模塊處理后,發(fā)送到遠程設備端并成功提交日志寫到數(shù)據(jù)盤后,更新本地的日志信息并提交給LVM I/O Process模塊;當LVM I/O Process模塊中的mirror收到本地及遠程的返回消息后,向應用層返回寫成功。
所述LVM I/O Process模塊對寫請求的I/O處理流程,首先將I/O請求記錄到日志信息中,然后將BIOS復制兩份,一份發(fā)送到本地的數(shù)據(jù)盤,另一份發(fā)送到請求隊列中,最后調用Remote Replication模塊接口,利用多線程處理將數(shù)據(jù)發(fā)送到對端;當接收到本地及遠程設備兩個請求完成后,向上層應用返回請求處理成功。
請求隊列是對I/O請求的緩沖。引進該機制是因為遠程復制的I/O需要發(fā)送到遠程設備上的傳輸速度與本地存儲速度相差很大,為了提升整體I/O寫的性能,考慮將I/O請求存放到隊列中,利用多線程處理將數(shù)據(jù)發(fā)送到對端,從而優(yōu)化系統(tǒng)整體的寫請求處理。
所述LVM Remote Replication模塊對遠程復制的數(shù)據(jù)一致性定義是指采用實時同步的方式,即上層應用發(fā)出的多個寫請求必須等待主端和備端的數(shù)據(jù)同時寫入方可繼續(xù)執(zhí)行;當請求到來時,先按照請求順序提交日志,寫日志成功后再寫數(shù)據(jù)盤,寫數(shù)據(jù)盤時,按照順序依次寫盤,只有寫日志及寫數(shù)據(jù)盤同時成功提交后,才按照請求提交順序更新日志信息,最后通知上層請求完成;
所述LVM Remote Replication模塊對數(shù)據(jù)的遠程傳輸是基于NBD模塊完成的,首先對主端和備端通過nbd_init函數(shù)初始化并連接,然后利用do_nbd_request函數(shù)從請求隊列中讀取相應的請求,使用報文結構中的handle域裝載發(fā)送到備端;調用nbd_do_it循環(huán)等待并調用nbd_read_stat讀取備端的寫盤狀態(tài);當讀寫請求完成后,則從請求隊列中刪除請求并向上層返回成功。
所述LVM Remote Replication模塊對TCP/IP網(wǎng)絡的參數(shù)的優(yōu)化包括利用tcp_sack參數(shù)啟用有選擇應答模式,提升亂序報文的回復,只發(fā)送丟失的報文;利用tcp_timestamps參數(shù)啟用TCP時間戳,更精確控制報文重發(fā);關閉tcp_low_latency參數(shù)和選用tcp_westwood參數(shù)通過吞吐量評估對帶寬的整體利用情況進行優(yōu)化;為了快速長距離的傳輸啟用tcp_bic參數(shù)的Binary Increase Congestion,更好利用傳輸網(wǎng)絡的GB級速度。