關於組RAID時的條帶寬度及條帶深度

2021-09-05 04:31:32 字數 3958 閱讀 8249

以前一直為raid到底應該如何組織資料的物理儲存結構而疑惑。

現在終於知道,一般情況下用raid5即可,少數要求高的上raid10。

不過,在看書的時候,發現對於條帶的解釋不太清楚。度娘了一下,這貼出來給大家分享。

條帶(strip)是把連續的資料分割成相同大小的資料塊,把每段資料分別寫入到陣列中的不同磁碟上的方法。簡單的說,條帶是一種將多個磁碟驅動器合併為乙個卷的方法。 許多情況下,這是通過硬體控制器來完成的。

當多個程序同時訪問乙個磁碟時,可能會出現磁碟衝突。大多數磁碟系統都對訪問次數(每秒的 i/o 操作,iops)和資料傳輸率(每秒傳輸的資料量,tps)有限制。當達到這些限制時,後面需要訪問磁碟的程序就需要等待,這時就是所謂的磁碟衝突。避免磁碟衝突是優化 i/o 效能的乙個重要目標,而 i/o 效能的優化與其他資源(如cpu和記憶體)的優化有著很大的區別 ,i/o 優化最有效的手段是將 i/o 最大限度的進行平衡。

條帶化技術就是一種自動的將 i/o 的負載均衡到多個物理磁碟上的技術,條帶化技術就是將一塊連續的資料分成很多小部分並把他們分別儲存到不同磁碟上去。這就能使多個程序同時訪問資料的多個不同部分而不會造成磁碟衝突,而且在需要對這種資料進行順序訪問的時候可以獲得最大程度上的 i/o 並行能力,從而獲得非常好的效能。由於條帶化在 i/o 效能問題上的優越表現,以致於在應用系統所在的計算環境中的多個層次或平台都涉及到了條帶化的技術,如作業系統和儲存系統這兩個層次中都可能使用條帶化技術。

條帶化後,條帶卷所能提供的速度比單個盤所能提供的速度要快很多,由於現在儲存技術成熟,大多數系統都採用條帶化來實現系統的i/o負載分擔,如果os有lvm軟體或者硬體條帶裝置,決定因素是條帶深度(stripe depth)和條帶寬度(stripe width)。

條帶深度:指的是條帶的大小,也叫條帶大小。有時也被叫做block size, chunk size, stripe length 或者 granularity。這個引數指的是寫在每塊磁碟上的條帶資料塊的大小。raid的資料塊大小一般在2kb到512kb之間(或者更大),其數值是2的次方,即2kb,4kb,8kb,16kb這樣。

條帶大小對效能的影響比條帶寬度難以量化的多。

根據上邊的論述,我們會發現根據不同的應用型別,不同的效能需求,不同驅動器的不同特點(如ssd硬碟),不存在乙個普遍適用的"最佳條帶大小"。所以這也是儲存廠家,檔案系統編寫者允許我們自己定義條帶大小的原因。

條帶寬度:是指同時可以併發讀或寫的條帶數量。這個數量等於raid中的物理硬碟數量。例如乙個經過條帶化的,具有4塊物理硬碟的陣列的條帶寬度就是4。增加條帶寬度,可以增加陣列的讀寫效能。道理很明顯,增加更多的硬碟,也就增加了可以同時併發讀或寫的條帶數量。在其他條件一樣的前提下,乙個由8塊18g硬碟組成的陣列相比乙個由4塊36g硬碟組成的陣列具有更高的傳輸效能。

在作業系統的層次中,我們可以使用軟體條帶(如

lvm

中lv

的條帶來實現條帶化技術)或硬體條帶(如各種

raid

)。在儲存系統層次中,目前市場上絕大部分產品都提供了各種各樣的條帶技術(如各種

raid

)。 條帶化的設定

當使用lvm

或者硬體條帶化時,決定條帶化效果的因素是條帶深度(

stripe depth

)和條帶寬度(

stripe width):

需要根據系統的

i/o

要求來合理的選擇這些設定。對於資料庫系統來說,比較合理的條帶深度是從

256k

到1m

。下面分析一下條帶深度和條帶寬度的影響因素。

條帶深度

為了提高

i/o

效率,一次邏輯

i/o

請求轉化成物理

i/o

請求後,應該讓這些物理

i/o

分布到最多的物理磁碟上去,也就是每個物理磁碟處理的物理

i/o

最少,最好只有一次

, 因而影響條帶的乙個重要因素就是一次邏輯

