一種vd的均衡處理方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種VD的均衡處理方法和裝置。
【背景技術(shù)】
[0002]為了解決重構(gòu)時(shí)間較長(zhǎng)的問(wèn)題,傳統(tǒng)的陣列構(gòu)建方式逐漸演變到塊虛擬化方式,如圖1所示,為塊虛擬化的架構(gòu)示意圖,通過(guò)塊虛擬化方式,由存儲(chǔ)池(POOL)向上層提供資源。塊虛擬化方式的基本思想是:將指定數(shù)量的HKPhysical Disk,物理磁盤(pán))加入到存儲(chǔ)池中,并按照指定大小將PD切割成多個(gè)VD(Virtual Disk,虛擬磁盤(pán),即分塊),多個(gè)VD按照相應(yīng)的RAID(Redundant Arrays of Independent Disks,獨(dú)立冗余磁盤(pán)陣列)策略組建VDG(Virtual Disk Group,虛擬磁盤(pán)組),并向上層提供資源。其中,VD是組成VDG的虛擬磁盤(pán)單元,VDG由多個(gè)位于不同H)上的VD組成。
[0003]均衡和擴(kuò)容是塊虛擬化中的兩個(gè)比較重要的技術(shù)。當(dāng)存儲(chǔ)池中的資源(S卩VD資源)不足以滿(mǎn)足上層業(yè)務(wù)的需求時(shí),可以對(duì)存儲(chǔ)池進(jìn)行擴(kuò)容,即在存儲(chǔ)池中添加新H),并按照指定大小將新PD切割成多個(gè)VD,新PD所切割成的多個(gè)VD用于繼續(xù)向上層提供資源,以滿(mǎn)足上層業(yè)務(wù)的需求。在將新ro加入到存儲(chǔ)池之后,新ro的利用率遠(yuǎn)遠(yuǎn)小于原有ro的利用率,可以對(duì)存儲(chǔ)池進(jìn)行均衡,將原有ro上VD中的數(shù)據(jù)迀移到新PD的VD中,均衡的目的是使存儲(chǔ)池中的各個(gè)ro的利用率保持在平均利用率的有效范圍之內(nèi)。
[0004]在圖1中,將ro1、ro2、ro3、ro4、ro5加入到存儲(chǔ)池中,按照指定大小將各PD切割成9個(gè)¥0,¥061由¥011、¥021、¥031、¥041組成,¥062由¥012、¥022、¥032、¥051組成,¥063由¥013、VD23、VD42、VD52 組成,VDG4 由 VD14、VD33、VD43、VD53 組成,VDG5 由 VD24、VD34、VD44、VD54 組成,VDG6由VD15、VD25、VD35、VD45組成,以此類(lèi)推。第一個(gè)RAID由VDG1、VDG2和VDG3組成,第二個(gè)RAID由VDG4、VDG5和VDG6組成。在對(duì)存儲(chǔ)池進(jìn)行擴(kuò)容后,重新將TO6加入到存儲(chǔ)池,并按照指定大小將TO6切割成9個(gè)VD,新PD(PD6)的利用率為0,而原有H)的利用率遠(yuǎn)大于新H)的利用率,需要對(duì)存儲(chǔ)池進(jìn)行均衡處理。
[0005]在均衡處理時(shí),先對(duì)第一個(gè)RAID進(jìn)行均衡處理,當(dāng)其均衡完成后,再對(duì)第二個(gè)RAID進(jìn)行均衡處理,以此類(lèi)推,一直到均衡處理完成。例如,將第一個(gè)RAID的VDGl中的VDl I均衡至IJPD6的VD61,然后將第一個(gè)RAID的VDG2中的VD22均衡到TO6的VD62,然后將第一個(gè)RAID的VDG3中的VD42均衡到PD6的VD63,然后將第二個(gè)RAID的VDG4中的VD33均衡到PD6的VD64,這樣,6個(gè)H)均有4個(gè)VD被使用,完成均衡處理。
[0006]但是,在按照上述方式處理后,第一個(gè)RAID占用新PD的VD數(shù)量會(huì)遠(yuǎn)大于占用原有PD的VD數(shù)量,每個(gè)H)的分布并不均勻。例如,第一個(gè)RA ID采用的RAID策略是2+1,VDG的個(gè)數(shù)為5000,原有ro的個(gè)數(shù)為8,擴(kuò)容的新ro的個(gè)數(shù)為I,則在均衡處理完成后,原有PD上占用的VD數(shù)量為1250,新ro上占用的VD數(shù)量為5000,顯然,5000比1250大很多。
[0007]針對(duì)第一個(gè)RAID,由于新PD的VD數(shù)量遠(yuǎn)大于原有PD的VD數(shù)量,因此第一個(gè)RAID的業(yè)務(wù)主要在新PD上完成,從而會(huì)縮短新PD的使用壽命。而且,如果新PD出現(xiàn)故障,則在進(jìn)行重構(gòu)時(shí),其重構(gòu)時(shí)間會(huì)大于原有ro故障時(shí)的重構(gòu)時(shí)間,導(dǎo)致重構(gòu)速度大大降低,降低了重構(gòu)的效率。
【發(fā)明內(nèi)容】
[0008]本發(fā)明提供一種虛擬磁盤(pán)VD的均衡處理方法,存儲(chǔ)池內(nèi)包括擴(kuò)容前的K個(gè)物理磁盤(pán)PD和擴(kuò)容后的M個(gè)PD,K和M均為正整數(shù),在對(duì)所述存儲(chǔ)池進(jìn)行均衡處理時(shí),針對(duì)每個(gè)獨(dú)立冗余磁盤(pán)陣列RAID,所述方法包括:
[0009 ]計(jì)算所述RAID在所述存儲(chǔ)池內(nèi)的所有H)上的平均使用率;
[0010]當(dāng)需要將所述RAID在第一H)中的數(shù)據(jù)迀移到第二 H)時(shí),判斷所述RAID在所述第二PD的使用率是否不大于所述平均使用率;其中,所述第一PD是所述K個(gè)PD中的PD,所述第二PD是所述M個(gè)PD中的PD;
[0011]如果是,則將所述RAID在所述第一ro中的數(shù)據(jù)迀移到所述第二 ro;
[0012]如果否,則拒絕將所述RAID在所述第一H)中的數(shù)據(jù)迀移到所述第二 H)。
[0013]所述計(jì)算RAID在所述存儲(chǔ)池內(nèi)的所有PD上的平均使用率的過(guò)程,具體包括:獲得所述RAID需要使用的總VD個(gè)數(shù)和所述存儲(chǔ)池內(nèi)的所有H)的總VD個(gè)數(shù),利用所述RAID需要使用的總VD個(gè)數(shù)和所述存儲(chǔ)池內(nèi)的所有H)的總VD個(gè)數(shù),計(jì)算所述RAID在所述存儲(chǔ)池內(nèi)的所有ro上的平均使用率。
[0014]所述需要將所述RAID在第一PD中的數(shù)據(jù)迀移到第二 PD的確定過(guò)程,具體包括:判斷所述存儲(chǔ)池內(nèi)的所述K個(gè)PD和所述M個(gè)ro的利用率是否均保持在平均利用率的有效范圍之內(nèi);如果是,則結(jié)束對(duì)所述存儲(chǔ)池的均衡處理;
[0015]如果否,判斷所述RAID在所述K個(gè)ro和所述M個(gè)ro的使用率是否均保持在所述平均使用率的有效范圍之內(nèi);如果均保持在所述平均使用率的有效范圍之內(nèi),則結(jié)束對(duì)所述RAID的均衡處理,選擇下一個(gè)RAID進(jìn)行均衡處理;
[0016]如果沒(méi)有均保持在所述平均使用率的有效范圍之內(nèi),則從所述K個(gè)PD中選擇一個(gè)使用率大于所述平均使用率的PD作為所述第一 PD,并從所述M個(gè)PD中選擇一個(gè)使用率小于所述平均使用率的ro作為所述第二 ro,并確定需要將所述RAID在所述第一 ro中的數(shù)據(jù)迀移到所述第二ro。
[0017]所述平均利用率的有效范圍具體包括:[N*(l-Xl%),N*(l+xl%)],所述平均使用率的有效范圍具體包括:[Q*a-x2%)],Q*(l+x2%)];
[0018]其中,所述N為平均利用率,所述Q為平均使用率;所述xl為預(yù)設(shè)閾值,所述x2為預(yù)設(shè)閾值;所述平均利用率N=(a%*K)/(K+M),a%S在對(duì)所述存儲(chǔ)池進(jìn)行均衡處理之前,所述Kfro中的每個(gè)ro的利用率。
[0019]將所述RAID在所述第一ro中的數(shù)據(jù)迀移到所述第二 PD的過(guò)程,具體包括:將所述RAID在所述第一PD中的部分VD的數(shù)據(jù)迀移到所述第二H)中的VD上;其中,在將所述RAID在所述第一 ro中的部分VD的數(shù)據(jù)迀移到所述第二 PD中的VD上的過(guò)程中,針對(duì)Kfro中的位于同一個(gè)虛擬磁盤(pán)組VDG的多個(gè)VD,只迀移部分VD的數(shù)據(jù)到所述Mfro中對(duì)應(yīng)個(gè)數(shù)的VD上。
[0020]本發(fā)明提供一種虛擬磁盤(pán)VD的均衡處理裝置,存儲(chǔ)池內(nèi)包括擴(kuò)容前的K個(gè)物理磁盤(pán)PD和擴(kuò)容后的M個(gè)PD,K和M均為正整數(shù),在對(duì)存儲(chǔ)池進(jìn)行均衡處理時(shí),針對(duì)每個(gè)獨(dú)立冗余磁盤(pán)陣列RAID,所述裝置具體包括:
[0021 ]計(jì)算模塊,用于計(jì)算所述RAID在存儲(chǔ)池內(nèi)的所有H)上的平均使用率;
[0022]確定模塊,用于當(dāng)需要將所述RAID在第一PD中的數(shù)據(jù)迀移到第二 PD時(shí),判斷所述RAID在所述第二 PD的使用率是否不大于所述平均使用率;所述第一 ro是所述K個(gè)PD中的ro,所述第二 ro是所述μ個(gè)ro中的ro;
[0023]處理模塊,用于當(dāng)判斷結(jié)果為不大于所述平均使用率時(shí),則將所述RAID在所述第一PD中的數(shù)據(jù)迀移到所述第二PD;當(dāng)判斷結(jié)果為大于所述平均使用率時(shí),則拒絕將所述RAID在所述第一 H)中的數(shù)據(jù)迀移到所述第二 H)。
[0024]所述計(jì)算模塊,具體用于在計(jì)算RAID在存儲(chǔ)池內(nèi)的所有H)上的平均使用率的過(guò)程中,獲得所述RAID需要使用的總VD個(gè)數(shù)和存儲(chǔ)池內(nèi)的所有PD的總VD個(gè)數(shù),利用所述RAID需要使用的總VD個(gè)數(shù)和存儲(chǔ)池內(nèi)的所有H)的總VD個(gè)數(shù),計(jì)算所述RAID在所述存儲(chǔ)池內(nèi)的所有H)上的平均使用率。
[0025]所述確定模塊,具體用于在需要將所述RAID在第一ro中的數(shù)據(jù)迀移到第二 ro的確定過(guò)程中,判斷所述存儲(chǔ)池內(nèi)的所述K個(gè)ro和所述μ個(gè)ro的利用率是否均保持在平均利用率的有效范圍之內(nèi);如果是,則結(jié)束對(duì)所述存儲(chǔ)池的均衡處理;如果否,判斷所述RAID在所述K個(gè)PD和所述M個(gè)PD的使用率是否均保持在所述平均使用率的有效范圍之內(nèi);如果均保持在所述平均使用率的有效范圍之內(nèi),則結(jié)束對(duì)所述RAID的均衡處理,選擇下一個(gè)RAID進(jìn)行均衡處理;如果沒(méi)有均保持在所述平均使用率的有效范圍之內(nèi),則從所述K個(gè)ro中選擇一個(gè)使用率大于所述平均使用率的PD作為所述第一 PD,并從所述M個(gè)PD中選擇一個(gè)使用率小于所述平均使用率的ro作為所述第二 ro,并確定需要將所述RAID在所述第一 ro中的