国产精品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)中數據分發(fā)方法、裝置、計算節(jié)點及存儲系統(tǒng)的制作方法

      文檔序號:9754721閱讀:529來源:國知局
      存儲系統(tǒng)中數據分發(fā)方法、裝置、計算節(jié)點及存儲系統(tǒng)的制作方法
      【技術領域】
      [0001]本發(fā)明涉及計算機技術領域,特別涉及一種數據分發(fā)方法、裝置、計算節(jié)點及存儲系統(tǒng)。
      【背景技術】
      [0002]在分布式存儲系統(tǒng)中,一般是把節(jié)點組成一個DHT(Distributed Hash Table,分布式哈希表)環(huán),每一個節(jié)點負責管理環(huán)上的一段區(qū)域(partit1n),每個I/0( Input/Output,輸入輸出)請求存儲在其哈希值所在區(qū)域對應的節(jié)點上。為了保證數據的一致性,在分布式存儲系統(tǒng)中常用primary-secondary算法存儲數據。primary-secondary算法是一種主從式算法,一般用于存儲多副本數據。該算法首先由外部節(jié)點將I/O請求下發(fā)到主節(jié)點,然后由主節(jié)點將I/0請求同步到其余節(jié)點上,保證主副本之間的一致性。此外,分布式系統(tǒng)中每個節(jié)點都包含了控制功能和存儲功能。其中,控制功能主要負責I/O請求分發(fā)、路由查詢、視圖管理、primary-secondary算法實現等,而存儲功能主要負責K/V(Key/Value,鍵值)管理和數據讀寫等。
      [0003]現有的分布式存儲系統(tǒng)中,節(jié)點的控制功能和存儲功能是合一部署的。參見圖1,圖1描述了Linux PB級的分布式文件系統(tǒng)CEPH的節(jié)點部署和1/0流程示意圖。在圖1中,將存儲功能和控制功能合一部署在一個節(jié)點上,所有合一部署的節(jié)點構成一個DHT環(huán)。當外部節(jié)點發(fā)起I/o請求時,首先將該I/O請求下發(fā)給主節(jié)點,然后再由主節(jié)點將該I/O請求同步到其余節(jié)點上。
      [0004]在實現本發(fā)明的過程中,發(fā)明人發(fā)現現有技術至少存在以下問題:
      [0005 ]由于節(jié)點的存儲功能和控制功能合一,所以導致控制功能強依賴存儲功能,使得軟硬件之間無法做到解耦,控制性能和存儲性能相互制約、相互影響,當存儲功能出現故障時將嚴重影響到控制功能,當控制功能出現故障時同樣將嚴重影響到存儲功能,致使整個分布式系統(tǒng)的性能受損。

      【發(fā)明內容】

      [0006]為了解決現有技術的問題,本發(fā)明實施例提供了一種存儲系統(tǒng)中數據分發(fā)方法、裝置、計算節(jié)點及存儲系統(tǒng)。所述技術方案如下:
      [0007]第一方面,提供了一種存儲系統(tǒng)中數據分發(fā)方法,所述存儲系統(tǒng)包括多個計算節(jié)點和多個存儲節(jié)點,所述方法包括:
      [0008]目標計算節(jié)點接收外部節(jié)點發(fā)送的1/0請求;其中,所述目標計算節(jié)點由所述外部節(jié)點根據第一算法從所述多個計算節(jié)點中確定;
      [0009]所述目標計算節(jié)點根據第二算法從所述多個存儲節(jié)點中確定目標存儲節(jié)點;
      [0010]所述目標計算節(jié)點向所述目標存儲節(jié)點發(fā)送所述1/0請求;所述目標存儲節(jié)點包括主存儲節(jié)點和副存儲節(jié)點。
      [0011]如圖2所示,本發(fā)明實施例提供的存儲系統(tǒng)中將節(jié)點的計算功能和存儲功能進行了分離部署。存儲系統(tǒng)中的全部計算節(jié)點組成了一個DHT環(huán),在本文中將該DHT環(huán)統(tǒng)一稱之為第一 DHT環(huán)。全部的存儲節(jié)點組成了另一個DHT環(huán),在本文中將該DHT環(huán)統(tǒng)一稱之為第二DHT環(huán)。需要說明的是,第一算法和第二算法均歸屬于哈希算法,二者基于相類似的構思。
      [0012]當外部節(jié)點檢測到用戶生成一個I/O請求后,首先通過哈希算法在第一DHT環(huán)中確定處理該I/O請求的目標計算節(jié)點。之后,外部節(jié)點將該I/O請求發(fā)送至該目標計算節(jié)點,由該目標計算節(jié)點再通過哈希算法確定存儲該I/O請求的主存儲節(jié)點和副存儲節(jié)點,并將該I/O請求分發(fā)給主存儲節(jié)點和副存儲節(jié)點進行存儲。這樣便實現了存儲和控制分離部署,并可以根據需要對計算性能和存儲性能進行靈活配置。
      [0013]在第一方面的第一種可能的實現方式中,所述目標控制節(jié)點向所述目標存儲節(jié)點發(fā)送所述I/o請求之后,所述方法還包括:
      [0014]若所述目標計算節(jié)點接收到所述主存儲節(jié)點返回的第一存儲成功消息,且存儲所述I/O請求的副存儲節(jié)點數量達到閾值,則生成所述I/O請求的操作日志,并向所述外部節(jié)點返回第二存儲成功消息。
      [0015]由于primary-secondary算法要求主存儲節(jié)點必須返回成功存儲消息,整個I/O操作才算成功。因此,主存儲節(jié)點在成功存儲該I/O請求后,必須向目標計算節(jié)點返回成功存儲消息。而多副本要求I/O請求的副本數足夠,因此本發(fā)明實施例還限定了存儲I/O請求的副存儲節(jié)點的數量。
      [0016]結合第一方面,在第一方面的第二種可能的實現方式中,所述方法還包括:
      [0017]當所述目標計算節(jié)點檢測到所述存儲系統(tǒng)中計算節(jié)點的數量因故障減少時,確定所述多個計算節(jié)點中出現故障計算節(jié)點,獲取所述多個計算節(jié)點的控制分區(qū)的數量、所述目標計算節(jié)點中每一個控制分區(qū)的標識和所述故障計算節(jié)點管理的數據分區(qū)的標識;
      [0018]若所述故障計算節(jié)點管理的數據分區(qū)的標識與所述控制分區(qū)的數量之間的求模結果與所述目標計算節(jié)點中一個控制分區(qū)的標識相同,則所述目標計算節(jié)點接管所述故障計算節(jié)點管理的數據分區(qū);
      [0019]其中,一個計算節(jié)點包括至少一個控制分區(qū),一個存儲節(jié)點包括至少一個數據分區(qū),一個計算節(jié)點可對多個數據分區(qū)進行管理。
      [0020]多個計算節(jié)點的控制分區(qū)的數量,即指代第一DHT環(huán)包括的控制分區(qū)的數量,以control_parti t1n_num進行表示,故障計算節(jié)點管理的數據分區(qū)的標識,以data_part it 1n_id進行表示,則對于故障計算節(jié)點管理的任一數據分區(qū)來說,若hash (data_partit1n_id) %control_partit1n_num的求模取余結果與目標計算節(jié)點中一個控制分區(qū)的標識相同,則目標計算節(jié)點接管任一數據分區(qū)。
      [0021 ]對于第一 DHT環(huán)包括的控制分區(qū)來說,可以統(tǒng)一進行標識。比如,按照數字大小進行標識,從數字I進行開始,直至標識到100或1000等等。分為控制分區(qū)1、控制分區(qū)2……控制分區(qū)N等。
      [0022]結合第一方面的第二種可能的實現方式,在第一方面的第三種可能的實現方式中,所述方法還包括:
      [0023]所述目標計算節(jié)點為管理的每一個數據分區(qū)分別分配序列號;
      [0024]所述目標計算節(jié)點對目標數據分區(qū)的序列號執(zhí)行加一;其中,所述目標數據分區(qū)為所述目標計算節(jié)點管理的數據分區(qū)中接收到修改類I/o請求的分區(qū);
      [0025]所述目標計算節(jié)點接管所述故障計算節(jié)點管理的數據分區(qū),包括:
      [0026]所述目標計算節(jié)點讀取所述故障計算節(jié)點管理的數據分區(qū)在所述故障計算節(jié)點發(fā)生故障時的序列號。
      [0027]需要說明的是,計算節(jié)點還會為每一個存儲節(jié)點的數據分區(qū)分配一個序列號seqID,每一個在數據分區(qū)上的修改類I/O操作,均會觸發(fā)一個seqID的遞增操作,并且該seqID的數值會被存儲在硬盤等存儲介質中,這樣即便發(fā)生斷電等異常情況,每一個數據分區(qū)的seqID數值也不會丟失。也即,計算接點在接收到用戶的I/O請求后,還會判斷該I/O請求是否為修改類I/O請求;若該I/O請求為修改類I/O請求,則對該I/O請求所在數據分區(qū)的序列號執(zhí)行加一操作,即seqID加I。
      [0028]當計算節(jié)點發(fā)生故障后,根據DHT原理,它所管理的數據分區(qū)將會被迀移到其他的計算節(jié)點。對于故障計算節(jié)點的任一數據分區(qū)而言,其他的計算節(jié)點僅需讀取到任一數據分區(qū)的seqID,便完成迀移服務。
      [0029]結合第一方面,在第一方面的第四種可能的實現方式中,所述方法還包括:
      [0030]在所述多個目標存儲節(jié)點中任一存儲節(jié)點發(fā)生故障且恢復后,所述目標計算節(jié)點計算故障存儲節(jié)點中指定數據分區(qū)的序列號與正常存儲節(jié)點中同一數據分區(qū)的當前序列號之差;其中,所述正常存儲節(jié)點為在所述故障存儲節(jié)點發(fā)生故障時,對所述指定數據分區(qū)進行管理的存儲節(jié)點;
      [0031]若所述指定數據分區(qū)的序列號與當前序列號之差不大于所述目標計算節(jié)點生成的I/o請求的操作日志數量,則所述目標計算節(jié)點執(zhí)行所述正常存儲節(jié)點上同一數據分區(qū)上的I/o請求,并更新所述指定數據分區(qū)的序列號;
      [0032]若所述指定數據分區(qū)的序列號與當前序列號之差大于所述I/O請求的操作日志數量,則所述目標計算節(jié)點將所述正常存儲節(jié)點的同一數據分區(qū)存儲的I/O請求迀移至所述故障存儲節(jié)點;
      [0033]其中,序列號用于統(tǒng)計分發(fā)到數據分區(qū)的修改類I/O請求的數量,一個數據分區(qū)在接收到一個修改類I/o請求后,所述數據分區(qū)的序列號加一。
      [0034]對于第一種情況,該步驟對應catchup操作。由于指定數據分區(qū)的序列號與當前序列號之差不大于生成的I/O請求的操作日志數量,則證明在副本存儲節(jié)點上存儲的I/O請求的操作日志量足夠,則從副本存儲節(jié)點上把這部分I/O請求取出在故障存儲節(jié)點重新回放一次。
      [0035]對于第二種情況,該步驟對應rebalance操作。由于指定數據分區(qū)的序列號與當前序列號之差大于生成的I/O請求的操作日志數量,則證明副本存儲節(jié)點上存儲的I/O請求的操作日志量不夠,直接把副本存儲節(jié)點上的所有數據同步到故障存儲節(jié)點之上。
      [0036]第二方面,提供了一種存儲系統(tǒng)中數據分發(fā)裝置,所述存儲系統(tǒng)包括多個計算節(jié)點和多個存儲節(jié)點,所述裝置包括:
      [0037 ]接收模塊,用于接收外部節(jié)點發(fā)送的輸入輸出I / O請求,所述I / O請求由所述外部節(jié)點在根據第一算法從所述多個計算節(jié)點中確定處理所述I/O請求的目標計算節(jié)點后發(fā)送;
      [0038]存儲節(jié)點確定模塊,用于根據第二算法從所述多個存儲節(jié)點中確定目標存儲節(jié)占.V,
      [0039]發(fā)送模塊,用于向所述目標存儲節(jié)點發(fā)送所述I/O請求;所述目標存儲節(jié)點包括主存儲節(jié)點和副存儲節(jié)點。
      [0040]結合第二方面,在第二方面的第一種可能的實現方式中,所述裝置還包括:
      [0041]生成模塊,用于當所述目標計算節(jié)點接收到所述主存儲節(jié)點返回的第一存儲成功消息,且存儲所述I/O請求的副存儲節(jié)點數量達到閾值時,生成所述I/O請求的操作日志;
      [0042]所述發(fā)送模塊,還用于向所述外部節(jié)點返回第二存儲成功消息。
      [0043]結合第二方面,在第二方面的第二種可能的實
      當前第1頁1 2 3 4 5 
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1