天天看點

+++++++.RAID各級别的特性和使用

RAID來源

RAID功用

RAID的實作:硬體、軟體

RAID的級别

在CentOS 6上軟體實作RAID

一、RAID來源

    1、防止重要資料因磁盤損壞而丢失,人為損壞不能恢複。RAID不能取代備份

    2、IO能力有限

    3、對廉價且高IO能力的硬體裝置的需求

  Berkerly在A case for Redundent Arrays of Inexpensive Disks 論文中說明了RAID。将多個IDE接口的磁盤按照特定的結構組織在一起,提高IO,提高耐用性。

控制器:硬碟跟主機闆互動,通過主機闆上接的控制器和硬碟上的控制器,基于某種協定或工業标準,有相同的頻率,電壓....,才能實作通信。

    多塊不同的硬碟有不同控制器,都要與主機通信,是以隻需要一個中間層,能将所有硬碟控制器的協定統一成一個協定,進而與主機闆互動。主機闆通過此控制器就能完成與每個硬碟互動。

    生産出這樣一個控制器的價格相當的不廉價。後來改名為 Redundant Arrays of Indepent Disks 獨立備援磁盤陣列

二、RAID功用

    将多個硬碟 按照特定的格式組織起來,當一塊硬碟使用

        提升IO能力

        提升耐用性

三、RAID的實作

    1、硬體實作

        1)主機闆內建控制器

            特殊線纜直接連接配接主機闆的擴充卡

<a href="https://s4.51cto.com/wyfs02/M00/9E/39/wKioL1mNkHDj6IxpAACKK1YKF9U921.png-wh_500x0-wm_3-wmp_4-s_4156483040.png" target="_blank"></a>

        2)主機闆不內建控制器

            特殊線纜連接配接适配卡

<a href="https://s1.51cto.com/wyfs02/M02/9E/39/wKioL1mNkM7QSGDGAACLwP_TcOM400.png-wh_500x0-wm_3-wmp_4-s_1098630984.png" target="_blank"></a>

        3) RAID提升IO能力有限

  某些廠商給RAID裝置提供了CPU,RAM(RAID的專用記憶體),IO,是一個獨立的裝置。資料來時,直接存入記憶體中,并告知主機闆,存儲好了,性能多好。

   如果斷電了,記憶體中資料,豈不跟跟異步IO一樣?承諾給别人的事情,你沒有做到。這個人的形象、能力、開鍋......

   為了解決這個問題,為RAID提供外部電源,目的:在系統斷電後,保證讓記憶體中的資料同步到

   磁盤中,不至于丢失。下次開機後,又繼續為電源充電。

    **********對于有記憶體的RAID裝置,一定要檢查有無供電功能******************

    2、軟體實作

        Linux核心提供一個子產品(md子產品,Multi Devices),程式員為了軟體實作raid,就必須調用此子產品,RAID是一種通用的功能,是以就有程式員開發程式,能夠調用核心中子產品,完成RAID的軟體實作。我們僅需要調用使用者空間中mdadm工具即可。

四、RAID的級别

   常見的RAID裝置:RAID0,RAID1,RAID5,RAID10,RAID50,JBOD

RAID0(條帶卷,strip)

   将多塊硬碟平行組織起來當作一塊硬碟 實作IO并行的磁盤組織結構

  1、IO能力為1塊磁盤的N倍,但有上限。磁盤塊越多,能力不增反降

   寫入時,對資料的切割時間

   讀出時,對資料的合并時間

  2、沒有備援能力,随着塊數增加,損壞的可能性為單塊的N倍。

  3、可用空間為N * min(S1,S2,....),至少需要2個磁盤塊。

RAID1(鏡像卷,mirror)

  1、有備援能力,可以壞掉一個盤

  2、可用空間為 1*min (S1,S2)

  3、IO能力:讀:分散性,性能上升。寫:不分散,性能略微下降

<a href="https://s5.51cto.com/wyfs02/M01/9E/3A/wKioL1mNmvjg9Co_AAA6-84WrM0935.png-wh_500x0-wm_3-wmp_4-s_2455703680.png" target="_blank"></a>

RAID4

  校驗盤:根據另外兩個盤的值進行對位異或運算得出校驗盤的塊編号。

  硬碟壞掉:監控訓示燈,API接口,控制器支援多個空閑盤,用于做熱備。(不停機備份)

  優點:兼具RAID1,RAID0的特性

  缺點:單個磁盤做校驗,無論讀寫均要使用校驗盤,對單個盤的IO壓力大,則出現性能瓶頸。

  2、可用空間為 (N - 1) * min (S1,S2,S3,...),至少3個盤

  3、如果壞掉一個盤,轉換為降級模式工作。依然能夠讀寫。

