(武警工程大學(xué)信息工程系 陳曉 張龍軍王謙)
云環(huán)境下實(shí)時(shí)同步方案的設(shè)計(jì)
(武警工程大學(xué)信息工程系 陳曉 張龍軍王謙)
數(shù)據(jù)同步技術(shù)可以使異地?cái)?shù)據(jù)中心中的數(shù)據(jù)保持一致,但缺少監(jiān)管文件更新機(jī)制,不能實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)同步。以U-nix、Linux、Windows等系統(tǒng)普遍支持的Rsync同步算法為基礎(chǔ),提出適用于云環(huán)境下的HadoopRsync同步方案。實(shí)現(xiàn)文件同步的自動(dòng)化和實(shí)時(shí)性。并且根據(jù)實(shí)際應(yīng)用環(huán)境對(duì)文件HadoopRsync算法進(jìn)行改進(jìn)以提高效率。
近年來(lái),隨著虛擬化和網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,云計(jì)算正在世界范圍內(nèi)悄然興起,引發(fā)第三次信息技術(shù)革命浪潮。然而,數(shù)據(jù)同步問(wèn)題(有效存儲(chǔ)及一致性問(wèn)題)成為云災(zāi)備發(fā)展的一個(gè)重大瓶頸。
本文以HadoopRsync算法為前提設(shè)計(jì)了實(shí)時(shí)同步方案來(lái)解決此問(wèn)題。HadoopRsync不需要把數(shù)據(jù)塊集中到單個(gè)機(jī)器上,而是通過(guò)任務(wù)分配,把作業(yè)分發(fā)給多個(gè)節(jié)點(diǎn)以提高效率。
Rsync算法簡(jiǎn)介
Rsync算法是迄今為止遠(yuǎn)程數(shù)據(jù)同步比較經(jīng)典的算法,通過(guò)網(wǎng)絡(luò)傳輸文件內(nèi)容差異的部分,同步在異地?cái)?shù)據(jù)中心的相似文件。
Rsync可通過(guò)LAN/WAN快速同步多臺(tái)主機(jī)間的文件。具有開(kāi)源、流程優(yōu)化、鏡像保存整個(gè)目錄樹(shù)和文件系統(tǒng)以及支持rcp和ssh傳輸方式等諸多特點(diǎn)。
Rsync算法流程
Rsync算法的主要步驟為:
在目的端,將目標(biāo)文件劃分成大小為b字節(jié)且相等的數(shù)據(jù)塊,針對(duì)每個(gè),計(jì)算弱校驗(yàn)碼和強(qiáng)校驗(yàn)碼,將這兩個(gè)校驗(yàn)碼的列表傳輸?shù)綌?shù)據(jù)源端(為弱哈希函數(shù),是MD4強(qiáng)檢驗(yàn)算法)。
在數(shù)據(jù)源端,從文件偏移量開(kāi)始,按照數(shù)據(jù)塊大小為計(jì)算新文件的校驗(yàn)碼序列,與接收到的校驗(yàn)碼序列進(jìn)行計(jì)較,依次遍歷整個(gè)文件:
在目的端,用源文件端傳輸過(guò)來(lái)的新數(shù)據(jù)和舊文件的校驗(yàn)索引重建新文件。
Hadoop平臺(tái)
Hadoop是Apache下的一個(gè)開(kāi)源分布式計(jì)算平臺(tái),是云計(jì)算的主流應(yīng)用平臺(tái)。Hadoop、MapReduce和HDFS分別負(fù)責(zé)分布式計(jì)算與存儲(chǔ)功能。
HadoopRsync算法
與傳統(tǒng)的同步兩臺(tái)主機(jī)文件的Rsync算法不同,使得HadoopRsync變?yōu)橐粋€(gè)非對(duì)稱的算法。
Inotify機(jī)制
HadoopRsync雖然實(shí)現(xiàn)了云環(huán)境下的數(shù)據(jù)同步,但是沒(méi)有實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)的更新變化,缺少了實(shí)時(shí)監(jiān)控機(jī)制;其次,算法沒(méi)有考慮到特殊類型的文件的需求,例如實(shí)時(shí)數(shù)據(jù)文件的同步。
Inotify實(shí)時(shí)同步的實(shí)現(xiàn)原理
用戶首先創(chuàng)建一個(gè)inotify實(shí)例,通過(guò)調(diào)用函數(shù)inotify_init()實(shí)現(xiàn),此inotify實(shí)例會(huì)有一個(gè)對(duì)應(yīng)的inotify_deviee結(jié)構(gòu),該結(jié)構(gòu)中包含了watch描述符與監(jiān)聽(tīng)列表inotify_watches以及inotify實(shí)例上發(fā)生的事件列表(events),被inotify實(shí)例監(jiān)視的所有事件在發(fā)生后都將插入到events列表。
Hadoop平臺(tái)實(shí)時(shí)同步的設(shè)計(jì)與實(shí)現(xiàn)
數(shù)據(jù)同步的實(shí)現(xiàn)是基于Limix系統(tǒng)。功能實(shí)現(xiàn)主要采用C語(yǔ)言和Shell腳本來(lái)編程完成。
文件更新實(shí)時(shí)監(jiān)控的過(guò)程主要分為三個(gè)階段:首先程序初始化操作調(diào)用initialize_FM函數(shù),讀入系統(tǒng)文件,提取文件同步的信息。通過(guò)調(diào)用函數(shù)add_inotify為每個(gè)文件同步任務(wù)添加inotify實(shí)例。文件更新包括子目錄和子文件。
實(shí)驗(yàn)仿真
實(shí)驗(yàn)系統(tǒng)采用了兩臺(tái)安裝了Hadoop的Linux服務(wù)器與兩臺(tái)ASUS D451計(jì)算機(jī),Linux服務(wù)器內(nèi)核支持Inotify機(jī)制并根據(jù)系統(tǒng)的要求進(jìn)行了相關(guān)的配置,并采用了2Mbits/s專用光纖鏈路。
本文重點(diǎn)分析了Linux內(nèi)核中的Inotify機(jī)制與Rsync遠(yuǎn)程同步算法的執(zhí)行原理。結(jié)合當(dāng)前云災(zāi)備的需求,提出了一種適用于云環(huán)境下的實(shí)時(shí)同步的模型。在經(jīng)典的Rsync同步算法的基礎(chǔ)上改進(jìn)設(shè)計(jì)出了基于云平臺(tái)Hadoop集群的HadoopRsync算法與 Inotify機(jī)制相結(jié)合的實(shí)時(shí)同步系統(tǒng)。