国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      存儲系統(tǒng)中數(shù)據(jù)分發(fā)方法、裝置、計算節(jié)點及存儲系統(tǒng)的制作方法_3

      文檔序號:9754721閱讀:來源:國知局
      /O請求的操作日志數(shù)量,則目標計算節(jié)點將正常存儲節(jié)點的同一數(shù)據(jù)分區(qū)存儲的I/o請求迀移至故障存儲節(jié)點;
      [0101]其中,序列號用于統(tǒng)計分發(fā)到數(shù)據(jù)分區(qū)的修改類I/O請求的數(shù)量,一個數(shù)據(jù)分區(qū)在接收到一個修改類I/o請求后,數(shù)據(jù)分區(qū)的序列號加一。
      [0102]本發(fā)明實施例提供的計算節(jié)點,由于對節(jié)點的計算功能和存儲功能進行了分離部署,使得存儲系統(tǒng)中包括多個計算節(jié)點和多個存儲節(jié)點,因此計算性能和存儲性能不相互制約相互影響,可根據(jù)需要對系統(tǒng)的計算性能和存儲性能進行靈活配置,且計算功能無需依賴存儲功能,軟硬件之間實現(xiàn)了解耦;此外,在計算節(jié)點或存儲節(jié)點發(fā)生故障時,還可根據(jù)數(shù)據(jù)分區(qū)的序列號對計算節(jié)點或存儲節(jié)點管理的數(shù)據(jù)分區(qū)進行迀移,增強了系統(tǒng)的容錯能力。
      [0103]圖4是本發(fā)明實施例提供的一種存儲系統(tǒng)中數(shù)據(jù)分發(fā)方法的流程圖。交互主體為外部節(jié)點、計算節(jié)點和存儲節(jié)點。參見圖4,本發(fā)明實施例提供的方法流程包括:
      [0?04] 401、外部節(jié)點接收用戶生成的一個I/O請求,并根據(jù)第一算法確定處理I/O請求的目標計算節(jié)點。
      [0105]其中,I/O請求通常為只讀類I/O請求或修改類I/O請求。修改類I/O請求指代進行寫操作或修改數(shù)據(jù)操作的I/O請求。本發(fā)明實施例對I/O請求的類型不進行具體限定。處理該I/O請求的目標計算節(jié)點為圖2所示的第一 DHT環(huán)中的節(jié)點。需要說明的是,對于第一 DHT環(huán)中的每一計算節(jié)點來說,均為其分配了一個編號。比如分布式存儲系統(tǒng)中包括了 10個計算節(jié)點,可采用數(shù)字I至10為這10個節(jié)點進行編號。其中,該編號用于對不同的計算節(jié)點進行標識。
      [0106]在根據(jù)第一算法確定處理該I/O請求的目標計算節(jié)點時,可采取下述方式實現(xiàn):首先,計算該I/o請求的key值,之后計算hash(key) %N的值i ;其中,財旨代分布式存儲系統(tǒng)中計算節(jié)點的數(shù)量。將編號為i的計算節(jié)點確定為該I/O請求的目標計算節(jié)點。當然,還可采取其他方式計算處理I/O請求的目標計算節(jié)點,本發(fā)明實施例對此不進行具體限定。
      [0107]在本發(fā)明實施例中,對于第一DHT環(huán)來說,每一個計算節(jié)點包括多個控制分區(qū)。對于第二 DHT環(huán)來說,每一個存儲節(jié)點包括多個數(shù)據(jù)分區(qū),每一個I/O請求存儲在其哈希值所在數(shù)據(jù)分區(qū)對應的存儲節(jié)點上。其中,一個計算節(jié)點可對多個數(shù)據(jù)分區(qū)進行管理。這多個數(shù)據(jù)分區(qū)可來自于一個存儲節(jié)點也可來自于不同的存儲節(jié)點,也即一個計算節(jié)點可管理不同存儲節(jié)點的一部分數(shù)據(jù)分區(qū)。
      [0108]需要說明的是,計算節(jié)點還會為每一個存儲節(jié)點的數(shù)據(jù)分區(qū)分配一個序列號seqID,每一個在數(shù)據(jù)分區(qū)上的修改類I/O操作,均會觸發(fā)一個seqID的遞增操作。其中,該seqID的數(shù)值被存儲在硬盤等存儲介質(zhì)中,這樣即便發(fā)生斷電等異常情況,每一個數(shù)據(jù)分區(qū)的seqID數(shù)值也不會丟失。也即,計算接點在接收到用戶生成的I/0請求后,還會判斷該I/0請求是否為修改類I/O請求;若該I/O請求為修改類I/O請求,則對該I/O請求所在存儲節(jié)點的數(shù)據(jù)分區(qū)的序列號執(zhí)行遞增操作,即seqID加I。這樣當計算節(jié)點發(fā)生故障后,根據(jù)DHT原理,它所管理的數(shù)據(jù)分區(qū)將會被迀移到其他的計算節(jié)點。對于故障計算節(jié)點的任一數(shù)據(jù)分區(qū)而言,其他的計算節(jié)點僅需讀取到任一數(shù)據(jù)分區(qū)的seqID,便完成迀移服務。
      [0?09] 402、外部節(jié)點將該I/O請求發(fā)送至處理該I/O請求的目標計算節(jié)點。
      [0110]在本發(fā)明實施例中,外部節(jié)點在確定處理該I/O請求的目標計算節(jié)點后,分發(fā)該I/O請求至該目標計算節(jié)點,進而由該目標計算節(jié)點根據(jù)哈希算法進一步將該I/O請求分發(fā)至目標存儲節(jié)點,詳細過程參見下述步驟403。
      [0111]403、計算節(jié)點在接收到該I/O請求后,根據(jù)第二算法確定存儲I/O請求的目標存儲節(jié)點。
      [0112]其中,目標存儲節(jié)點包括主存儲節(jié)點和多個副存儲節(jié)點,副存儲節(jié)點中存儲了多個副本數(shù)據(jù)。在本發(fā)明實例中,在根據(jù)第二算法確定存儲I/O請求的目標存儲節(jié)點時,可采取下述方式實現(xiàn):
      [0113]首先,對每一個存儲節(jié)點的哈希值進行計算,其將存儲空間抽象為一個環(huán)。其次,對要存儲的I/O請求也進行同樣的哈希計算,按順時針方向?qū)⑵溆成涞诫x其最近的存儲節(jié)點上去。
      [0114]404、目標計算節(jié)點將該I/O請求發(fā)送至存儲該I/O請求的主存儲節(jié)點和副存儲節(jié)點。
      [0115]在本發(fā)明實施例中,要求將數(shù)據(jù)復制成多份,并存儲多個存儲節(jié)點上去。所以存儲該I/0請求的存儲節(jié)點為多個,包括I個主存儲節(jié)點和多個副存儲節(jié)點。其中,在將該I/0請求發(fā)送至存儲該I/O請求的主存儲節(jié)點和副存儲節(jié)點時,可先將該I/O請求發(fā)送至主存儲節(jié)點,然后再由主存儲節(jié)點將該I/O請求同步至多個副存儲節(jié)點上,本發(fā)明實施例對此不進行具體限定。
      [0116]405、在成功存儲該I/O請求后,主存儲節(jié)點向目標計算節(jié)點發(fā)送第一存儲成功消息。
      [0117]由于primary-secondary算法要求主存儲節(jié)點必須返回成功存儲消息,整個I/O操作才算成功。因此,主存儲節(jié)點在成功存儲該I/O請求后,會向目標計算節(jié)點返回第一存儲成功消息。
      [0118]406、目標計算節(jié)點在接收到第一存儲成功消息后,判斷存儲I/O請求的副存儲節(jié)點數(shù)量是否達到閾值;若存儲該I/O請求的副存儲節(jié)點數(shù)量達到閾值,則生成該I/O請求的操作日志,并向外部節(jié)點返回第二存儲成功消息。
      [0119]在本發(fā)明實施例中,為使用戶及時獲知該I/O請求的處理情況,目標計算節(jié)點在接收到主存儲節(jié)點發(fā)送的第一存儲成功消息,且判斷存儲該I/O請求的副存儲節(jié)點數(shù)量達到閾值后,向外部節(jié)點返回包括存儲該I/o請求成功的第二存儲成功消息。外部節(jié)點在接收到第二存儲成功消息后,將第二存儲成功消息展示給用戶。同時,目標計算節(jié)點還會生成該I/O請求的操作日志,以對該I/O請求進行記錄。其中,生成的操作日志保存在存儲該I/O請求的多個存儲節(jié)點上。
      [0120]對于分布式存儲系統(tǒng)來說,由于高強度和高密度的數(shù)據(jù)量處理等原因,節(jié)點出現(xiàn)故障情況時有發(fā)生。在本發(fā)明實施例中,當計算節(jié)點出現(xiàn)故障時,為了保證系統(tǒng)的可用性,主要是將發(fā)生故障的計算節(jié)點所管理的數(shù)據(jù)分區(qū)迀移到正常工作的計算節(jié)點上。參見圖5,詳細地處理流程如下:
      [0121]501、當目標計算節(jié)點檢測到存儲系統(tǒng)中計算節(jié)點的數(shù)量因故障減少時,確定多個計算節(jié)點中出現(xiàn)故障計算節(jié)點,獲取多個計算節(jié)點的控制分區(qū)的數(shù)量、目標計算節(jié)點中每一個控制分區(qū)的標識和故障計算節(jié)點管理的數(shù)據(jù)分區(qū)的標識。
      [0122]其中,多個計算節(jié)點的控制分區(qū)的數(shù)量,即指代第一DHT環(huán)包括的控制分區(qū)的數(shù)量。對于第一DHT環(huán)包括的控制分區(qū)來說,可以統(tǒng)一進行標識。比如,按照數(shù)字大小進行標識,從數(shù)字I進行開始,直至標識到100或1000等等。分為控制分區(qū)1、控制分區(qū)2……控制分區(qū)N等。上述控制分區(qū)的數(shù)量、控制分區(qū)的標識和數(shù)據(jù)分區(qū)的標識,均可實現(xiàn)由存儲系統(tǒng)為其分配,本發(fā)明實施例對此不進行具體限定。
      [0123]502、根據(jù)多個計算節(jié)點的控制分區(qū)的數(shù)量、目標計算節(jié)點中每一個控制分區(qū)的標識和故障計算節(jié)點管理的數(shù)據(jù)分區(qū)的標識,該目標計算節(jié)點判斷是否接管故障計算節(jié)點管理的數(shù)據(jù)分區(qū)。
      [0124]在本發(fā)明實施例中,每一個計算節(jié)點僅處理映射數(shù)據(jù)分區(qū)對應的節(jié)點故障。也即,當一個計算節(jié)點檢測到第一 DHT環(huán)中計算節(jié)點的數(shù)量發(fā)生變化時,根據(jù)第一 DHT環(huán)中控制分區(qū)的數(shù)量、該計算節(jié)點中每一個控制分區(qū)的標識和故障計算節(jié)點管理的數(shù)據(jù)分區(qū)的標識,判斷是否接管故障計算節(jié)點管理的數(shù)據(jù)分區(qū)。以第一 DHT環(huán)中控制分區(qū)的數(shù)量為control口81'1:;[1:;[011_1111111、故障計算節(jié)點管理的數(shù)據(jù)分區(qū)的標識為(^丨3_?31'1:;[1:;[011_丨(1為例,貝11具體的判斷方式為hash(data_partit1n_id) %control_partit1n_num0
      [0125]其中,一個故障計算節(jié)點所管理的數(shù)據(jù)分區(qū)可迀移到多個計算節(jié)點上,本發(fā)明實施例對此不進行具體限定,具體可視每一個計算節(jié)點的剩余處理能力而定。一個計算節(jié)點在接管了故障計算節(jié)點管理的數(shù)據(jù)分區(qū)后,為了及時明確上述數(shù)據(jù)分區(qū)是否迀移到了自身,還需重新統(tǒng)計應管理的數(shù)據(jù)分區(qū),確定是否存在新加入的數(shù)據(jù)分區(qū)。
      [0126]503、若故障計算節(jié)點管理的數(shù)據(jù)分區(qū)的標識與控制分區(qū)的數(shù)量之間的求模結(jié)果與目標計算節(jié)點中一個控制分區(qū)的標識相同,則該目標計算節(jié)點接管該故障計算節(jié)點管理的數(shù)據(jù)分區(qū)。
      [0127]對于任一數(shù)據(jù)分區(qū)而言,當求模取余結(jié)果與該目標計算節(jié)點的某一控制分區(qū)的標識相同時,那么將發(fā)生故障的計算節(jié)點管理的任一數(shù)據(jù)分區(qū)進行接管。由于本發(fā)明實施例為每一個計算節(jié)點管理的數(shù)據(jù)分區(qū)均分配了序列號seqID,因此目標計算節(jié)點在接管故障計算節(jié)點管理的數(shù)據(jù)分區(qū)時,具體通過讀取任一數(shù)據(jù)分區(qū)在故障計算節(jié)點發(fā)生故障時的序列號實現(xiàn)。也即,目標計算節(jié)點僅需讀取到任一數(shù)據(jù)分區(qū)的seqID并完成初始化,即完成任一數(shù)據(jù)分區(qū)的迀移任務。
      [0128]在本發(fā)明實施例中,當計算節(jié)點檢測到存儲節(jié)點發(fā)生故障時,會生成副本迀移任務。如果該存儲節(jié)點僅是發(fā)生臨時故障,則當故障恢復后該計算節(jié)點將會根據(jù)seqID和生成的I/O請求的操作日志數(shù)量做rebalance操作或catchup操作。參見圖6,詳細地處理流程如下:
      [0129]601、在多個目標存儲節(jié)點中任一存儲節(jié)點發(fā)生故障且恢復后,目標計算節(jié)點計算故障存儲節(jié)點中指定數(shù)據(jù)分區(qū)的序列號與正常存儲節(jié)點中同一數(shù)據(jù)分區(qū)的當前序列號之差。
      [0130]其中,正常存儲節(jié)點為在故障存儲節(jié)點發(fā)生故障時,對指定數(shù)據(jù)分區(qū)進行管理的存儲節(jié)點。
      [0131]當多個目標存儲節(jié)點中的某一個存儲節(jié)點故障之后,該故障存儲節(jié)點上每一個數(shù)據(jù)分區(qū)的序列號便不會變化,而對應該節(jié)點的I/O操作仍然可以繼續(xù)執(zhí)行,所以未發(fā)生故障的正常存儲節(jié)點上同一數(shù)據(jù)分區(qū)的序列號,會在接收到修改類I/O請求后進行變化。當該故障存儲節(jié)點故障恢復之后,計算在該故障存儲節(jié)點上指定數(shù)據(jù)分區(qū)的序列號與正常存儲節(jié)點上同一數(shù)據(jù)分區(qū)的當前序列號之差。
      [0132]602、若指定數(shù)據(jù)分區(qū)的序列號與當前序列號之差不大于目標計算
      當前第3頁1 2 3 4 5 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1