RAID5

 校驗碼循環放于不同的盤,預設為校驗碼為左對稱,如圖所示

<a href="https://s3.51cto.com/wyfs02/M02/9E/4D/wKiom1mNuVCxsY5kAABfhq8f5WA954.png" target="_blank"></a>

RAID6

  兩個盤做校驗盤,循環校驗,根據異或值做校驗。

  1、有備援能力,可以壞掉2個盤

  2、可用空間為 (N - 2) * min (S1,S2,S3,S4...),至少4個盤

  3、如果壞掉2個盤,轉換為降級模式工作。依然能夠讀寫。

RAID10

  先用2個盤做RAID1,再用多個RAID做RAID0

  1、有備援能力,每組隻能壞一個盤

  2、可用空間為(N/2) * min(S1,S2,S3,S4,...)最少4個盤

  3、每組兩個盤同時壞的可能性不大。

RAID01

  先用多個盤做RAID0,再用2個RAID做RAID1

  1、有備援能力,兩個組不能同時壞,隻能壞一個組

  3、每組都壞的可能性很大

RAID50

  先用至少3個盤做RAID5,再用多個RAID做RAID0

RAID7

   Optimized Asynchrony for High I/O Rates as well as high Data Transfer Rates(最優化的異步高I/O速率和高資料傳輸率)”RAID 7 存儲計算機作業系統(Storage Computer Operating System )是一套實時事件驅動作業系統

JBOD

   将多塊磁盤空間合并成一個大的連續的磁盤空間,存儲資料時,先填滿第一個,第二個,....

    例如,需要存儲3T資料,有3個1T磁盤,基于JBOD方式組織磁盤。

五、在CentOS 6上軟體實作RAID

   1、Raid在核心中實作

     子產品 md

     使用者空間管理工具 mdadm

   2、文法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<code>mdadm [MODE] [RAID_DEVICE] [OPTIONS..] [componet-device]</code>

<code>MODE:</code>

<code>    </code><code>-C 建立模式</code>

<code>      </code><code>-n </code><code>#    ## 建立由#指定個數磁盤塊RAID</code>

<code>      </code><code>-l </code><code>#    ## 指定RAID級别</code>

<code>         </code><code>RAID0、RAID1、RAID5、RAID6、RAID10</code>

<code>      </code><code>-a {</code><code>yes</code><code>|no}      </code><code>## 是否自動建立目标裝置的裝置檔案</code>

<code>      </code><code>-c CHUNK_SIZE    </code><code>## 預設512K,指明塊大小</code>

<code>      </code><code>-x </code><code>#             ## 空閑盤的個數,RAID0沒有備援能力不需要空閑盤。</code>

<code>   </code><code>-A 裝配模式</code>

<code>   </code><code>-F 監控模式</code>

<code>   </code><code>-f(标記為損壞),-r(remove),-a(add)管理模式</code>

<code>RAID_DEVICE:</code>

<code>   </code><code>/dev/md</code><code># [0,]</code>

<code>   </code><code>開機RAID裝置名,可能發生變化,挂載用LABEL或UUID。</code>

<code>   </code> 

<code>OPTIONS:</code>

<code>   </code><code>-D RAID_DEVICE      </code><code>## 顯示RAID裝置的詳細資訊</code>

<code>   </code><code>-S RAID_DEVICE      </code><code>## 停止RAID裝置</code>

<code>componet-device: </code>

<code>    </code><code>-n </code><code># 和 -x # 所指定的所有磁盤塊對應的裝置檔案名,支援指令行展開{f,b}_{d,c}</code>

<code>    </code><code>分區(在同一個磁盤不同的分區(單個分區壞了整個磁盤壞了,沒有磁盤的備援。建議使用不同磁</code>

<code>    </code><code>盤的不同分區))</code>

<code>    </code><code>整個磁盤</code>

<code>    </code> 

<code>cat</code> <code>/proc/mdstat</code>       <code>## 觀察md裝置的狀态</code>

<code>watch</code> <code>-n</code><code># 'COMMAND'    ## 由#指定的秒數進行每#秒運作一次COMMAND,實作動态觀察指令的結果。</code>

<code>   </code><code># watch -n1 'cat /proc/mdstat'</code>

<code>   </code><code># watch -n1 'date'</code>

<code>   </code><code># watch -n1 'ifconfig'</code>

  3、對選項的注釋

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

<code>1、完成分區,調整為fd</code>

<code>[root@localhost ~]</code><code># fdisk  /dev/sdb</code>

<code>顯示分區表: p</code>

<code>添加/删除分區:n</code><code>/d</code>

<code>  </code><code>主分區p,擴充分區e</code>

<code>調整</code><code>id</code><code>号: t</code>

