元數(shù)據(jù)服務(wù)器失效接替中精確一次執(zhí)行語義的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及元數(shù)據(jù)服務(wù)器失效接替技術(shù)及非冪等操作等領(lǐng)域,特別涉及元數(shù)據(jù)服務(wù)器失效接替中精確一次執(zhí)行語義的方法及系統(tǒng)。
【背景技術(shù)】
[0002]在大規(guī)模機(jī)群文件系統(tǒng)中,元數(shù)據(jù)與數(shù)據(jù)服務(wù)分離結(jié)構(gòu)已經(jīng)成為了一種趨勢,一方面,數(shù)據(jù)訪問不必通過元數(shù)據(jù)服務(wù)器,而是采用帶外方式直接訪問存儲設(shè)備,從而獲取較高的數(shù)據(jù)訪問性能;另一方面,元數(shù)據(jù)服務(wù)器專門提供元數(shù)據(jù)服務(wù),卸載了數(shù)據(jù)訪問負(fù)載,從而單臺元數(shù)據(jù)服務(wù)器可以支持更高的客戶端訪問性能,管理更多的存儲設(shè)備,支持更大的系統(tǒng)規(guī)模擴(kuò)展,然而,隨著系統(tǒng)規(guī)模的不斷擴(kuò)大,單臺元數(shù)據(jù)服務(wù)器逐漸成為制約系統(tǒng)擴(kuò)展的瓶頸,為了進(jìn)一步提升機(jī)群文件系統(tǒng)的擴(kuò)展能力,目前通常采用多個(gè)元數(shù)據(jù)服務(wù)器構(gòu)成元數(shù)據(jù)服務(wù)器機(jī)群,以分散元數(shù)據(jù)負(fù)載,支持通過增加元數(shù)據(jù)服務(wù)器數(shù)量達(dá)到集群文件系統(tǒng)的橫向擴(kuò)展。
[0003]為了保證元數(shù)據(jù)集群的高可用性,通常為每一臺元數(shù)據(jù)服務(wù)器配備一臺備份服務(wù)器,當(dāng)元數(shù)據(jù)服務(wù)器發(fā)生宕機(jī),將宕機(jī)服務(wù)器的元數(shù)據(jù)服務(wù)迀移至備份服務(wù)器,在備份服務(wù)器緩存中恢復(fù)出宕機(jī)服務(wù)器元數(shù)據(jù)信息,接管宕機(jī)服務(wù)器的工作,實(shí)現(xiàn)高可用。元數(shù)據(jù)操作,分為非冪等和冪等操作兩類。非冪等操作的特點(diǎn)是兩次執(zhí)行就會(huì)兩次改變系統(tǒng)狀態(tài),系統(tǒng)就會(huì)處于不一致的狀態(tài),因此在失效接替過程中,我們需要精確恢復(fù)出非冪等操作在宕機(jī)事故發(fā)生時(shí)所執(zhí)行到的進(jìn)度,避免非冪等操作的多次執(zhí)行,使客戶端感受不到宕機(jī)事件的發(fā)生,實(shí)現(xiàn)無縫接替,保證非冪等操作的精確一次執(zhí)行語義;而冪等操作則正好相反,任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。
[0004]根據(jù)宕機(jī)發(fā)生時(shí)元數(shù)據(jù)操作在宕機(jī)服務(wù)器的完成進(jìn)度,將元數(shù)據(jù)操作分為以下五類:
[0005](I)已經(jīng)持久到宕機(jī)服務(wù)器的元數(shù)據(jù)磁盤上,并且客戶端已經(jīng)接收到返回結(jié)果;
[0006](2)已經(jīng)持久到宕機(jī)服務(wù)器的元數(shù)據(jù)磁盤上,但客戶端在收到返回結(jié)果之前,服務(wù)器發(fā)生了宕機(jī),并且該操作是冪等操作,如讀操作;
[0007](3)已經(jīng)持久到宕機(jī)服務(wù)器的元數(shù)據(jù)磁盤上,但客戶端在收到返回結(jié)果之前發(fā)生了宕機(jī),并且該操作是非冪等操作,如刪除操作;
[0008](4)操作還沒有持久到宕機(jī)服務(wù)器的元數(shù)據(jù)磁盤上,客戶端已經(jīng)收到回復(fù)結(jié)果;
[0009](5)操作既沒有持久到宕機(jī)服務(wù)器的元數(shù)據(jù)磁盤上,客戶端也沒收到回復(fù)結(jié)果。
[0010]第⑴類操作,不需要備份服務(wù)器恢復(fù),也不需要客戶端做任何操作;第(5)類操作,也不需要備份服務(wù)器恢復(fù),因?yàn)榭蛻舳嗽谔囟〞r(shí)間間隔內(nèi)沒有收到回復(fù)時(shí),會(huì)重新發(fā)起操作請求,并需要備份服務(wù)器繼續(xù)執(zhí)行返回結(jié)果;備份服務(wù)器也不需要恢復(fù)第(2)類操作,因?yàn)榭蛻舳藭?huì)重新發(fā)起操作請求,備份服務(wù)器會(huì)重新執(zhí)行該操作,而冪等操作的第二次執(zhí)行不會(huì)造成錯(cuò)誤;第(4)類操作,備份服務(wù)器需要恢復(fù)出該操作的參數(shù),并繼續(xù)執(zhí)行該操作,將其持久到磁盤上,不需要擔(dān)心該操作的精確一次執(zhí)行語義,因?yàn)榭蛻舳艘呀?jīng)接收到回復(fù)結(jié)果,不會(huì)再發(fā)起請求,所以該操作只會(huì)被持久到磁盤上一次。
[0011]備份服務(wù)器需要保證精確一次執(zhí)行語義的是第(3)類操作,因?yàn)槿绻蛻舳嗽谝欢〞r(shí)間間隔內(nèi)沒有收到服務(wù)器的回復(fù),就會(huì)重新發(fā)起相同參數(shù)的請求,而對于已經(jīng)持久到磁盤上的非冪等操作,第二次執(zhí)行就會(huì)造成錯(cuò)誤,所以就需要保證備份服務(wù)器在完成接替后,當(dāng)收到客戶端發(fā)來的該類操作的重復(fù)請求時(shí),備份服務(wù)器只需要返回該操作的回復(fù)結(jié)果,而不需要在磁盤上再次執(zhí)行,從而保證了精確一次執(zhí)行語義。
[0012]在服務(wù)器沒有發(fā)生宕機(jī)的情況下,第(3)類操作的精確一次執(zhí)行語義可以由PNFS原有的sess1n機(jī)制保證,sess1n機(jī)制,即PNFS讓每個(gè)狀態(tài)請求攜帶序列號并緩存此類請求的響應(yīng),這意味著每個(gè)狀態(tài)請求必須有一個(gè)緩存響應(yīng)的空間,當(dāng)客戶端啟動(dòng)后,通過EXCHANGE_ID獲取相應(yīng)的服務(wù)器分配的clientID,緊接著,通過CREATE_SESS1N向服務(wù)器確認(rèn)clientID,并在客戶端和服務(wù)器分別建立特定的sess1n,在客戶端和服務(wù)器建立sess1n時(shí),將同時(shí)設(shè)置最大的緩存空間、請求大小、response大小等參數(shù),sess1n由固定個(gè)數(shù)的slot組成,每個(gè)slot由sequenceID、slotID和緩存空間組成,所有的客戶端操作均基于特定sess1n,每個(gè)操作通過三元組(sess1n ID, slot ID, sequence ID)標(biāo)識,服務(wù)器在發(fā)回響應(yīng)之前,將響應(yīng)基本信息或全部信息存于服務(wù)器sess1n的對應(yīng)slot的緩存空間中,若客戶端正確收到響應(yīng),則該緩存槽才可用于其他操作,如果因?yàn)榫W(wǎng)絡(luò)等原因,客戶端沒有正確收到響應(yīng),則當(dāng)客戶端重新發(fā)起請求時(shí),服務(wù)器通過判斷請求的sequencelD與當(dāng)前緩存空間的sequencelD可判斷請求是否為同一請求,如果是,則服務(wù)器只需要將slot的緩存空間中的響應(yīng)信息再次發(fā)送給客戶端,使得一個(gè)請求只會(huì)被執(zhí)行一次,從而保證了操作的精確一次執(zhí)行語義。
[0013]由于PNFS的sess1n只存在于宕機(jī)服務(wù)器的緩存中,發(fā)生宕機(jī)事件后,無法被備份服務(wù)器獲得,因此在發(fā)生宕機(jī)失效接替后,原有的保證精確一次執(zhí)行語義的sess1n機(jī)制不再適用。
[0014]目前,保證在失效接替過程中的非冪等操作的精確一次執(zhí)行語義的方法,僅有Lustre文件系統(tǒng)基于事務(wù)的恢復(fù)機(jī)制。
[0015]客戶端發(fā)送的每個(gè)請求都包含有一個(gè)xid序列號,直到請求被分配一個(gè)事務(wù)序列號(transno)。lustre為每個(gè)引起服務(wù)器狀態(tài)改變的操作分配一個(gè)事務(wù)序列號(transno),它由服務(wù)器進(jìn)行管理,并被捎帶在請求的回復(fù)消息中返回給客戶端。在服務(wù)器中有一個(gè)叫l(wèi)ast_rCVd的日志文件,它以異步的方式記錄服務(wù)器和每個(gè)客戶端的各種信息,包括客戶端的uuid、該客戶端最后提交的事務(wù)序列號(last_transno)、該客戶端最后執(zhí)行請求和最后提交請求的last_xid等信息。當(dāng)服務(wù)器接收到客戶端重傳的請求,對于xid〈 = last_xid的請求,說明它們已經(jīng)在服務(wù)器上執(zhí)行,但回復(fù)消息可能丟失,因此服務(wù)器只需要構(gòu)建回復(fù)消息,返回給客戶端。但是該機(jī)制存在兩方面的問題,一方面元數(shù)據(jù)服務(wù)器端last_rCVd日志文件的更新與所述引起服務(wù)器狀態(tài)改變操作的執(zhí)行為兩個(gè)獨(dú)立的修改,在異常宕機(jī)情況下可能造成磁盤上持久內(nèi)容不一致,因?yàn)闊o法保證所述兩個(gè)獨(dú)立操作的原子性;另一方面,該機(jī)制僅支持客戶端與元數(shù)據(jù)服務(wù)器之間同時(shí)進(jìn)行一次元數(shù)據(jù)交互,不支持并發(fā)的多個(gè)元數(shù)據(jù)交互,影響了系統(tǒng)交互效率。
[0016]發(fā)明專利“一種基于文件級實(shí)時(shí)同步的ParastorfOO管理節(jié)點(diǎn)高可用方法”,該發(fā)明涉及一種基于文件級實(shí)時(shí)同步的Parastor200管理節(jié)點(diǎn)高可用方法,所述方法通過以下兩個(gè)方面實(shí)現(xiàn):(1)管理節(jié)點(diǎn)存儲系統(tǒng)信息的同步;(2)管理節(jié)點(diǎn)故障切換。該發(fā)明通過實(shí)現(xiàn)Parastor200管理節(jié)點(diǎn)的高可用使Parastor200實(shí)現(xiàn)了完全意義上的全冗余設(shè)計(jì),系統(tǒng)中任何部件的損壞不影響存儲系統(tǒng)的使用。管理節(jié)點(diǎn)任何部件的損壞,都可以在數(shù)秒內(nèi)將服務(wù)切換到備用節(jié)點(diǎn)上。這樣既不影響正常使用,又有充足的時(shí)間去修復(fù)故障,該發(fā)明提出了一種基于文件級的實(shí)現(xiàn)Parastor2000系統(tǒng)全冗余的方法,主要是通過節(jié)點(diǎn)信息的實(shí)時(shí)同步,保證在部件損壞時(shí)將服務(wù)切換到備用節(jié)點(diǎn)上,但仍然可能存在非冪等操作的多次執(zhí)行,該發(fā)明不涉及元數(shù)據(jù)服務(wù)器高可用失效接替時(shí)非冪等操作精確一次執(zhí)行保證。
[0017]發(fā)明專利“一種基于分布式塊設(shè)備的ParastorfOO并行存儲管理節(jié)點(diǎn)高可用方法”,該發(fā)明涉及一種基于分布式塊設(shè)備的ParastorfOO管理節(jié)點(diǎn)高可用方法,所述方法通過以下兩個(gè)方面實(shí)現(xiàn):(I)管理節(jié)點(diǎn)存儲系統(tǒng)信息的同步;(2)管理節(jié)點(diǎn)故障切換,該發(fā)明通過實(shí)現(xiàn)Parastor200管理節(jié)點(diǎn)的高可用使Parastor200實(shí)現(xiàn)了完全意義上的全冗余設(shè)計(jì),系統(tǒng)中任何部件的損壞不影響存儲系統(tǒng)的使用,管理節(jié)點(diǎn)任何部件的損壞,都可以在數(shù)秒內(nèi)將服務(wù)切換到備用節(jié)點(diǎn)上,這樣既不影響正常使用,又有充足的時(shí)間去修復(fù)故障,該發(fā)明提出了一種基于分布式塊設(shè)備的實(shí)現(xiàn)ParastorfOOO系統(tǒng)全冗余的方法,主要是將節(jié)點(diǎn)信息實(shí)時(shí)同步到備用節(jié)點(diǎn)上,保證在部件損壞時(shí)將服務(wù)直接切換到備用節(jié)點(diǎn)上。但仍然可能存在非冪等操作的多次執(zhí)行。該發(fā)明不涉及元數(shù)據(jù)服務(wù)器高可用失效接替時(shí)非冪等操作精確