本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種存儲(chǔ)文件的方法、第一虛擬機(jī)及名稱(chēng)節(jié)點(diǎn)。
背景技術(shù):
分布式文件系統(tǒng)包括客戶端(client)、數(shù)據(jù)節(jié)點(diǎn)(datanode)和名稱(chēng)節(jié)點(diǎn)(namenode);其中,數(shù)據(jù)節(jié)點(diǎn)用于存儲(chǔ)文件,名稱(chēng)節(jié)點(diǎn)用于管理數(shù)據(jù)節(jié)點(diǎn)上存儲(chǔ)的文件??蛻舳丝赏ㄟ^(guò)名稱(chēng)節(jié)點(diǎn)查詢每個(gè)數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的文件并獲得每個(gè)數(shù)據(jù)節(jié)點(diǎn)的地址,從而實(shí)現(xiàn)從數(shù)據(jù)節(jié)點(diǎn)中讀取文件或者將文件寫(xiě)入數(shù)據(jù)節(jié)點(diǎn)。分布式文件系統(tǒng)中的數(shù)據(jù)節(jié)點(diǎn)可以是物理服務(wù)器,也可以是虛擬機(jī)。
當(dāng)分布式文件系統(tǒng)中的數(shù)據(jù)節(jié)點(diǎn)為虛擬機(jī)時(shí),該虛擬機(jī)的虛擬硬盤(pán)是由分布式塊存儲(chǔ)系統(tǒng)提供的,向虛擬機(jī)寫(xiě)文件實(shí)際是向虛擬機(jī)的虛擬硬盤(pán)寫(xiě)文件,向虛擬硬盤(pán)寫(xiě)文件的實(shí)現(xiàn)方式是向分布式塊存儲(chǔ)系統(tǒng)管理的物理硬盤(pán)寫(xiě)文件。
分布式文件系統(tǒng)為了保證文件的可靠性,在虛擬硬盤(pán)存儲(chǔ)文件時(shí)會(huì)采用文件副本機(jī)制,將同一個(gè)文件保存在分布式文件系統(tǒng)中N個(gè)(N為大于1的整數(shù))虛擬硬盤(pán)中;而分布式塊存儲(chǔ)系統(tǒng)為了保證文件的可靠性,也會(huì)采用文件副本機(jī)制,將同一個(gè)虛擬硬盤(pán)中的文件在M個(gè)(M為大于1的整數(shù))物理硬盤(pán)中保存。由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制,會(huì)導(dǎo)致同一個(gè)文件在物理硬盤(pán)中實(shí)際保存的文件份數(shù)為N*M,造成了文件份數(shù)冗余。同一個(gè)文件保存的文件份數(shù)冗余會(huì)浪費(fèi)存儲(chǔ)空間,影響系統(tǒng)的處理性能。
現(xiàn)有技術(shù)中為了解決分布式文件系統(tǒng)中文件份數(shù)冗余的問(wèn)題,通常采用以下兩種方法:第一種方法是,對(duì)于需要存儲(chǔ)的一份文件,僅在分布式文件系統(tǒng)的一個(gè)虛擬機(jī)中存儲(chǔ)該文件。采用第一種方法,只能通過(guò)該虛擬機(jī)才能訪問(wèn)該文件,若該虛擬機(jī)發(fā)生故障,則需要等待該虛擬機(jī)恢復(fù)正常后才能再次為客戶端提供文件讀寫(xiě)服務(wù),導(dǎo)致分布式文件系統(tǒng)的可用性降低;第二種方法是,采用虛擬機(jī)的熱備機(jī)制,即配置主虛擬機(jī)對(duì)應(yīng)的熱備虛擬機(jī),該熱備虛擬機(jī)與主虛擬機(jī)同步寫(xiě)入文件。當(dāng)主虛擬機(jī)發(fā)生故障時(shí),分布式文件系統(tǒng)切換到熱備虛擬機(jī)繼續(xù)為客戶端提供文件讀寫(xiě)服務(wù)。采用第二種方法,分布式文件系統(tǒng)切換到熱備虛擬機(jī)時(shí)需要一定的等待時(shí)長(zhǎng),導(dǎo)致分布式文件系統(tǒng)在該等待時(shí)長(zhǎng)內(nèi)無(wú)法為客戶端提供文件讀寫(xiě)服務(wù),使分布式文件系統(tǒng)的可用性降低;并且,熱備虛擬機(jī)在切換至主虛擬機(jī)之前不對(duì)外提供服務(wù),導(dǎo)致資源浪費(fèi)。
綜上,現(xiàn)有的解決分布式文件系統(tǒng)中文件份數(shù)冗余問(wèn)題的方法會(huì)導(dǎo)致分布式文件系統(tǒng)的可用性低、無(wú)法較好地解決文件份數(shù)冗余問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種存儲(chǔ)文件的方法、第一虛擬機(jī)及名稱(chēng)節(jié)點(diǎn),用以解決分布式文件系統(tǒng)存儲(chǔ)文件時(shí)存在的文件份數(shù)冗余的問(wèn)題,并提高系統(tǒng)的可用性。
第一方面,本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中存儲(chǔ)文件的方法,該方法中,分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),其中的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;該方法包括:
第一虛擬機(jī)接收客戶端發(fā)送的待寫(xiě)數(shù)據(jù)、第二虛擬機(jī)的地址,然后向多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域?qū)懭虢邮盏降拇龑?xiě)數(shù)據(jù),并生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù);第一虛擬機(jī)根據(jù)接收到的第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送第一虛擬機(jī)生成或更新的元數(shù)據(jù)。
其中,第一虛擬機(jī)為多個(gè)虛擬機(jī)中被名稱(chēng)節(jié)點(diǎn)指定具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī);待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)包括但不限于:待寫(xiě)數(shù)據(jù)的存儲(chǔ)位置、待寫(xiě)數(shù)據(jù)的文件名稱(chēng)以及待寫(xiě)數(shù)據(jù)的文件目錄。
采用上述方法,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,因而在分布式文件系統(tǒng)中,第一虛擬機(jī)寫(xiě)入該存儲(chǔ)區(qū)域的待寫(xiě)數(shù)據(jù)在該存儲(chǔ)區(qū)域中僅保存一份。對(duì)于待寫(xiě)數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,采用上述方案,分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,第一虛擬機(jī)向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)之前,還包括:第一虛擬機(jī)接收客戶端發(fā)送的第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí),寫(xiě)權(quán)限標(biāo)識(shí)是名稱(chēng)節(jié)點(diǎn)在客戶端向名稱(chēng)節(jié)點(diǎn)請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí)向客戶端發(fā)送的,用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限。
采用上述方案,提供了一種客戶端向第一虛擬機(jī)指示第一虛擬機(jī)的權(quán)限的方式。
多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),該虛擬硬盤(pán)包括多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域。
第一虛擬機(jī)向第二虛擬機(jī)發(fā)送的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)有以下兩種用途:
第一種
若第二虛擬機(jī)通過(guò)自身的操作系統(tǒng)讀取待寫(xiě)數(shù)據(jù),則元數(shù)據(jù)用于第二虛擬機(jī)生成或更新自身的操作系統(tǒng)中記錄的文件信息,文件信息用于操作系統(tǒng)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
第二種
若第二虛擬機(jī)讀取待寫(xiě)數(shù)據(jù),則元數(shù)據(jù)用于第二虛擬機(jī)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
采用上述方案,第二虛擬機(jī)可以根據(jù)第一虛擬機(jī)發(fā)送的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)讀取多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域中的待寫(xiě)數(shù)據(jù)。
在一種可能的實(shí)現(xiàn)方式中,第二虛擬機(jī)可以被名稱(chēng)節(jié)點(diǎn)指定具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第二方面,本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中存儲(chǔ)文件的方法,該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;該方法包括:
名稱(chēng)節(jié)點(diǎn)接收客戶端請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)的請(qǐng)求消息后,向客戶端發(fā)送該請(qǐng)求消息對(duì)應(yīng)的響應(yīng)消息。
其中,名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送的響應(yīng)消息中包括第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,此外,該響應(yīng)消息還指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī)。
采用上述方案,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,而名稱(chēng)節(jié)點(diǎn)發(fā)送的響應(yīng)消息指定多個(gè)虛擬機(jī)中的一個(gè)第一虛擬機(jī)具有向共享的存儲(chǔ)區(qū)域中寫(xiě)入數(shù)據(jù)的權(quán)限,因而向共享的存儲(chǔ)區(qū)域中寫(xiě)入的數(shù)據(jù)僅會(huì)在該存儲(chǔ)區(qū)域中保存一份。對(duì)于寫(xiě)入共享的存儲(chǔ)區(qū)域的數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,響應(yīng)消息中指示分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,響應(yīng)消息還指示第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
在一種可能的實(shí)現(xiàn)方式中,名稱(chēng)節(jié)點(diǎn)通過(guò)響應(yīng)消息向客戶端指示第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限時(shí)可采用如下兩種方式:
第一種方式
名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送的響應(yīng)消息還包括第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)和第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),其中的寫(xiě)權(quán)限標(biāo)識(shí)和讀權(quán)限標(biāo)識(shí)分別指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第二種方式
名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送的響應(yīng)消息中第一虛擬機(jī)的地址和第二虛擬機(jī)的地址按照預(yù)設(shè)規(guī)則排列,該預(yù)設(shè)規(guī)則指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用這兩種方式,提供了名稱(chēng)節(jié)點(diǎn)通過(guò)響應(yīng)消息向客戶端指示第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限的兩種方式。
在一種可能的實(shí)現(xiàn)方式中,多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
由于分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè),因而當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)。具體實(shí)現(xiàn)時(shí),名稱(chēng)節(jié)點(diǎn)在虛擬機(jī)發(fā)生故障時(shí)通過(guò)何種方式處理可包含以下兩種情況:
第一種情況
當(dāng)?shù)谝惶摂M機(jī)發(fā)生故障時(shí),名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送第一更新信息,該第一更新信息包括更新的第一虛擬機(jī)的地址,第一更新信息還指定了多個(gè)虛擬機(jī)中除發(fā)生故障的第一虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第一虛擬機(jī),即指定第二虛擬機(jī)中的某一個(gè)虛擬機(jī)作為更新的第一虛擬機(jī),更新的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限。
第二種情況
當(dāng)?shù)诙摂M機(jī)發(fā)生故障時(shí),名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送第二更新信息,該第二更新信息包括更新的第二虛擬機(jī)的地址,第二更新信息還指定了多個(gè)虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第二虛擬機(jī),更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用上述方案,無(wú)論是第一虛擬機(jī)發(fā)生故障還是第二虛擬機(jī)發(fā)生故障,名稱(chēng)節(jié)點(diǎn)均指定了其他虛擬機(jī)來(lái)替代發(fā)生故障的虛擬機(jī),從而在第一虛擬機(jī)和/或第二虛擬機(jī)發(fā)生故障的情況下,分布式文件系統(tǒng)仍能為客戶端提供讀寫(xiě)數(shù)據(jù)的服務(wù),進(jìn)一步提高了分布式文件系統(tǒng)的可用性。
第三方面,本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中存儲(chǔ)文件的方法,該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;該方法包括:
客戶端向名稱(chēng)節(jié)點(diǎn)發(fā)送請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)的請(qǐng)求消息,后接收名稱(chēng)節(jié)點(diǎn)發(fā)送的請(qǐng)求消息對(duì)應(yīng)的響應(yīng)消息。
其中,響應(yīng)消息包括第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,此外,響應(yīng)消息還指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī)。
客戶端根據(jù)響應(yīng)消息包括的第一虛擬機(jī)的地址向第一虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)和第二虛擬機(jī)的地址,并指示第一虛擬機(jī):寫(xiě)入待寫(xiě)數(shù)據(jù)、生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)、并根據(jù)第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
采用上述方案,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,因而在分布式文件系統(tǒng)中,客戶端指示第一虛擬機(jī)寫(xiě)入該共享存儲(chǔ)區(qū)域的待寫(xiě)數(shù)據(jù)只在該存儲(chǔ)區(qū)域中存儲(chǔ)一份。對(duì)于待寫(xiě)數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,客戶端通過(guò)接收到的名稱(chēng)節(jié)點(diǎn)發(fā)送的響應(yīng)消息來(lái)獲知第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限時(shí)可采用如下兩種方式:
第一種方式
客戶端接收到的響應(yīng)消息還包括第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)和第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),其中的寫(xiě)權(quán)限標(biāo)識(shí)和讀權(quán)限標(biāo)識(shí)分別指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第二種方式
客戶端接收到的響應(yīng)消息中第一虛擬機(jī)的地址和第二虛擬機(jī)的地址按照預(yù)設(shè)規(guī)則排列,該預(yù)設(shè)規(guī)則指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用這兩種方式,提供了客戶端通過(guò)接收響應(yīng)消息獲知第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限的兩種方式。
在一種可能的實(shí)現(xiàn)方式中,多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
在一種可能的實(shí)現(xiàn)方式中,響應(yīng)消息還指示第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第四方面,本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中存儲(chǔ)文件的方法,該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;該方法包括:
第二虛擬機(jī)接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)。其中,第一虛擬機(jī)為多個(gè)虛擬機(jī)中被名稱(chēng)節(jié)點(diǎn)指定具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī),元數(shù)據(jù)為第一虛擬機(jī)向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)后生成或更新的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
采用上述方案,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,而多個(gè)虛擬機(jī)中的一個(gè)第一虛擬機(jī)具有向共享的存儲(chǔ)區(qū)域中寫(xiě)入數(shù)據(jù)的權(quán)限,因而向共享的存儲(chǔ)區(qū)域中寫(xiě)入的數(shù)據(jù)僅會(huì)在該存儲(chǔ)區(qū)域中保存一份。對(duì)于寫(xiě)入共享的存儲(chǔ)區(qū)域的數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,第二虛擬機(jī)獲知身權(quán)限可采用如下方式:第二虛擬機(jī)在接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)之前,接收客戶端發(fā)送的第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),讀權(quán)限標(biāo)識(shí)是名稱(chēng)節(jié)點(diǎn)在客戶端向名稱(chēng)節(jié)點(diǎn)請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí)向客戶端發(fā)送的,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
在一種可能的實(shí)現(xiàn)方式中,多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
第二虛擬機(jī)接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)之后,可根據(jù)接收到的元數(shù)據(jù)讀取多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域中的待寫(xiě)數(shù)據(jù),具體可采用以下方式:
第一種
若第二虛擬機(jī)通過(guò)自身的操作系統(tǒng)讀取待寫(xiě)數(shù)據(jù),則第二虛擬機(jī)根據(jù)元數(shù)據(jù)生成或更新自身的操作系統(tǒng)中記錄的文件信息,該文件信息可用于操作系統(tǒng)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
第二種
若第二虛擬機(jī)讀取待寫(xiě)數(shù)據(jù),則第二虛擬機(jī)根據(jù)元數(shù)據(jù)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
采用上述方案,第二虛擬機(jī)可以根據(jù)第一虛擬機(jī)發(fā)送的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)讀取多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域中的待寫(xiě)數(shù)據(jù)。
在一種可能的實(shí)現(xiàn)方式中,第二虛擬機(jī)被名稱(chēng)節(jié)點(diǎn)指定具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第五方面,本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中的第一虛擬機(jī),該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,第一虛擬機(jī)為多個(gè)虛擬機(jī)中被名稱(chēng)節(jié)點(diǎn)指定具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī);該第一虛擬機(jī)包括:
接收模塊,用于接收客戶端發(fā)送的待寫(xiě)數(shù)據(jù)、第二虛擬機(jī)的地址,第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī);
處理模塊,用于向存儲(chǔ)區(qū)域?qū)懭虢邮漳K接收的待寫(xiě)數(shù)據(jù),并生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù);
發(fā)送模塊,用于根據(jù)接收模塊接收的第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送處理模塊生成或更新元數(shù)據(jù)。
其中,待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)包括但不限于:待寫(xiě)數(shù)據(jù)的存儲(chǔ)位置、待寫(xiě)數(shù)據(jù)的文件名稱(chēng)以及待寫(xiě)數(shù)據(jù)的文件目錄。
采用上述方案,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,因而在分布式文件系統(tǒng)中,處理模塊寫(xiě)入該存儲(chǔ)區(qū)域的待寫(xiě)數(shù)據(jù)在該存儲(chǔ)區(qū)域中僅保存一份。對(duì)于待寫(xiě)數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,采用上述方法,分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,接收模塊還用于:在處理模塊向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)之前,接收客戶端發(fā)送的第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí),寫(xiě)權(quán)限標(biāo)識(shí)是名稱(chēng)節(jié)點(diǎn)在客戶端向名稱(chēng)節(jié)點(diǎn)請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí)向客戶端發(fā)送的,該寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限。
采用上述方案,提供了一種第一虛擬機(jī)從客戶端獲知自身權(quán)限的方式。
多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
發(fā)送模塊向第二虛擬機(jī)發(fā)送的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)有以下兩種用途:
第一種
若第二虛擬機(jī)通過(guò)自身的操作系統(tǒng)讀取待寫(xiě)數(shù)據(jù),則元數(shù)據(jù)用于第二虛擬機(jī)生成或更新自身的操作系統(tǒng)中記錄的文件信息,文件信息用于操作系統(tǒng)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
第二種
若第二虛擬機(jī)讀取待寫(xiě)數(shù)據(jù),則元數(shù)據(jù)用于第二虛擬機(jī)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
采用上述方案,第二虛擬機(jī)可以根據(jù)發(fā)送模塊發(fā)送的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)讀取多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域中的待寫(xiě)數(shù)據(jù)。
在一種可能的實(shí)現(xiàn)方式中,第二虛擬機(jī)被名稱(chēng)節(jié)點(diǎn)指定具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第六方面,本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中的名稱(chēng)節(jié)點(diǎn),該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;該名稱(chēng)節(jié)點(diǎn)包括:
接收模塊,用于接收客戶端請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)的請(qǐng)求消息;
發(fā)送模塊,用于向客戶端發(fā)送接收模塊接收的請(qǐng)求消息對(duì)應(yīng)的響應(yīng)消息,該響應(yīng)消息包括第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,此外,該響應(yīng)消息還指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī)。
采用上述方案,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,而名稱(chēng)節(jié)點(diǎn)發(fā)送的響應(yīng)消息指定多個(gè)虛擬機(jī)中的一個(gè)第一虛擬機(jī)具有向共享的存儲(chǔ)區(qū)域中寫(xiě)入數(shù)據(jù)的權(quán)限,因而處理模塊向共享的存儲(chǔ)區(qū)域中寫(xiě)入的數(shù)據(jù)僅會(huì)在該存儲(chǔ)區(qū)域中保存一份。對(duì)于寫(xiě)入共享的存儲(chǔ)區(qū)域的數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,響應(yīng)消息中指示分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,響應(yīng)消息還指示第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
在一種可能的實(shí)現(xiàn)方式中,發(fā)送模塊發(fā)送的響應(yīng)消息向客戶端指示第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限時(shí)可采用如下兩種方式:
第一種方式
發(fā)送模塊向客戶端發(fā)送的響應(yīng)消息還包括第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)和第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),其中的寫(xiě)權(quán)限標(biāo)識(shí)和讀權(quán)限標(biāo)識(shí)分別指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第二種方式
發(fā)送模塊向客戶端發(fā)送的響應(yīng)消息中第一虛擬機(jī)的地址和第二虛擬機(jī)的地址按照預(yù)設(shè)規(guī)則排列,該預(yù)設(shè)規(guī)則指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用這兩種方式,提供了發(fā)送模塊發(fā)送的響應(yīng)消息向客戶端指示第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限的兩種方式。
在一種可能的實(shí)現(xiàn)方式中,多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
由于分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè),因而當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)。具體實(shí)現(xiàn)時(shí),發(fā)送模塊在虛擬機(jī)發(fā)生故障時(shí)通過(guò)何種方式處理可包含以下兩種情況:
第一種情況
當(dāng)?shù)谝惶摂M機(jī)發(fā)生故障時(shí),向客戶端發(fā)送第一更新信息,該第一更新信息包括更新的第一虛擬機(jī)的地址,第一更新信息還指定了多個(gè)虛擬機(jī)中除發(fā)生故障的第一虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第一虛擬機(jī),更新的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限。
第二種情況
當(dāng)?shù)诙摂M機(jī)發(fā)生故障時(shí),向客戶端發(fā)送第二更新信息,該第二更新信息包括更新的第二虛擬機(jī)的地址,第二更新信息還指定了多個(gè)虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第二虛擬機(jī),更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用上述方案,無(wú)論是第一虛擬機(jī)發(fā)生故障還是第二虛擬機(jī)發(fā)生故障,發(fā)送模塊均指定了其他虛擬機(jī)來(lái)替代發(fā)生故障的虛擬機(jī),從而在第一虛擬機(jī)和/或第二虛擬機(jī)發(fā)生故障的情況下,分布式文件系統(tǒng)仍能為客戶端提供讀寫(xiě)數(shù)據(jù)的服務(wù),進(jìn)一步提高了分布式文件系統(tǒng)的可用性。
第七方面,本發(fā)明實(shí)施例提供一種客戶端,該客戶端所在的分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;該客戶端包括:
發(fā)送模塊,用于向名稱(chēng)節(jié)點(diǎn)發(fā)送請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)的請(qǐng)求消息;
接收模塊,用于接收名稱(chēng)節(jié)點(diǎn)發(fā)送的請(qǐng)求消息對(duì)應(yīng)的響應(yīng)消息;
其中,響應(yīng)消息包括第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,此外,響應(yīng)消息還指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī);
發(fā)送模塊,還用于根據(jù)接收模塊接收的響應(yīng)消息包括的第一虛擬機(jī)的地址向第一虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)、第二虛擬機(jī)的地址,并指示第一虛擬機(jī):寫(xiě)入待寫(xiě)數(shù)據(jù)、生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)、以及根據(jù)接收模塊接收的響應(yīng)消息包括的第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
采用上述方案,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,因而在分布式文件系統(tǒng)中,發(fā)送模塊指示第一虛擬機(jī)寫(xiě)入該共享存儲(chǔ)區(qū)域的待寫(xiě)數(shù)據(jù)只在該存儲(chǔ)區(qū)域中存儲(chǔ)一份。對(duì)于待寫(xiě)數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,接收模塊通過(guò)接收到的名稱(chēng)節(jié)點(diǎn)發(fā)送的響應(yīng)消息來(lái)獲知第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限時(shí)可采用如下兩種方式:
第一種方式
接收模塊接收到的響應(yīng)消息還包括第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)和第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),其中的寫(xiě)權(quán)限標(biāo)識(shí)和讀權(quán)限標(biāo)識(shí)分別指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第二種方式
接收模塊接收到的響應(yīng)消息中第一虛擬機(jī)的地址和第二虛擬機(jī)的地址按照預(yù)設(shè)規(guī)則排列,該預(yù)設(shè)規(guī)則指示了第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限,即:第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用這兩種方式,提供了接收模塊通過(guò)接收響應(yīng)消息獲知第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限的兩種方式。
在一種可能的實(shí)現(xiàn)方式中,多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
在一種可能的實(shí)現(xiàn)方式中,響應(yīng)消息還指示第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第八方面,本發(fā)明實(shí)施例一種分布式文件系統(tǒng)中的第二虛擬機(jī),該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;該第二虛擬機(jī)包括:
接收模塊,用于接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)。其中,第一虛擬機(jī)為多個(gè)虛擬機(jī)中被名稱(chēng)節(jié)點(diǎn)指定具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī),元數(shù)據(jù)為第一虛擬機(jī)向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)后生成或更新的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
采用上述方案,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,而多個(gè)虛擬機(jī)中的一個(gè)第一虛擬機(jī)具有向共享的存儲(chǔ)區(qū)域中寫(xiě)入數(shù)據(jù)的權(quán)限,因而向共享的存儲(chǔ)區(qū)域中寫(xiě)入的數(shù)據(jù)僅會(huì)在該存儲(chǔ)區(qū)域中保存一份。對(duì)于寫(xiě)入共享的存儲(chǔ)區(qū)域的數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
在一種可能的實(shí)現(xiàn)方式中,接收模塊獲知第二虛擬機(jī)的權(quán)限可采用如下方式:接收模塊在接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)之前,接收客戶端發(fā)送的第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),讀權(quán)限標(biāo)識(shí)是名稱(chēng)節(jié)點(diǎn)在客戶端向名稱(chēng)節(jié)點(diǎn)請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí)向客戶端發(fā)送的,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
在一種可能的實(shí)現(xiàn)方式中,多個(gè)虛擬機(jī)共享一個(gè)存儲(chǔ)區(qū)域在具體實(shí)現(xiàn)時(shí)可采用如下方式:多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
在一種可能的實(shí)現(xiàn)方式中,第二虛擬機(jī)還包括處理模塊。接收模塊接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)之后,處理模塊可根據(jù)接收到的元數(shù)據(jù)讀取多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域中的待寫(xiě)數(shù)據(jù),處理模塊在具體可采用以下方式:
第一種
在接收模塊接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)之后,若第二虛擬機(jī)通過(guò)自身的操作系統(tǒng)讀取待寫(xiě)數(shù)據(jù),則處理模塊根據(jù)元數(shù)據(jù)生成或更新自身的操作系統(tǒng)中記錄的文件信息,文件信息用于操作系統(tǒng)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
第二種
若第二虛擬機(jī)讀取待寫(xiě)數(shù)據(jù),則處理模塊根據(jù)元數(shù)據(jù)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
采用上述方案,處理模塊可以根據(jù)第一虛擬機(jī)發(fā)送的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)讀取多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域中的待寫(xiě)數(shù)據(jù)。
在一種可能的實(shí)現(xiàn)方式中,第二虛擬機(jī)被名稱(chēng)節(jié)點(diǎn)指定具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
第九方面,提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)執(zhí)行指令,當(dāng)計(jì)算節(jié)點(diǎn)的至少一個(gè)處理器執(zhí)行該計(jì)算機(jī)執(zhí)行指令時(shí),計(jì)算節(jié)點(diǎn)執(zhí)行上述第一方面或者第一方面的各種可能設(shè)計(jì)提供的方法、或者執(zhí)行上述第二方面或者第二方面的各種可能設(shè)計(jì)提供的方法、或者執(zhí)行上述第三方面或者第三方面的各種可能設(shè)計(jì)提供的方法。
第十方面,提供一種計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)執(zhí)行指令,該計(jì)算機(jī)執(zhí)行指令存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。計(jì)算節(jié)點(diǎn)的至少一個(gè)處理器可以從計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)讀取該計(jì)算機(jī)執(zhí)行指令,至少一個(gè)處理器執(zhí)行該計(jì)算機(jī)執(zhí)行指令使得計(jì)算節(jié)點(diǎn)實(shí)施上述第一方面或者第一方面的各種可能設(shè)計(jì)提供的方法、或者執(zhí)行上述第二方面或者第二方面的各種可能設(shè)計(jì)提供的方法、或者執(zhí)行上述第三方面或者第三方面的各種可能設(shè)計(jì)提供的方法。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例提供的分布式文件系統(tǒng)中名稱(chēng)節(jié)點(diǎn)、客戶端和多個(gè)數(shù)據(jù)節(jié)點(diǎn)的連接關(guān)系的示意圖;
圖2為本發(fā)明實(shí)施例提供的分布式文件系統(tǒng)與分布式塊存儲(chǔ)系統(tǒng)的連接關(guān)系的示意圖;
圖3為本發(fā)明實(shí)施例提供的分布式文件系統(tǒng)中存儲(chǔ)文件的方法的流程示意圖;
圖4為采用圖3所示的存儲(chǔ)文件的方法的分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)的結(jié)構(gòu)示意圖;
圖5為明實(shí)施例提供的一種第一虛擬機(jī)的結(jié)構(gòu)示意圖;
圖6為明實(shí)施例提供的另一種第一虛擬機(jī)的結(jié)構(gòu)示意圖;
圖7為明實(shí)施例提供的一種名稱(chēng)節(jié)點(diǎn)的結(jié)構(gòu)示意圖;
圖8為明實(shí)施例提供的另一種名稱(chēng)節(jié)點(diǎn)的結(jié)構(gòu)示意圖;
圖9為明實(shí)施例提供的一種客戶端的結(jié)構(gòu)示意圖;
圖10為明實(shí)施例提供的另一種客戶端的結(jié)構(gòu)示意圖;
圖11為明實(shí)施例提供的一種第二虛擬機(jī)的結(jié)構(gòu)示意圖;
圖12為明實(shí)施例提供的另一種第二虛擬機(jī)的結(jié)構(gòu)示意圖;
圖13為本發(fā)明實(shí)施例提供的一種分布式文件系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了更好地理解本發(fā)明實(shí)施例的上述目的、方案和優(yōu)勢(shì),下文提供了詳細(xì)描述。該詳細(xì)描述通過(guò)使用框圖、流程圖等附圖和/或示例,闡明了裝置和/或方法的各種實(shí)施方式。在這些框圖、流程圖和/或示例中,包含一個(gè)或多個(gè)功能和/或操作。本領(lǐng)域技術(shù)人員將理解到:這些框圖、流程圖或示例內(nèi)的各個(gè)功能和/或操作,能夠通過(guò)各種各樣的硬件、軟件、固件單獨(dú)或共同實(shí)施,或者通過(guò)硬件、軟件和固件的任意組合實(shí)施。
本發(fā)明實(shí)施例涉及分布式文件系統(tǒng),下面對(duì)分布式文件系統(tǒng)進(jìn)行詳細(xì)介紹。
如圖1所示,分布式文件系統(tǒng)可包含名稱(chēng)節(jié)點(diǎn)和多個(gè)數(shù)據(jù)節(jié)點(diǎn)。根據(jù)分布式文件系統(tǒng)的應(yīng)用場(chǎng)合不同,名稱(chēng)節(jié)點(diǎn)又可以稱(chēng)為主控服務(wù)器或者其他名稱(chēng),對(duì)應(yīng)地,數(shù)據(jù)節(jié)點(diǎn)又可以稱(chēng)為數(shù)據(jù)服務(wù)器或者其他名稱(chēng)。需要說(shuō)明的是,圖1中僅示出分布式文件系統(tǒng)包含一個(gè)客戶端的場(chǎng)景,實(shí)際中,分布式文件系統(tǒng)中可包含多個(gè)客戶端。
其中,名稱(chēng)節(jié)點(diǎn)用于管理多個(gè)數(shù)據(jù)節(jié)點(diǎn),名稱(chēng)節(jié)點(diǎn)記錄每個(gè)數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的文件的信息(例如元數(shù)據(jù)文件)、每個(gè)數(shù)據(jù)節(jié)點(diǎn)的服務(wù)狀態(tài)等;數(shù)據(jù)節(jié)點(diǎn)用于存儲(chǔ)文件,當(dāng)客戶端進(jìn)行文件讀寫(xiě)操作時(shí),客戶端首先向名稱(chēng)節(jié)點(diǎn)請(qǐng)求獲取數(shù)據(jù)節(jié)點(diǎn)的索引信息,然后再根據(jù)請(qǐng)求到的索引信息訪問(wèn)相應(yīng)的數(shù)據(jù)節(jié)點(diǎn)來(lái)進(jìn)行文件讀寫(xiě)。多個(gè)數(shù)據(jù)節(jié)點(diǎn)之間可能會(huì)同步文件。比如當(dāng)某個(gè)文件需要在兩個(gè)數(shù)據(jù)節(jié)點(diǎn)中寫(xiě)入時(shí),可先寫(xiě)入其中一個(gè)數(shù)據(jù)節(jié)點(diǎn),再由該數(shù)據(jù)節(jié)點(diǎn)將文件同步給另一個(gè)數(shù)據(jù)節(jié)點(diǎn)。此外,名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)間也可以直接進(jìn)行信息交互。
其中,名稱(chēng)節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)、客戶端可以在以下任一種具有計(jì)算能力的設(shè)備上配置對(duì)應(yīng)功能實(shí)現(xiàn)。該具有計(jì)算能力的設(shè)備可以是物理設(shè)備或虛擬設(shè)備;例如,物理設(shè)備可以是個(gè)人計(jì)算機(jī)、筆記本計(jì)算機(jī)、大型機(jī)、聯(lián)網(wǎng)計(jì)算機(jī)、手持式計(jì)算機(jī)、個(gè)人數(shù)字助理、工作站等,虛擬設(shè)備可以是部署在物理設(shè)備中的虛擬機(jī)或容器等。
參見(jiàn)圖2,當(dāng)數(shù)據(jù)節(jié)點(diǎn)為虛擬機(jī)時(shí),虛擬機(jī)的虛擬硬盤(pán)由分布式塊存儲(chǔ)系統(tǒng)提供,分布式塊存儲(chǔ)系統(tǒng)管理有多個(gè)物理硬盤(pán),向虛擬機(jī)的虛擬硬盤(pán)寫(xiě)入文件實(shí)際是向分布式塊存儲(chǔ)系統(tǒng)管理的物理硬盤(pán)中寫(xiě)入文件。
參見(jiàn)圖2,分布式文件系統(tǒng)為了保證自身的可靠性,在存儲(chǔ)文件時(shí)一般會(huì)采用文件副本機(jī)制,比如在存儲(chǔ)某個(gè)文件時(shí),將該文件分別存儲(chǔ)在兩個(gè)數(shù)據(jù)節(jié)點(diǎn)上,即存儲(chǔ)在虛擬機(jī)1和虛擬機(jī)2上;分布式塊存儲(chǔ)系統(tǒng)為了保證自身的可靠性,具體在存儲(chǔ)虛擬機(jī)的文件時(shí)也會(huì)采用文件副本機(jī)制,比如在實(shí)現(xiàn)虛擬機(jī)1的該文件的存儲(chǔ)時(shí)分別在物理服務(wù)器1的物理硬盤(pán)1、物理服務(wù)器2的物理硬盤(pán)3和物理服務(wù)器3的物理硬盤(pán)5上存儲(chǔ)該文件,以及在實(shí)現(xiàn)虛擬機(jī)2的該文件的存儲(chǔ)時(shí)分別存儲(chǔ)在物理服務(wù)器1的物理硬盤(pán)2、物理服務(wù)器2的物理硬盤(pán)4和物理服務(wù)器3的物理硬盤(pán)6上存儲(chǔ)該文件。這樣,由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制,導(dǎo)致該文件在分布式塊存儲(chǔ)系統(tǒng)管理的物理硬盤(pán)中保存六份。顯然,對(duì)于同一個(gè)文件保存的文件份數(shù)冗余會(huì)浪費(fèi)存儲(chǔ)空間,影響系統(tǒng)的處理性能。
需要說(shuō)明的是,為了解釋分布式文件系統(tǒng)在存儲(chǔ)某個(gè)文件時(shí)的操作,圖2的分布式文件系統(tǒng)中僅示出了兩個(gè)虛擬機(jī),每個(gè)虛擬機(jī)包含一個(gè)虛擬硬盤(pán);圖2的分布式塊存儲(chǔ)系統(tǒng)中僅示出了三個(gè)物理服務(wù)器,每個(gè)物理服務(wù)器包含兩個(gè)物理硬盤(pán)。實(shí)際實(shí)現(xiàn)時(shí),分布式文件系統(tǒng)可以存儲(chǔ)有多個(gè)文件,因而對(duì)分布式文件系統(tǒng)包含的虛擬機(jī)的數(shù)量不做限制,對(duì)每個(gè)虛擬機(jī)包含的虛擬硬盤(pán)的數(shù)量不做限制;同時(shí),對(duì)分布式塊存儲(chǔ)系統(tǒng)包含的物理服務(wù)器的數(shù)量不做限制,對(duì)每個(gè)物理服務(wù)器包含的物理硬盤(pán)的數(shù)量也不做限制。
為了解決分布式文件系統(tǒng)存在的文件份數(shù)冗余的問(wèn)題,本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中存儲(chǔ)文件的方法,分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),其中,多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域。如圖3所示,該方法包括:
S301:客戶端向名稱(chēng)節(jié)點(diǎn)發(fā)送請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)的請(qǐng)求消息。
待寫(xiě)數(shù)據(jù)可以是視頻數(shù)據(jù)、音頻數(shù)據(jù)、文檔數(shù)據(jù)或者其他二進(jìn)制數(shù)據(jù)。待寫(xiě)數(shù)據(jù)的粒度可以是文件、數(shù)據(jù)塊或者其他粒度。待寫(xiě)數(shù)據(jù)的數(shù)量可以是一個(gè)或多個(gè),只要將圖3所示方法執(zhí)行一次后,某一個(gè)或多個(gè)數(shù)據(jù)被寫(xiě)入了分布式文件系統(tǒng),該一個(gè)或多個(gè)數(shù)據(jù)即可視為待寫(xiě)數(shù)據(jù)。
S302:名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送請(qǐng)求消息對(duì)應(yīng)的響應(yīng)消息。
其中,響應(yīng)消息包括第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,響應(yīng)消息還指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī)。
其中,第一虛擬機(jī)的數(shù)量必須為一個(gè);第二虛擬機(jī)的數(shù)量可以是一個(gè),也可以是多個(gè),本發(fā)明實(shí)施例中對(duì)第二虛擬機(jī)的數(shù)量不做限制。
本發(fā)明實(shí)施例中,多個(gè)虛擬機(jī)中僅有一個(gè)虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,其原因是:如果有多個(gè)虛擬機(jī)用于寫(xiě)入待寫(xiě)數(shù)據(jù),那么當(dāng)客戶端要向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí),會(huì)有多個(gè)虛擬機(jī)接收到寫(xiě)入待寫(xiě)數(shù)據(jù)的指令;由于多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,那么多個(gè)虛擬機(jī)接收到的寫(xiě)入待寫(xiě)數(shù)據(jù)的指令會(huì)在同一時(shí)刻指示多個(gè)虛擬機(jī)將待寫(xiě)數(shù)據(jù)寫(xiě)入同一存儲(chǔ)區(qū)域,這樣會(huì)造成寫(xiě)入待寫(xiě)數(shù)據(jù)的指令無(wú)法區(qū)分應(yīng)該通過(guò)哪個(gè)虛擬機(jī)寫(xiě)入待寫(xiě)數(shù)據(jù),導(dǎo)致寫(xiě)入待寫(xiě)數(shù)據(jù)的指令無(wú)法執(zhí)行。另外,只有一個(gè)虛擬機(jī)寫(xiě)入待寫(xiě)數(shù)據(jù),保證在分布式系統(tǒng)寫(xiě)入數(shù)據(jù)階段只寫(xiě)了一份待寫(xiě)數(shù)據(jù),相對(duì)于現(xiàn)有技術(shù)在分布式系統(tǒng)寫(xiě)入數(shù)據(jù)階段是寫(xiě)入多份待寫(xiě)數(shù)據(jù),減少了數(shù)據(jù)冗余。
本發(fā)明實(shí)施例中第二虛擬機(jī)的數(shù)量可以為多個(gè)的原因是:當(dāng)有多個(gè)客戶端要讀取待寫(xiě)數(shù)據(jù)時(shí),可通過(guò)多個(gè)第二虛擬機(jī)進(jìn)行讀取,提高客戶端讀取待寫(xiě)數(shù)據(jù)的效率。另外,第二虛擬機(jī)得到第一虛擬機(jī)發(fā)送的該待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)后,可以直接從分布式塊存儲(chǔ)系統(tǒng)讀取該待寫(xiě)數(shù)據(jù),避免現(xiàn)有技術(shù)在第一虛擬機(jī)出現(xiàn)故障而無(wú)法讀取該待寫(xiě)數(shù)據(jù)的情況。
根據(jù)本發(fā)明實(shí)施例中對(duì)第一虛擬機(jī)的數(shù)量的限制,名稱(chēng)節(jié)點(diǎn)發(fā)送給客戶端的響應(yīng)消息中可僅指示第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,而不必指示第二虛擬機(jī)的權(quán)限,其原因是:由于多個(gè)虛擬機(jī)中僅有一個(gè)虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,當(dāng)響應(yīng)消息中指示了多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,那么多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)即默認(rèn)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
可選地,響應(yīng)消息還指示第二虛擬機(jī)具有從所存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
S302中,響應(yīng)消息指示的第一虛擬機(jī)的權(quán)限和第二虛擬機(jī)的權(quán)限僅針對(duì)待寫(xiě)數(shù)據(jù)。第一虛擬機(jī)與第二虛擬機(jī)共享寫(xiě)入待寫(xiě)數(shù)據(jù)的存儲(chǔ)區(qū)域。比如,在將待寫(xiě)數(shù)據(jù)1存儲(chǔ)到分布式文件系統(tǒng)時(shí),響應(yīng)消息指示虛擬機(jī)1為第一虛擬機(jī),虛擬機(jī)2為第二虛擬機(jī),虛擬機(jī)1將待寫(xiě)數(shù)據(jù)1寫(xiě)入虛擬機(jī)1的存儲(chǔ)區(qū)域1中,然后將待寫(xiě)數(shù)據(jù)1的元數(shù)據(jù)發(fā)送給虛擬機(jī)2,其中,虛擬機(jī)2與虛擬機(jī)1共享存儲(chǔ)區(qū)域1;在將待寫(xiě)數(shù)據(jù)2存儲(chǔ)到分布式文件系統(tǒng)時(shí),響應(yīng)消息指示虛擬機(jī)1為第一虛擬機(jī),虛擬機(jī)3為第二虛擬機(jī),虛擬機(jī)1將待寫(xiě)數(shù)據(jù)2寫(xiě)入虛擬機(jī)1的存儲(chǔ)區(qū)域2中,然后將待寫(xiě)數(shù)據(jù)2的元數(shù)據(jù)發(fā)送給虛擬機(jī)3,其中,虛擬機(jī)3與虛擬機(jī)1共享存儲(chǔ)區(qū)域2。
S303:客戶端根據(jù)第一虛擬機(jī)的地址向第一虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)和第二虛擬機(jī)的地址。
其中,客戶端向第一虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)和第二虛擬機(jī)的地址是用于指示第一虛擬機(jī)寫(xiě)入待寫(xiě)數(shù)據(jù)、生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)、以及根據(jù)第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
S304:第一虛擬機(jī)向多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù),并生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
其中,待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)可用于第一虛擬機(jī)和第二虛擬機(jī)根據(jù)該元數(shù)據(jù)從多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù);待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)包括但不限于:待寫(xiě)數(shù)據(jù)的存儲(chǔ)位置、待寫(xiě)數(shù)據(jù)的名稱(chēng)以及待寫(xiě)數(shù)據(jù)的目錄。
S305:第一虛擬機(jī)根據(jù)第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送生成或更新的元數(shù)據(jù)。
需要說(shuō)明的是,分布式文件系統(tǒng)一般可包括客戶端,也可不包括客戶端。若分布式文件系統(tǒng)包括客戶端,客戶端的數(shù)量包括但不限于一個(gè)。本發(fā)明實(shí)施例中,為了更清楚地描述客戶端、名稱(chēng)節(jié)點(diǎn)、第一虛擬機(jī)和第二虛擬機(jī)之間的交互,將客戶端包括在分布式文件系統(tǒng)中。實(shí)際實(shí)現(xiàn)時(shí),分布式文件系統(tǒng)也可不包括客戶端,此時(shí)本發(fā)明實(shí)施例可視為客戶端和分布式文件系統(tǒng)的交互。
可選地,分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),該虛擬硬盤(pán)包括多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域。
采用圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法,由于分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,因而在分布式文件系統(tǒng)中,該待寫(xiě)數(shù)據(jù)只在該存儲(chǔ)區(qū)域中存儲(chǔ)一份。對(duì)于待寫(xiě)數(shù)據(jù)來(lái)說(shuō),僅會(huì)由于分布式塊存儲(chǔ)系統(tǒng)采用的文件副本機(jī)制而保存多份,而不存在由于分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)均采用文件副本機(jī)制而導(dǎo)致的保存的文件份數(shù)冗余的問(wèn)題。
此外,由于在圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中,分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)中的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。因而,分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),使分布式文件系統(tǒng)的可用性得到了提高,同時(shí)也避免了現(xiàn)有技術(shù)中采用虛擬機(jī)熱備機(jī)制時(shí)存在的資源浪費(fèi)問(wèn)題。
為了更形象地解釋圖3所示方法如何解決存儲(chǔ)文件份數(shù)冗余問(wèn)題、同時(shí)提高系統(tǒng)的可用性,現(xiàn)將圖3所示方法應(yīng)用在分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)中加以說(shuō)明。采用圖3所示方法的分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)可如圖4所示。圖4所示的分布式文件系統(tǒng)包含第一虛擬機(jī)、第二虛擬機(jī)、客戶端和名稱(chēng)節(jié)點(diǎn)。實(shí)際實(shí)現(xiàn)時(shí),對(duì)第二虛擬機(jī)的數(shù)量和客戶端的數(shù)量不做限制。圖4所示的分布式塊存儲(chǔ)系統(tǒng)包含三個(gè)物理服務(wù)器,每個(gè)物理服務(wù)器包含兩個(gè)物理硬盤(pán)。
其中,第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。由于第一虛擬機(jī)和第二虛擬機(jī)共享同一存儲(chǔ)區(qū)域,可視為第一虛擬機(jī)和第二虛擬共享同一個(gè)虛擬硬盤(pán)1,第一虛擬機(jī)可向虛擬硬盤(pán)1中寫(xiě)入待寫(xiě)數(shù)據(jù),第二虛擬機(jī)可從虛擬硬盤(pán)1中讀取待寫(xiě)數(shù)據(jù)。因而待寫(xiě)數(shù)據(jù)在分布式文件系統(tǒng)中僅存儲(chǔ)了一份,即存儲(chǔ)在虛擬硬盤(pán)1中,待寫(xiě)數(shù)據(jù)在分布式塊存儲(chǔ)系統(tǒng)中可以存儲(chǔ)三份,例如分別存儲(chǔ)在物理服務(wù)器1的物理硬盤(pán)1、物理服務(wù)器2的物理硬盤(pán)3和物理服務(wù)器3的物理硬盤(pán)5上。這樣,待寫(xiě)數(shù)據(jù)在物理硬盤(pán)中僅保存了三份。圖2所示的分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)中同一個(gè)文件在物理硬盤(pán)中保存了六份,相比之下,采用圖3所示方法后,圖4所示的分布式文件系統(tǒng)和分布式塊存儲(chǔ)系統(tǒng)中待寫(xiě)數(shù)據(jù)僅在物理硬盤(pán)中保存了三份,從而大大減少了文件保存的份數(shù),解決了分布式文件系統(tǒng)中保存的文件份數(shù)冗余的問(wèn)題。
此外,在圖4中,第一虛擬機(jī)可用于寫(xiě)入待寫(xiě)數(shù)據(jù)和讀取待寫(xiě)數(shù)據(jù),第二虛擬機(jī)可用于讀取待寫(xiě)數(shù)據(jù),因而當(dāng)其中某個(gè)虛擬機(jī)發(fā)生故障時(shí),可由另一個(gè)未發(fā)生故障的虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),提高了系統(tǒng)的可用性。
進(jìn)一步地,第二虛擬機(jī)在接收到第一虛擬機(jī)發(fā)送的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)之后,是否需要生成或更新自身的操作系統(tǒng)中記錄的文件信息可分為以下兩種情況:
第一種情況
若第一虛擬機(jī)向多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)時(shí)是通過(guò)第一虛擬機(jī)的操作系統(tǒng)寫(xiě)入的,并且客戶端通過(guò)第二虛擬機(jī)讀取待寫(xiě)數(shù)據(jù)也需要通過(guò)第二虛擬機(jī)的操作系統(tǒng)讀取,此時(shí),第二虛擬機(jī)需要根據(jù)待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)生成或更新自身的操作系統(tǒng)中記錄的文件信息,才能實(shí)現(xiàn)第二虛擬機(jī)的操作系統(tǒng)從該存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。其中,該文件信息用于第二虛擬機(jī)的操作系統(tǒng)從存儲(chǔ)區(qū)域中讀取所述待寫(xiě)數(shù)據(jù)。更新第二虛擬機(jī)的操作系統(tǒng)中的文件信息的方式可以有兩種;第一種,如果第二虛擬機(jī)的操作系統(tǒng)能夠獲知存儲(chǔ)區(qū)域中數(shù)據(jù)的變化,則可以自己更新該待寫(xiě)數(shù)據(jù)的文件信息;第二種,第二虛擬機(jī)的操作系統(tǒng)能根據(jù)第一虛擬機(jī)發(fā)送的該待寫(xiě)數(shù)據(jù)的元數(shù)據(jù),更新該待寫(xiě)數(shù)據(jù)的文件信息。
第二種情況
當(dāng)?shù)谝惶摂M機(jī)向多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)時(shí)是直接寫(xiě)入該存儲(chǔ)區(qū)域,而不是通過(guò)第一虛擬機(jī)的操作系統(tǒng)寫(xiě)入時(shí),客戶端可以通過(guò)第二虛擬機(jī)直接讀取該共享的存儲(chǔ)區(qū)域中的待寫(xiě)數(shù)據(jù),而不需要通過(guò)第二虛擬機(jī)的操作系統(tǒng)讀取。此時(shí),第二虛擬機(jī)不需要根據(jù)待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)生成或更新自身的操作系統(tǒng)中記錄的文件信息,第二虛擬機(jī)僅根據(jù)待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)即可從該存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
在S302中,名稱(chēng)節(jié)點(diǎn)需要通過(guò)相應(yīng)消息指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī),即通過(guò)如上S302的操作后,客戶端不僅可以獲取第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,還可以獲知第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。名稱(chēng)節(jié)點(diǎn)向客戶端通知第一虛擬機(jī)和第二虛擬機(jī)的權(quán)限的方式包括但不限于以下兩種:
第一種方式
在執(zhí)行S302中,名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送的響應(yīng)消息還包括第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)和第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限??蛻舳烁鶕?jù)寫(xiě)權(quán)限標(biāo)識(shí)和讀權(quán)限標(biāo)識(shí)獲知第一虛擬機(jī)和第二虛擬機(jī)的權(quán)限,并將寫(xiě)權(quán)限標(biāo)識(shí)發(fā)送給第一虛擬機(jī),將讀權(quán)限標(biāo)識(shí)發(fā)送給第二虛擬機(jī),即將多個(gè)虛擬機(jī)各自的權(quán)限下發(fā)給相應(yīng)的虛擬機(jī)。
其中,客戶端將寫(xiě)權(quán)限標(biāo)識(shí)發(fā)送給第一虛擬機(jī)的過(guò)程可以在執(zhí)行S303之前,也可以在執(zhí)行S303之后,也可以與S303同時(shí)執(zhí)行,即同時(shí)將寫(xiě)權(quán)限標(biāo)識(shí)、待寫(xiě)數(shù)據(jù)和第二虛擬機(jī)的地址發(fā)送給第一虛擬機(jī)。本發(fā)明實(shí)施例對(duì)這兩個(gè)步驟的執(zhí)行順序不做限制。類(lèi)似地,客戶端可以將讀權(quán)限標(biāo)識(shí)發(fā)送給第二虛擬機(jī)。
第二種方式
在響應(yīng)消息中第一虛擬機(jī)的地址和第二虛擬機(jī)的地址按照預(yù)設(shè)規(guī)則排列,預(yù)設(shè)規(guī)則用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,以及指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
其中,預(yù)設(shè)規(guī)則可以是響應(yīng)消息包括的虛擬機(jī)的地址的順序。比如,名稱(chēng)節(jié)點(diǎn)和客戶端可以事先約定:名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送的第一個(gè)地址為第一虛擬機(jī)的地址,那么客戶端在接收到響應(yīng)消息包括的多個(gè)虛擬機(jī)的地址后,可以確定第一個(gè)地址為具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的第一虛擬機(jī)的地址,其余的地址為具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限的第二虛擬機(jī)的地址。
前面已經(jīng)提到,由于分布式文件系統(tǒng)中可用于為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù)的虛擬機(jī)的數(shù)量為多個(gè)。當(dāng)某個(gè)虛擬機(jī)發(fā)生故障時(shí),可以由其他虛擬機(jī)為客戶端提供讀寫(xiě)待寫(xiě)數(shù)據(jù)的服務(wù),從而提高了分布式文件系統(tǒng)的可用性。下面將對(duì)分布式文件系統(tǒng)的虛擬機(jī)發(fā)生故障后如何操作做詳細(xì)解釋。
在分布式文件系統(tǒng)中,檢測(cè)到虛擬機(jī)發(fā)生故障的方式包括但不限于以下三種:第一種,名稱(chēng)節(jié)點(diǎn)檢測(cè)到某個(gè)虛擬機(jī)發(fā)生故障;第二種,客戶端通過(guò)某個(gè)虛擬機(jī)讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)時(shí),若無(wú)法完成數(shù)據(jù)讀寫(xiě)過(guò)程,則確定該虛擬機(jī)發(fā)生故障,客戶端將該虛擬機(jī)發(fā)生故障的消息上報(bào)給名稱(chēng)節(jié)點(diǎn);第三種,虛擬機(jī)會(huì)定期進(jìn)行自檢,當(dāng)某個(gè)虛擬機(jī)發(fā)現(xiàn)自身發(fā)生故障時(shí),會(huì)將自身發(fā)生故障的消息直接上報(bào)給名稱(chēng)節(jié)點(diǎn),或者通過(guò)客戶端上報(bào)給名稱(chēng)節(jié)點(diǎn)。因此,當(dāng)分布式文件系統(tǒng)中的某個(gè)虛擬機(jī)發(fā)生故障時(shí),名稱(chēng)節(jié)點(diǎn)可以上述三種途徑獲知該虛擬機(jī)發(fā)生故障的消息,繼而可采取相應(yīng)操作,避免出現(xiàn)分布式文件系統(tǒng)無(wú)法為客戶端提供數(shù)據(jù)讀寫(xiě)服務(wù)的情況。
本發(fā)明實(shí)施例中,分布式文件系統(tǒng)的虛擬機(jī)發(fā)生故障可分為以下兩種情況:
第一種情況:第一虛擬機(jī)發(fā)生故障
當(dāng)?shù)谝惶摂M機(jī)發(fā)生故障時(shí),名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送第一更新消息,該第一更新消息包括更新的第一虛擬機(jī)的地址,該第一更新消息指定多個(gè)虛擬機(jī)中除發(fā)生故障的第一虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第一虛擬機(jī),即指示更新的第一虛擬機(jī)具有向多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限;因而,客戶端需要寫(xiě)入數(shù)據(jù)待寫(xiě)時(shí),可以通過(guò)更新的第一虛擬機(jī)寫(xiě)入。
采用這種方法,當(dāng)?shù)谝惶摂M機(jī)發(fā)生故障時(shí),名稱(chēng)節(jié)點(diǎn)指定多個(gè)虛擬機(jī)中除發(fā)生故障的第一虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第一虛擬機(jī),即指示更新的第一虛擬機(jī)具有向多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限,那么當(dāng)客戶端要寫(xiě)入數(shù)據(jù)時(shí)可通過(guò)更新的第一虛擬機(jī)寫(xiě)入,當(dāng)客戶端要讀取數(shù)據(jù)時(shí),可通過(guò)第二虛擬機(jī)讀取或者通過(guò)更新的第一虛擬機(jī)讀取。
綜上,采用這種方法,在第一虛擬機(jī)發(fā)生故障時(shí)不會(huì)影響客戶端寫(xiě)入或讀取數(shù)據(jù),提高了系統(tǒng)的可用性。
如前所述,第二虛擬機(jī)的數(shù)量可以是一個(gè)或者多個(gè),當(dāng)?shù)诙摂M機(jī)的數(shù)量為一個(gè)時(shí),若第一虛擬機(jī)發(fā)生故障,則在執(zhí)行上述方法之后還可以進(jìn)一步地執(zhí)行如下方法:名稱(chēng)節(jié)點(diǎn)在分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)之外指定一個(gè)或多個(gè)更新的第二虛擬機(jī),更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限,更新的第二虛擬機(jī)與分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;名稱(chēng)節(jié)點(diǎn)向客戶端指示更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限??蛻舳私邮盏矫Q(chēng)節(jié)點(diǎn)的指示后,通知更新的第一虛擬機(jī):將待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)發(fā)送給更新的第二虛擬機(jī)。這樣,客戶端要讀取待寫(xiě)數(shù)據(jù)時(shí),不僅可以通過(guò)第二虛擬機(jī)讀取,還可通過(guò)更新的第二虛擬機(jī)讀取。
名稱(chēng)節(jié)點(diǎn)在分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)之外指定更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限,當(dāng)存在多個(gè)客戶端需要讀取待寫(xiě)數(shù)據(jù)時(shí),客戶端不僅可以通過(guò)第二虛擬機(jī)讀取,還可以通過(guò)更新的第二虛擬機(jī)讀取,提高了客戶端讀取待寫(xiě)數(shù)據(jù)的效率。
第二種情況:第二虛擬機(jī)發(fā)生故障
當(dāng)?shù)诙摂M機(jī)發(fā)生故障時(shí),名稱(chēng)節(jié)點(diǎn)向客戶端發(fā)送第二更新信息,第二更新信息包括更新的第二虛擬機(jī)的地址,第二更新信息指定多個(gè)虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第二虛擬機(jī),更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。其中,更新的第二虛擬機(jī)與分布式文件系統(tǒng)包括的多個(gè)虛擬機(jī)共享上述同一存儲(chǔ)區(qū)域。名稱(chēng)節(jié)點(diǎn)向客戶端指示更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限后,客戶端根據(jù)名稱(chēng)節(jié)點(diǎn)的指示通知第一虛擬機(jī):將待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)發(fā)送給更新的第二虛擬機(jī)。
其中,第一虛擬機(jī)在接收到客戶端發(fā)送的通知消息后可根據(jù)通知消息的指示將待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)發(fā)送給更新的第二虛擬機(jī)。這樣,客戶端要讀取待寫(xiě)數(shù)據(jù)時(shí),不僅可以通過(guò)未發(fā)生故障的第二虛擬機(jī)讀取或通過(guò)第一虛擬機(jī)讀取,還可通過(guò)更新的第二虛擬機(jī)讀取。
采用這種方法,當(dāng)?shù)诙摂M機(jī)發(fā)生故障時(shí),名稱(chēng)節(jié)點(diǎn)指定更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限,那么當(dāng)客戶端要寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí)可通過(guò)第一虛擬機(jī)寫(xiě)入,當(dāng)客戶端要讀取待寫(xiě)數(shù)據(jù)時(shí),不僅可通過(guò)第一虛擬機(jī)和未發(fā)生故障的第二虛擬機(jī)讀取,也可以通過(guò)更新的第二虛擬機(jī)讀取。綜上,采用這種方法,在第一虛擬機(jī)發(fā)生故障時(shí)不會(huì)影響客戶端寫(xiě)入或讀取待寫(xiě)數(shù)據(jù),提高了系統(tǒng)的可用性。
采用本發(fā)明實(shí)施例提供的分布式文件系統(tǒng)中存儲(chǔ)文件的方法,可以解決分布式文件系統(tǒng)中存儲(chǔ)的文件份數(shù)冗余的問(wèn)題。此外,當(dāng)分布式文件系統(tǒng)中的某個(gè)虛擬機(jī)發(fā)生故障時(shí),采用本發(fā)明實(shí)施例提供的分布式文件系統(tǒng)中存儲(chǔ)文件的方法不會(huì)影響客戶端讀取或?qū)懭胛募?,提高了系統(tǒng)的可用性。
本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中的第一虛擬機(jī),該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域,第一虛擬機(jī)為多個(gè)虛擬機(jī)中被名稱(chēng)節(jié)點(diǎn)指定具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī)。如圖5所示,該第一虛擬機(jī)500包括:
接收模塊501,用于接收客戶端發(fā)送的待寫(xiě)數(shù)據(jù)、第二虛擬機(jī)的地址,第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī);
處理模塊502,用于向存儲(chǔ)區(qū)域?qū)懭虢邮漳K501接收的待寫(xiě)數(shù)據(jù),并生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù);
發(fā)送模塊503,用于根據(jù)接收模塊501接收的第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送處理模塊502生成或更新元數(shù)據(jù)。
可選地,接收模塊501還用于:在處理模塊502向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)之前,接收客戶端發(fā)送的第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)。
其中,寫(xiě)權(quán)限標(biāo)識(shí)是名稱(chēng)節(jié)點(diǎn)在客戶端向名稱(chēng)節(jié)點(diǎn)請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí)向客戶端發(fā)送的,寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限。
可選地,多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
可選地,若第二虛擬機(jī)通過(guò)自身的操作系統(tǒng)讀取待寫(xiě)數(shù)據(jù),則元數(shù)據(jù)用于第二虛擬機(jī)生成或更新自身的操作系統(tǒng)中記錄的文件信息,文件信息用于操作系統(tǒng)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù);或者若第二虛擬機(jī)讀取待寫(xiě)數(shù)據(jù),則元數(shù)據(jù)用于第二虛擬機(jī)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
可選地,第二虛擬機(jī)被名稱(chēng)節(jié)點(diǎn)指定具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用本發(fā)明實(shí)施例提供的第一虛擬機(jī)500,可以解決分布式文件系統(tǒng)中存儲(chǔ)的文件份數(shù)冗余的問(wèn)題。此外,當(dāng)分布式文件系統(tǒng)中的某個(gè)虛擬機(jī)發(fā)生故障時(shí),通過(guò)本發(fā)明實(shí)施例提供的第一虛擬機(jī)500的操作,可以使得虛擬機(jī)的故障不會(huì)影響客戶端讀取或?qū)懭胛募岣吡讼到y(tǒng)的可用性。
需要說(shuō)明的是本發(fā)明實(shí)施例提供的第一虛擬機(jī)500可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中第一虛擬機(jī)執(zhí)行的操作,第一虛擬機(jī)500未詳細(xì)解釋和描述的實(shí)現(xiàn)方式可參考圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中的相關(guān)描述。
需要說(shuō)明的是,本發(fā)明實(shí)施例中對(duì)模塊的劃分是示意性的,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式。另外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能模塊可以集成在一個(gè)處理模塊中,也可以是各個(gè)模塊單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上模塊集成在一個(gè)模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。
基于以上實(shí)施例,本發(fā)明實(shí)施例還提供了一種第一虛擬機(jī),該第一虛擬機(jī)可以執(zhí)行圖3對(duì)應(yīng)的實(shí)施例提供的方法,可以與圖5所示的第一虛擬機(jī)500相同。
參見(jiàn)圖6,第一虛擬機(jī)600所在的設(shè)備包括至少一個(gè)處理器601、存儲(chǔ)器602和通信接口603;所述至少一個(gè)處理器601、所述存儲(chǔ)器602和所述通信接口603均通過(guò)總線604連接;
所述存儲(chǔ)器602,用于存儲(chǔ)計(jì)算機(jī)執(zhí)行指令;
所述至少一個(gè)處理器601,用于執(zhí)行所述存儲(chǔ)器602存儲(chǔ)的計(jì)算機(jī)執(zhí)行指令,使得所述第一虛擬機(jī)600通過(guò)所述通信接口603與分布式文件系統(tǒng)中的其它設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)執(zhí)行上述實(shí)施例提供的分布式文件系統(tǒng)中存儲(chǔ)文件的方法,或者使得所述第一虛擬機(jī)600通過(guò)所述通信接口603與分布式文件系統(tǒng)中的其它設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)實(shí)現(xiàn)分布式文件系統(tǒng)的部分或者全部功能。
至少一個(gè)處理器601,可以包括不同類(lèi)型的處理器601,或者包括相同類(lèi)型的處理器601;處理器601可以是以下的任一種:中央處理器(Central Processing Unit,簡(jiǎn)稱(chēng)CPU)、ARM處理器、現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array,簡(jiǎn)稱(chēng)FPGA)、專(zhuān)用處理器等具有計(jì)算處理能力的器件。一種可選實(shí)施方式,所述至少一個(gè)處理器601還可以集成為眾核處理器。
存儲(chǔ)器602可以是以下的任一種或任一種組合:隨機(jī)存取存儲(chǔ)器(Random Access Memory,簡(jiǎn)稱(chēng)RAM)、只讀存儲(chǔ)器(read only memory,簡(jiǎn)稱(chēng)ROM)、非易失性存儲(chǔ)器(non-volatile memory,簡(jiǎn)稱(chēng)NVM)、固態(tài)硬盤(pán)(Solid State Drives,簡(jiǎn)稱(chēng)SSD)、機(jī)械硬盤(pán)、磁盤(pán)、磁盤(pán)陣列等存儲(chǔ)介質(zhì)。
通信接口603用于第一虛擬機(jī)600與其他設(shè)備(例如分布式文件系統(tǒng)中的其他設(shè)備)進(jìn)行數(shù)據(jù)交互。通信接口603可以是以下的任一種或任一種組合:網(wǎng)絡(luò)接口(例如以太網(wǎng)接口)、無(wú)線網(wǎng)卡等具有網(wǎng)絡(luò)接入功能的器件。
該總線604可以包括地址總線、數(shù)據(jù)總線、控制總線等,為便于表示,圖6用一條粗線表示該總線??偩€604可以是以下的任一種或任一種組合:工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(Industry Standard Architecture,簡(jiǎn)稱(chēng)ISA)總線、外設(shè)組件互連標(biāo)準(zhǔn)(Peripheral Component Interconnect,簡(jiǎn)稱(chēng)PCI)總線、擴(kuò)展工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(Extended Industry Standard Architecture,簡(jiǎn)稱(chēng)EISA)總線等有線數(shù)據(jù)傳輸?shù)钠骷?/p>
本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中的名稱(chēng)節(jié)點(diǎn),該分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;如圖7所示,名稱(chēng)節(jié)點(diǎn)700包括:
接收模塊701,用于接收客戶端請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)的請(qǐng)求消息;
發(fā)送模塊702,用于向客戶端發(fā)送接收模塊701接收的請(qǐng)求消息對(duì)應(yīng)的響應(yīng)消息,響應(yīng)消息包括第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,響應(yīng)消息指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī)。
可選地,響應(yīng)消息還指示第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
可選地,響應(yīng)消息還包括第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)和第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
可選地,響應(yīng)消息中第一虛擬機(jī)的地址和第二虛擬機(jī)的地址按照預(yù)設(shè)規(guī)則排列,預(yù)設(shè)規(guī)則用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,以及指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
可選地,多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
可選地,發(fā)送模塊702還用于:當(dāng)?shù)谝惶摂M機(jī)發(fā)生故障時(shí),向客戶端發(fā)送第一更新信息,第一更新信息包括更新的第一虛擬機(jī)的地址,第一更新信息指定多個(gè)虛擬機(jī)中除發(fā)生故障的第一虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第一虛擬機(jī),更新的第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限;和/或當(dāng)?shù)诙摂M機(jī)發(fā)生故障時(shí),向客戶端發(fā)送第二更新信息,第二更新信息包括更新的第二虛擬機(jī)的地址,第二更新信息指定多個(gè)虛擬機(jī)以外的另一個(gè)虛擬機(jī)作為更新的第二虛擬機(jī),更新的第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用本發(fā)明實(shí)施例提供的名稱(chēng)節(jié)點(diǎn)700,可以解決分布式文件系統(tǒng)中存儲(chǔ)的文件份數(shù)冗余的問(wèn)題。此外,當(dāng)分布式文件系統(tǒng)中的某個(gè)虛擬機(jī)發(fā)生故障時(shí),通過(guò)本發(fā)明實(shí)施例提供的名稱(chēng)節(jié)點(diǎn)700的操作,可以使得虛擬機(jī)的故障不會(huì)影響客戶端讀取或?qū)懭胛募?,提高了系統(tǒng)的可用性。
需要說(shuō)明的是本發(fā)明實(shí)施例提供的名稱(chēng)節(jié)點(diǎn)700可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中名稱(chēng)節(jié)點(diǎn)執(zhí)行的操作,名稱(chēng)節(jié)點(diǎn)700未詳細(xì)解釋和描述的實(shí)現(xiàn)方式可參考圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中的相關(guān)描述。
基于以上實(shí)施例,本發(fā)明實(shí)施例還提供了一種名稱(chēng)節(jié)點(diǎn),該名稱(chēng)節(jié)點(diǎn)可執(zhí)行圖3對(duì)應(yīng)的實(shí)施例提供的方法,可以與圖7所示的名稱(chēng)節(jié)點(diǎn)700相同。
參見(jiàn)圖8,名稱(chēng)節(jié)點(diǎn)800包括至少一個(gè)處理器801、存儲(chǔ)器802和通信接口803;所述至少一個(gè)處理器801、所述存儲(chǔ)器802和所述通信接口803均通過(guò)總線804連接;
所述存儲(chǔ)器802,用于存儲(chǔ)計(jì)算機(jī)執(zhí)行指令;
所述至少一個(gè)處理器801,用于執(zhí)行所述存儲(chǔ)器802存儲(chǔ)的計(jì)算機(jī)執(zhí)行指令,使得所述名稱(chēng)節(jié)點(diǎn)800通過(guò)所述通信接口803與分布式文件系統(tǒng)中的其它設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)執(zhí)行上述實(shí)施例提供的分布式文件系統(tǒng)中存儲(chǔ)文件的方法,或者使得所述名稱(chēng)節(jié)點(diǎn)800通過(guò)所述通信接口803與分布式文件系統(tǒng)中的其它設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)實(shí)現(xiàn)分布式文件系統(tǒng)的部分或者全部功能。
至少一個(gè)處理器801,可以包括不同類(lèi)型的處理器801,或者包括相同類(lèi)型的處理器801;處理器801可以是以下的任一種:CPU、ARM處理器、FPGA、專(zhuān)用處理器等具有計(jì)算處理能力的器件。一種可選實(shí)施方式,所述至少一個(gè)處理器801還可以集成為眾核處理器。
存儲(chǔ)器802可以是以下的任一種或任一種組合:RAM、ROM、NVM、SSD、機(jī)械硬盤(pán)、磁盤(pán)、磁盤(pán)陣列等存儲(chǔ)介質(zhì)。
通信接口803用于名稱(chēng)節(jié)點(diǎn)800與其他設(shè)備(例如分布式文件系統(tǒng)中的其他設(shè)備)進(jìn)行數(shù)據(jù)交互。通信接口803可以是以下的任一種或任一種組合:網(wǎng)絡(luò)接口(例如以太網(wǎng)接口)、無(wú)線網(wǎng)卡等具有網(wǎng)絡(luò)接入功能的器件。
該總線804可以包括地址總線、數(shù)據(jù)總線、控制總線等,為便于表示,圖8用一條粗線表示該總線??偩€804可以是以下的任一種或任一種組合:ISA總線、PCI總線、EISA總線等有線數(shù)據(jù)傳輸?shù)钠骷?/p>
本發(fā)明實(shí)施例提供一種客戶端,該客戶端所在的分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;如圖9所示,客戶端900包括:
發(fā)送模塊901,用于向名稱(chēng)節(jié)點(diǎn)發(fā)送請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)的請(qǐng)求消息;
接收模塊902,用于接收名稱(chēng)節(jié)點(diǎn)發(fā)送的請(qǐng)求消息對(duì)應(yīng)的響應(yīng)消息,響應(yīng)消息包括第一虛擬機(jī)的地址和第二虛擬機(jī)的地址,響應(yīng)消息指示第一虛擬機(jī)為多個(gè)虛擬機(jī)中具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī);
發(fā)送模塊901,還用于根據(jù)接收模塊902接收的響應(yīng)消息包括的第一虛擬機(jī)的地址向第一虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)、第二虛擬機(jī)的地址,并指示第一虛擬機(jī)寫(xiě)入待寫(xiě)數(shù)據(jù)、生成或更新待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)、以及根據(jù)接收模塊902接收的響應(yīng)消息包括的第二虛擬機(jī)的地址向第二虛擬機(jī)發(fā)送待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
可選地,響應(yīng)消息還包括第一虛擬機(jī)的寫(xiě)權(quán)限標(biāo)識(shí)和第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),寫(xiě)權(quán)限標(biāo)識(shí)用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
可選地,響應(yīng)消息包括的第一虛擬機(jī)的地址和第二虛擬機(jī)的地址按照預(yù)設(shè)規(guī)則排列,預(yù)設(shè)規(guī)則用于指定第一虛擬機(jī)具有向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)的權(quán)限以及指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
可選地,多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
可選地,響應(yīng)消息還指示第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用本發(fā)明實(shí)施例提供的客戶端900,可以解決分布式文件系統(tǒng)中存儲(chǔ)的文件份數(shù)冗余的問(wèn)題。此外,當(dāng)分布式文件系統(tǒng)中的某個(gè)虛擬機(jī)發(fā)生故障時(shí),通過(guò)本發(fā)明實(shí)施例提供的客戶端900的操作,可以使得虛擬機(jī)的故障不會(huì)影響客戶端讀取或?qū)懭胛募?,提高了系統(tǒng)的可用性。
需要說(shuō)明的是本發(fā)明實(shí)施例提供的客戶端900可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中客戶端執(zhí)行的操作,客戶端900未詳細(xì)解釋和描述的實(shí)現(xiàn)方式可參考圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中的相關(guān)描述。
基于以上實(shí)施例,本發(fā)明實(shí)施例還提供了一種客戶端,該客戶端可以執(zhí)行圖3對(duì)應(yīng)的實(shí)施例提供的方法,可以與圖9所示的客戶端900相同。
參見(jiàn)圖10,客戶端1000所在的設(shè)備包括至少一個(gè)處理器1001、存儲(chǔ)器1002和通信接口1003;所述至少一個(gè)處理器1001、所述存儲(chǔ)器1002和所述通信接口1003均通過(guò)總線1004連接;
所述存儲(chǔ)器1002,用于存儲(chǔ)計(jì)算機(jī)執(zhí)行指令;
所述至少一個(gè)處理器1001,用于執(zhí)行所述存儲(chǔ)器1002存儲(chǔ)的計(jì)算機(jī)執(zhí)行指令,使得所述客戶端1000通過(guò)所述通信接口1003與分布式文件系統(tǒng)中的設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)執(zhí)行上述實(shí)施例提供的分布式文件系統(tǒng)中存儲(chǔ)文件的方法,或者使得所述客戶端1000通過(guò)所述通信接口1003與分布式文件系統(tǒng)中的設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)實(shí)現(xiàn)分布式文件系統(tǒng)的部分或者全部功能。
至少一個(gè)處理器1001,可以包括不同類(lèi)型的處理器1001,或者包括相同類(lèi)型的處理器1001;處理器1001可以是以下的任一種:CPU、ARM處理器、FPGA、專(zhuān)用處理器等具有計(jì)算處理能力的器件。一種可選實(shí)施方式,所述至少一個(gè)處理器1001還可以集成為眾核處理器。
存儲(chǔ)器1002可以是以下的任一種或任一種組合:RAM、ROM、NVM、SSD、機(jī)械硬盤(pán)、磁盤(pán)、磁盤(pán)陣列等存儲(chǔ)介質(zhì)。
通信接口1003用于客戶端1000與其他設(shè)備(例如分布式文件系統(tǒng)中的其他設(shè)備)進(jìn)行數(shù)據(jù)交互。通信接口1003可以是以下的任一種或任一種組合:網(wǎng)絡(luò)接口(例如以太網(wǎng)接口)、無(wú)線網(wǎng)卡等具有網(wǎng)絡(luò)接入功能的器件。
該總線1004可以包括地址總線、數(shù)據(jù)總線、控制總線等,為便于表示,圖10用一條粗線表示該總線。總線1004可以是以下的任一種或任一種組合:ISA總線、PCI總線、EISA總線等有線數(shù)據(jù)傳輸?shù)钠骷?/p>
本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng)中的第二虛擬機(jī),分布式文件系統(tǒng)包括名稱(chēng)節(jié)點(diǎn)、多個(gè)作為數(shù)據(jù)節(jié)點(diǎn)的虛擬機(jī),多個(gè)虛擬機(jī)共享同一存儲(chǔ)區(qū)域;如圖11所示,第二虛擬機(jī)1100包括:
接收模塊1101,用于接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù),第一虛擬機(jī)為多個(gè)虛擬機(jī)中被名稱(chēng)節(jié)點(diǎn)指定具有向存儲(chǔ)區(qū)域?qū)懭霐?shù)據(jù)的權(quán)限的一個(gè)虛擬機(jī),第二虛擬機(jī)為多個(gè)虛擬機(jī)中除第一虛擬機(jī)以外的虛擬機(jī),元數(shù)據(jù)為第一虛擬機(jī)向存儲(chǔ)區(qū)域?qū)懭氪龑?xiě)數(shù)據(jù)后生成或更新的待寫(xiě)數(shù)據(jù)的元數(shù)據(jù)。
可選地,接收模塊1101還用于:在接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)之前,接收客戶端發(fā)送的第二虛擬機(jī)的讀權(quán)限標(biāo)識(shí),讀權(quán)限標(biāo)識(shí)是名稱(chēng)節(jié)點(diǎn)在客戶端向名稱(chēng)節(jié)點(diǎn)請(qǐng)求向分布式文件系統(tǒng)寫(xiě)入待寫(xiě)數(shù)據(jù)時(shí)向客戶端發(fā)送的,讀權(quán)限標(biāo)識(shí)用于指定第二虛擬機(jī)具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
可選地,多個(gè)虛擬機(jī)掛載分布式塊存儲(chǔ)系統(tǒng)提供的同一虛擬硬盤(pán),虛擬硬盤(pán)包括存儲(chǔ)區(qū)域。
可選地,第二虛擬機(jī)還包括:處理模塊1102,用于在接收模塊1101接收第一虛擬機(jī)發(fā)送的元數(shù)據(jù)之后,若第二虛擬機(jī)通過(guò)自身的操作系統(tǒng)讀取待寫(xiě)數(shù)據(jù),則根據(jù)元數(shù)據(jù)生成或更新自身的操作系統(tǒng)中記錄的文件信息,文件信息用于操作系統(tǒng)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù);或者若第二虛擬機(jī)讀取待寫(xiě)數(shù)據(jù),則根據(jù)元數(shù)據(jù)從存儲(chǔ)區(qū)域中讀取待寫(xiě)數(shù)據(jù)。
可選地,第二虛擬機(jī)被名稱(chēng)節(jié)點(diǎn)指定具有從存儲(chǔ)區(qū)域讀取待寫(xiě)數(shù)據(jù)的權(quán)限。
采用本發(fā)明實(shí)施例提供的第二虛擬機(jī)1100,可以解決分布式文件系統(tǒng)中存儲(chǔ)的文件份數(shù)冗余的問(wèn)題。此外,當(dāng)分布式文件系統(tǒng)中的某個(gè)虛擬機(jī)發(fā)生故障時(shí),通過(guò)本發(fā)明實(shí)施例提供的第二虛擬機(jī)1100的操作,可以使得虛擬機(jī)的故障不會(huì)影響客戶端讀取或?qū)懭胛募?,提高了系統(tǒng)的可用性。
需要說(shuō)明的是本發(fā)明實(shí)施例提供的第二虛擬機(jī)1100可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中第二虛擬機(jī)執(zhí)行的操作,第二虛擬機(jī)1100未詳細(xì)解釋和描述的實(shí)現(xiàn)方式可參考圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中的相關(guān)描述。
基于以上實(shí)施例,本發(fā)明實(shí)施例還提供了一種第二虛擬機(jī),該第二虛擬機(jī)可以執(zhí)行圖3對(duì)應(yīng)的實(shí)施例提供的方法,可以與圖11所示的第二虛擬機(jī)1100相同。
參見(jiàn)圖12,第二虛擬機(jī)1200所在的設(shè)備包括至少一個(gè)處理器1201、存儲(chǔ)器1202和通信接口1203;所述至少一個(gè)處理器1201、所述存儲(chǔ)器1202和所述通信接口1203均通過(guò)總線1204連接;
所述存儲(chǔ)器1202,用于存儲(chǔ)計(jì)算機(jī)執(zhí)行指令;
所述至少一個(gè)處理器1201,用于執(zhí)行所述存儲(chǔ)器1202存儲(chǔ)的計(jì)算機(jī)執(zhí)行指令,使得所述第二虛擬機(jī)1200通過(guò)所述通信接口1203與分布式文件系統(tǒng)中的其它設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)執(zhí)行上述實(shí)施例提供的分布式文件系統(tǒng)中存儲(chǔ)文件的方法,或者使得所述第二虛擬機(jī)1200通過(guò)所述通信接口1203與分布式文件系統(tǒng)中的其它設(shè)備進(jìn)行數(shù)據(jù)交互來(lái)實(shí)現(xiàn)分布式文件系統(tǒng)的部分或者全部功能。
至少一個(gè)處理器1201,可以包括不同類(lèi)型的處理器1201,或者包括相同類(lèi)型的處理器1201;處理器1201可以是以下的任一種:CPU、ARM處理器、FPGA、專(zhuān)用處理器等具有計(jì)算處理能力的器件。一種可選實(shí)施方式,所述至少一個(gè)處理器1201還可以集成為眾核處理器。
存儲(chǔ)器1202可以是以下的任一種或任一種組合:RAM、ROM、NVM、SSD、機(jī)械硬盤(pán)、磁盤(pán)、磁盤(pán)陣列等存儲(chǔ)介質(zhì)。
通信接口1203用于第二虛擬機(jī)1200與其他設(shè)備(例如分布式文件系統(tǒng)中的其他設(shè)備)進(jìn)行數(shù)據(jù)交互。通信接口1203可以是以下的任一種或任一種組合:網(wǎng)絡(luò)接口(例如以太網(wǎng)接口)、無(wú)線網(wǎng)卡等具有網(wǎng)絡(luò)接入功能的器件。
該總線1204可以包括地址總線、數(shù)據(jù)總線、控制總線等,為便于表示,圖12用一條粗線表示該總線??偩€1204可以是以下的任一種或任一種組合:ISA總線、PCI總線、EISA總線等有線數(shù)據(jù)傳輸?shù)钠骷?/p>
本發(fā)明實(shí)施例提供一種分布式文件系統(tǒng),如圖13所示,分布式文件系統(tǒng)1300包括:第一虛擬機(jī)1301、名稱(chēng)節(jié)點(diǎn)1302、客戶端1303和第二虛擬機(jī)1304。
其中,分布式文件系統(tǒng)1300中的第一虛擬機(jī)1301可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中第一虛擬機(jī)所執(zhí)行的相關(guān)操作,其具體實(shí)現(xiàn)形式可以是圖5所示的第一虛擬機(jī)500或圖6所示的第一虛擬機(jī)600;分布式文件系統(tǒng)1300中的名稱(chēng)節(jié)點(diǎn)1302可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中名稱(chēng)節(jié)點(diǎn)所執(zhí)行的相關(guān)操作,其具體實(shí)現(xiàn)形式可以是圖7所示的名稱(chēng)節(jié)點(diǎn)700或圖8所示的名稱(chēng)節(jié)點(diǎn)800;分布式文件系統(tǒng)1300中的客戶端1303可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中客戶端所執(zhí)行的相關(guān)操作,其具體實(shí)現(xiàn)形式可以是圖9所示的客戶端900或圖10所示的客戶端1000;分布式文件系統(tǒng)1300中的第二虛擬機(jī)1304可用于執(zhí)行圖3所示的分布式文件系統(tǒng)中存儲(chǔ)文件的方法中第二虛擬機(jī)所執(zhí)行的相關(guān)操作,其具體實(shí)現(xiàn)形式可以是圖11所示的第二虛擬機(jī)1100或圖12所示的第二虛擬機(jī)1200。
在分布式文件系統(tǒng)1300中,待寫(xiě)數(shù)據(jù)僅在多個(gè)虛擬機(jī)共享的存儲(chǔ)區(qū)域中保存一份,解決了分布式文件系統(tǒng)中存儲(chǔ)的文件份數(shù)冗余的問(wèn)題。此外,當(dāng)分布式文件系統(tǒng)1300中的某個(gè)虛擬機(jī)發(fā)生故障時(shí),客戶端仍可通過(guò)分布式文件系統(tǒng)1300中未發(fā)生故障的虛擬機(jī)對(duì)待寫(xiě)數(shù)據(jù)進(jìn)行寫(xiě)入操作或讀取操作,提高了分布式文件系統(tǒng)的可用性。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明實(shí)施例進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明實(shí)施例的精神和范圍。這樣,倘若本發(fā)明實(shí)施例的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。