<code>n,1, ,+5G,t,1,fd</code>

<code>n,2, ,+5G,t,2,fd</code>

<code>n,3, ,+5G,t,3,fd</code>

<code>w</code>

<code>[root@localhost ~]</code><code># partx -a /dev/sdb</code>

<code>2、建立RAID:</code>

<code>[root@localhost ~]</code><code># mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sdb{1,2,3}</code>

<code>3、檢視狀态</code>

<code>[root@localhost ~]</code><code># watch -n1 'cat /proc/mdstat'</code>

<code>    </code><code>逐位對齊,異或運算</code>

<code>Personalities : [raid0] [raid6] [raid5] [raid4] </code>

<code>md0 : active raid5 sdb3[3] sdb2[1] sdb1[0]</code>

<code>      </code><code>10498048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3</code><code>/3</code><code>] [UUU]</code>

<code>      </code> 

<code>unused devices: &lt;none&gt;</code>

<code>4、檢視RAID狀态 </code>

<code>[root@localhost ~]</code><code># mdadm -D /dev/md0</code>

<code>     </code><code>Raid Level : raid5                           </code><code>## -l 對應的級别</code>

<code>     </code><code>Array Size : 10498048 (10.01 GiB 10.75 GB)   </code><code>## 陣列大小</code>

<code>  </code><code>Used Dev Size : 5249024 (5.01 GiB 5.38 GB)      </code><code>## 已用空間(校驗盤的空間)</code>

<code>   </code><code>Raid Devices : 3                               </code><code>## 建立時,-n # 指定RAID裝置的個數</code>

<code>  </code><code>Total Devices : 3                               </code><code>## 建立時,-n 和-x指定裝置的個數</code>

<code>     </code><code>Layout : left-symmetric                      </code><code>## 預設左對稱</code>

<code>     </code><code>Chunk Size : 512K                            </code><code>## 沒有指定的預設大小為512K</code>

<code>[root@localhost ~]</code><code># </code>

<code>5、建立ext3檔案系統</code>

<code>[root@localhost ~]</code><code># mke2fs -j /dev/md0</code>

<code>mke2fs 1.41.12 (17-May-2010)</code>

<code>檔案系統标簽=</code>

<code>塊大小=4096 (log=2)</code>

<code>131225 blocks (5.00%) reserved </code><code>for</code> <code>the super user</code>

<code>Superblock backups stored on blocks: </code>

<code>    </code><code>32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632</code>

<code>6、檢視裝置屬性資訊</code>

<code>  </code><code>[root@localhost ~]</code><code># blkid /dev/md0</code>

<code>/dev/md0</code><code>: UUID=</code><code>"baf5e95b-fbb0-479a-9f69-97e890fdffbe"</code> <code>SEC_TYPE=</code><code>"ext2"</code> <code>TYPE=</code><code>"ext3"</code> 

<code>7、設定LABEL</code>

<code>[root@localhost ~]</code><code># tune2fs -L 'MY222' /dev/md0</code>

<code>[root@localhost ~]</code><code># e2label /dev/md0 ‘MY222'</code>

<code>8、檢視LABEL</code>

<code>[root@localhost ~]</code><code># e2label /dev/md0</code>

<code>MY222</code>

<code>[root@localhost ~]</code><code># blkid /dev/md0</code>

<code>/dev/md0</code><code>: UUID=</code><code>"baf5e95b-fbb0-479a-9f69-97e890fdffbe"</code> <code>SEC_TYPE=</code><code>"ext2"</code> <code>TYPE=</code><code>"ext3"</code> <code>LABEL=</code><code>"MY222"</code> 

<code>9、檢視預設挂載屬性</code>

<code>[root@localhost ~]</code><code># tune2fs -l /dev/md0</code>

<code>[root@localhost ~]</code><code># dumpe2fs -h /dev/md0</code>

<code>Default </code><code>mount</code> <code>options:    (none)</code>

<code>Filesystem features:      has_journal 檔案系統 為日志型檔案系統</code>

<code>10、挂載檔案系統至根檔案系統下的某個空目錄中,(如果有檔案會被暫時隐藏)</code>

<code>1)建立目錄</code>

<code>[root@localhost ~]</code><code># install -d -m 700 /mydata</code>

<code>2)檢視目錄是否存在</code>

<code>[root@localhost ~]</code><code># [ -d /mydata ]</code>

<code>[root@localhost ~]</code><code># echo $?</code>

<code>0</code>

<code>[root@localhost ~]</code><code># find / -maxdepth 1 -type d -perm 700 -ls</code>

<code> </code><code>-maxdepth levels </code><code>## 檢視指定路徑下的由Levels指定級别的目錄</code>

<code>3)挂載檔案系統至目錄</code>

<code>1)、按裝置名挂載</code>