i/o

請求的大小。

此外,系統中

i/o

的併發度不同我們對條帶的配置要求也不同。例如,在高併發度且邏輯

i/o

請求的大小都比較小的情況下,我們希望一塊磁碟能同時響應多個

i/o

請求;而在那些存在大的邏輯

i/o

請求的低併發度系統中,我們可能就需要多塊磁碟同時響應乙個

i/o

請求。無論是乙個磁碟還是多個磁碟響應

i/o

請求,我們的乙個原則是讓一次邏輯

i/o

能被物理裝置一次處理完成。

條帶寬度

正如我們前面所述,無論是乙個還是多個磁碟響應乙個邏輯

i/o,我們都希望物理裝置只處理一次

i/o

。因而在確定了條帶深度的基礎上,我們需要保證條帶寬度

>= i/o

請求的大小

/ 條帶深度。這樣就能最大程度的保證

i/o

請求的併發處理能力了。

此外,考慮到以後系統容量的擴充,我們也需要規劃好條帶寬度。

在db2

中合理規劃和設定條帶相關引數

下面先看下影響

i/o

效能db2

其中,前面兩個是最關鍵的兩個引數。

db2

的資料頁大小是在建立資料庫的時候指定的,並且不能被動態的修改。它決定了在

db2

中所有的表空間預設的頁大小。但是我們在建立每個表空間的時候還可以根據資料儲存的需要單獨指定頁的大小。

在oltp

系統中,會存在大量小的併發的

i/o

請求。這時就需要考慮選擇比較大的條帶深度。使條帶深度大於

i/o

大小就稱為粗粒度條帶(

coarse grain striping

)。在高並行度系統中,條帶深度為(

n * page size

),其中

n 為大於

1 的整數。通過粗粒度條帶能實現最大的

i/o

吞吐量(一次物理

i/o

可以同時響應多個併發的邏輯

i/o)。大的條帶深度能夠使像全表掃瞄那樣的預取讀操作由乙個磁碟驅動來響應,並提高預取讀操作的效能。在

oltp

系統中,為了避免乙個邏輯

i/o

請求被多個物理

i/o

操作完成,條帶深度就需要設定為兩倍或者兩倍以上於

db2

頁大小。例如,如果條帶深度是物理

i/o

大小的n

倍,對於大量併發

i/o

請求,我們可以保證最少有(

n-1)

/ n

的請求是由一塊磁碟來完成。

在低併發度的

dss

系統中,由於

i/o

請求一般是序列化的,為了避免出現

i/o

集中的熱點磁碟,我們需要避免邏輯

i/o

只有一塊磁碟處理。這時粗粒度條帶就不適合了。我們應該選擇小的條帶深度,使乙個邏輯

i/o

分布到多個磁碟上,從而實現

i/o

的負載均衡。這就叫細粒度條帶。條帶深度的大小必須為(

n * page size

),其中

n 為小於預取引數(

prefetch size

)大小的整數。

預取大小也是對條帶化有影響的乙個重要引數,它決定了

db2

非同步i/o

的基本單位。首先我們要知道

db2

的預取(

prefetching

)i/o

機制,在資料庫普遍存在著大量、連續的

i/o

時候,預取可以極大的提高資料庫資料讀取的

i/o

效能(例如

dss

系統)。

關於raid建立的練習

關於raid建立的練習 1 給虛擬機器新增5塊5g的硬碟sd bcdef 將sdb sdc硬碟建立成名稱為md1的raid 1,生成mdadm.conf,然後格式化 自動掛載到 mnt md1目錄。最後複製一點檔案到 mnt md1目錄中。lsblk 檢視塊裝置 mdadm dsv 查raid md...

關於RAID 1 0和RAID 0 1的比較

raid的概念就不多說了,說說 raid 0 和 raid 1 raid 0 是條帶儲存,疊加所有硬碟容量,因此不具有容錯性,原理如下圖所示 raid 1 使用非常原始的方式 複製乙份 映象 進行容錯,原理如下圖所示 從原理圖上面可以看到,raid 0省空間,但是安全性差,raid 1安全型好,但是...

關於RAID的一些知識

raid有raid0,raid1,raid5,raid10,raid6,raid10,raid50,raid60.下面分別介紹這些。一.raid0 如下圖所示,將所有硬碟做成一塊raid0,他沒有備份,沒有校驗值,至少2塊才能做raid0。利用率 1 優點 讀取快,利用率高 缺點 只要有乙個硬碟壞掉...