<code>[root@localhost ~]</code><code># mount /dev/md0 /mydata</code>

<code>[root@localhost ~]</code><code># mount | fgrep /mydata</code>

<code>/dev/md0</code> <code>on </code><code>/mydata</code> <code>type</code> <code>ext3 (rw)</code>

<code> </code><code>## 按裝置解除安裝: [root@localhost ~]# umount /dev/md0</code>

<code> </code><code>2)、按UUID挂載</code>

<code>[root@localhost ~]</code><code># mount -U "baf5e95b-fbb0-479a-9f69-97e890fdffbe" /mydata</code>

<code> </code><code>## 按目錄解除安裝[root@localhost ~]# umount /mydata</code>

<code> </code><code>3)、按LABEL挂載  </code>

<code> </code><code># mount | fgrep /mydata</code>

<code> </code> 

<code> </code><code>4)改變為降級模式</code>

<code>[root@localhost ~]</code><code># install -m 640 /etc/fstab /mydata/not_exist  ## 目标檔案不存在,複制重命名</code>

<code>[root@localhost ~]</code><code># ls -l /mydata/not_exist</code>

<code>-rw-r----- 1 root root 1093 8月  12 08:34 </code><code>/mydata/not_exist</code>

<code>[root@localhost ~]</code><code># mdadm /dev/md0 -f /dev/sdb1</code>

<code>mdadm: </code><code>set</code> <code>/dev/sdb1</code> <code>faulty </code><code>in</code> <code>/dev/md0</code>

<code>5)檢視狀态</code>

<code>    </code><code>Number   Major   Minor   RaidDevice State</code>

<code>       </code><code>0       0        0        0      removed</code>

<code>       </code><code>1       8       18        1      active </code><code>sync</code>   <code>/dev/sdb2</code>

<code>       </code><code>3       8       19        2      active </code><code>sync</code>   <code>/dev/sdb3</code>

<code>       </code><code>0       8       17        -      faulty   </code><code>/dev/sdb1</code>  <code>## 裝置标記為失敗</code>

<code>6)測試降級模式是否能檢視檔案内容</code>

<code>[root@localhost ~]</code><code># cat /mydata/not_exist </code>

<code>#</code>

<code># /etc/fstab</code>

<code># Created by anaconda on Thu Aug  3 08:30:25 2017</code>

<code># Accessible filesystems, by reference, are maintained under '/dev/disk'</code>

<code># See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info</code>

<code>/dev/mapper/myvg-lv_root</code> <code>/                       ext4    defaults        1 1</code>

<code>UUID=5009dc18-28f5-4b32-8c7c-0ea1328ea224 </code><code>/boot</code>                   <code>ext4    defaults        1 2</code>

<code>7)拆除壞的裝置</code>

<code>[root@localhost ~]</code><code># mdadm /dev/md0 -r /dev/sdb1</code>

<code>mdadm: hot removed </code><code>/dev/sdb1</code> <code>from </code><code>/dev/md0</code>

<code>8)換新裝置,裝置</code><code>id</code><code>: fd</code>

<code>[root@localhost ~]</code><code># mdadm /dev/md0 -a /dev/sdb1</code>

<code>9)觀察狀态</code>

<code>1)、恢複模式</code>

<code> </code><code>State :   clean, degraded, recovering  </code><code># 降級和恢複模式</code>

<code> </code><code>Active Devices : 2           </code><code>## 活動裝置2</code>

<code>Working Devices : 3           </code><code>## 工作裝置3</code>

<code> </code><code>Failed Devices : 0</code>

<code>  </code><code>Spare Devices : 1</code>

<code> </code><code>Rebuild Status : 34% complete         </code><code>##  恢複34%</code>

<code>       </code><code>4       8       17        0      spare rebuilding   </code><code>/dev/sdb1</code>  <code>## 根據異或運算,對位重建/dev/sdb1</code>

<code>2)、恢複完畢   </code>

<code>          </code><code>State : clean </code>

<code> </code><code>Active Devices : 3</code>

<code>Working Devices : 3</code>

<code>  </code><code>Spare Devices : 0</code>

<code>         </code><code>Layout : left-symmetric</code>

<code>     </code><code>Chunk Size : 512K</code>

<code>       </code><code>4       8       17        0      active </code><code>sync</code>   <code>/dev/sdb1</code>

<code>       </code> 

<code>10)解除安裝</code>

<code>[root@localhost ~]</code><code># umount /mydata</code>

<code>11)停止裝置</code>

<code>[root@localhost ~]</code><code># mdadm -S /dev/md0</code>

<code>mdadm: stopped </code><code>/dev/md0</code>

<code></code>

本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1955665,如需轉載請自行聯系原作者

繼續閱讀