生産環境中常用RAID:
0、1、5、6、10
#存儲一般使用10
raid功能:
1.保證資料的完整性(備援)
2.硬碟容錯
3.提高性能
mdadm
1.建立raid(裝置檔案:/dev/md0,/dev/md1...)
2.配置檔案:/etc/mdadm.conf
3.建立raid時一定要添加“-a yes”選項,保證自動建立/dev/md1或/dev/mdN裝置檔案。
RAID0:條帶化
1.無奇偶校驗
2.資料是分段的
3.循環寫入資料到多個硬碟
4.提供大的吞吐量(寫性能優秀)
5.無容錯機制,存儲機率為100%(即存儲容量=硬碟總容量)
6.可以設定chunk size
7.磁盤數愈多壞的可能性越大,一塊盤損壞會導緻所有資料的損壞。
Chunk size和stribe (RAID0,RAID5,RAID6有這個概念)
1. 一個資料包的大小稱之為chunk size:RAID裡面每個成員一次寫入的資料量。當一次寫入的量不到chunk size設定的大小的時候是不會寫入下一個成員盤。chunk size的值必須是多個page size的大小,在X86架構下一個page size的大小是4KB即chunk size的大小必須是2的N次方 n大于1 必須是4的倍數。
stride是每次寫入raid成員的block數,即64KB的資料要寫多少次。stride 等于 chunk size / filesystem block size,建立檔案系統時指定。
2. chunksize=(avgrq-sz × 512)/(raid磁盤數 × 1024)=2的N次方KBim/disk
stride=chunksize/filesystemblocksize
執行個體:
[root@iscsi-server ~]# iostat -x /dev/sdb
Linux 2.6.18-194.el5 (iscsi-server) 2011年08月12日
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.02 0.09 0.07 0.00 99.77
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sdb 2.41 1.17 0.40 0.03 19.07 9.55 65.17 0.00 4.75 0.85 0.04
#查詢磁盤的avgrq-sz,avgrq-sz是扇區數,每個扇區512Bit
Chunksize=(65.17×512)/(3×1024)=10.86=8KBit/disk
Stribe=(8KBit/disk)/(4KBit)=2
3.指定chunk size和stribe
#mdadm -C /dev/md0 -a -yes -l 0 -n 2 --chunk=64 /dev/sda1 /dev/sdb1
#mkfs.ext3 -b 4096 -E stribe=16 /dev/md0
RAID1:鏡像卷
1.全鏡像,
2.資料複制,提升了大的容錯能力,
3.提高了讀性能
4.至少兩塊盤
5.存儲機率:(100/N)%(N=硬碟數)
6.建立:#mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sda1 /dev/sdb1
RAID5:通過奇偶校驗的條帶(平均分布的奇偶校驗)
1.通過奇偶校驗的條帶化
2.提高性能和容錯能力
3.對于修改資料性能很差(每修改一次資料要對資料重新做一次奇偶校驗,當資料的修改量大于25%的時候不建議使用RAID5)
修改資料時會做4次I/O操作
3.1.讀取資料
3.2.更新資料,寫回到磁盤,奇偶校驗不正确
3.3.讀raid的所有磁盤,重新做奇偶校驗檢查
3.4.更新資料和奇偶校驗。
4.至少3快硬碟
5.存儲效率:100(1-1/N)%
6.一旦有raid裝置損壞,RAID立即進入降級模式,支援熱備盤。
7.支援四種奇偶校驗布局(--layout=<type>):Left Asymmetric、Right Asymmetric、Left Symmetric(預設布局)、Right symmetric
Left Asymmetric Right Asymmetric
sda1 sdb1 sdc1 sde1 sda1 sdb1 sdc1 sde1
D0 D1 D2 P P D0 D1 D2
D3 D4 P D5 D3 P D4 D5
D6 P D7 D8 D6 D7 P D8
P D9 D10 D11 D9 D10 D11 P
D12 D13 D14 P P D12 D13 D14
... ...
Left Symmetric Right Symmetric
D4 D5 P D3 D5 P D3 D4
D8 P D6 D7 D7 D8 P D6
8.建立raid5:#mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sd[abc]1
RAID6(5+1)
1.兩份奇偶校驗的條帶化
2.奇偶校驗比RAID5更慢,資料開銷更大,提供更多容錯
3.兩塊盤損壞時進入降級模式
4.至少4塊磁盤
5.存儲效率:100(1-2/N)%
6.建立RAID6
#mdadm -C /dev/md0 -a yes -l 6 -n 4 /dev/sd[abcd]1
RAID10(1+0)
1.帶鏡像的條帶化
3.至少4塊盤
4.存儲效率:(100/N)%
5.建立RAID10
mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sd[abcd]1
檢視RAID狀态(/proc/mdstat)
1.mdadm --scan
2.watch -n .5 'cat /proc/mdstat'
3.mdadm -D /dev/md0或mdadm --detail /dev/md0
4.SYSFS Interface:/sys/block/mdX/md
/etc/mdadm.conf
1.管理和配置RAID架構
2.允許分組為多RAID提高熱備盤
3.為已存在raid建立配置檔案:
#mdadm --examine --scan
#mdadm -D -s #-s:掃描
eg:
[root@station3 ~]#mdadm -D -s > /etc/mdadm.conf
[root@station3 ~]#vim /etc/mdadm.conf
ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=90efacda:657cee38:87172dab:543d8c23
devices=/dev/sda1,/dev/sdb1,/dev/sdc1 auto=yes
#如果裝置是/dev/md1或以上的話,必須加上auto=yes
#一行開頭為空格表示該行接上一行。
事件通知
1.要求email工作正常
2./etc/mdadm.conf #當raid出現故障時,可發送郵件或執行腳本
MAILADDR [email protected] #郵件接收者
MAILFROM [email protected] #郵件發送者
PROGRAM /usr/sbin/my-RAID-script #執行腳本
3.測試工具:mdadm --monitor --scan --oneshot --test
mdadm -Fs1t
4.要求啟動mdmonitor服務 #預設該服務是無法啟動,必須在/etc/mdadm.conf中添加MAILADDR等故障告知處理
RAID調整
重新做raid、重新條帶化、重新改變raid的布局
1.調整裝置數量
2.調整chunksize大小
3.改變資料布局
4.改變校驗的位置和類型
在做RAID調整時必須備份關鍵區
拉伸磁盤到raid5中
[root@station3 ~]#mdadm /dev/md0 -a /dev/sda8
[root@station3 ~]#mdadm /dev/md0 -a /dev/sda9
[root@station3 ~]#mdadm -G /dev/md0 -n 4 --backup-file=/tmp/md0.bu #指定将關鍵區備份到檔案,如果拉伸成功時,系統會自動删除該檔案
[root@station3 ~]#mdadm --assemble /dev/md0 --backup-file=/tmp/md0.bu /dev/sda[56789] #恢複
[root@station3 ~]#watch -n 1 'cat /proc/mdstat'
[root@station3 ~]#resize2fs /dev/md0 #調整檔案系統
共享熱備盤(熱備盤漂移)
1.至少有一個raid有熱備盤
2.将raid資訊寫入/etc/mdadm.conf中
3.建立共享熱備盤組:share1
4:為每個Raid 指定其共享的熱備盤組:spare-group=share1
e.g:
[root@station3 ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sda{10,11}
[root@station3 ~]# mdadm -D -s >> /etc/mdadm.conf
[root@station3 ~]# vim /etc/mdadm.conf
MAILADDR [email protected]
ARRAY /dev/md0 level=raid5 num-devices=4 spares=1 UUID=e1755b3f:13093e23:619799f8:2b921ce2 auto=yes
spare-group=share #共享組名可自定義
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d3cf69c6:a5c19ae7:f2f87e8b:8021e1b9 auto=yes
spare-group=share
[root@station3 ~]# service mdmonitor restart #要求重新開機mdmonitor服務
[root@station3 ~]# mdadm -D /dev/md0
...
Number Major Minor RaidDevice State
0 8 5 0 active sync /dev/sda5
1 8 6 1 active sync /dev/sda6
2 8 7 2 active sync /dev/sda7
3 8 8 3 active sync /dev/sda8
4 8 9 - spare /dev/sda9
#熱備盤為/dev/md0中/dev/sd9
[root@station3 ~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
0 8 10 0 active sync /dev/sda10
1 8 11 1 active sync /dev/sda11
[root@station3 ~]# mdadm /dev/md1 -f /dev/sda11
Number Major Minor RaidDevice State
1 8 9 1 active sync /dev/sda9
2 8 11 - faulty spare /dev/sda11
#md1中/dev/sda11出現故障後,熱備盤/dev/sda9自動漂移到md1中了
[root@station3 ~]# mdadm /dev/md1 -r /dev/sda11
[root@station3 ~]# mdadm /dev/md1 -a /dev/sda11
2 8 11 - spare /dev/sda11
#md1更換硬碟後,新加硬碟會再次變成熱備盤
重命名RAID
1.移動一個raid到移到一個新系統
2./dev/md0等裝置被新系統占用。
[root@station3 ~]# mdadm -S /dev/md1
[root@station3 ~]# mdadm --assemble /dev/md2 -a yes --super-minor=1 --update=super-minor /dev/sda10 /dev/sda9
#--super-minor=1,1為原來要改的/dev/mdX号,這裡為/dev/md1
#要指定原來RAID組成的磁盤。
raid 1的位圖(僅對raid 1有效)
位圖bitmap:預防raid磁盤在寫期間被阻斷。保證同步失敗時,下次同步時直接從改變的地方直接同步,無需從頭再來。
分為内部位圖和外部位圖
1.添加一個内部位圖區
#mdadm /dev/md0 -G -b internal
2.添加一個外部位圖區
#mdadm /dev/md0 ---grow --bitmap=/absolute/path
3.建立raid1時,指定寫入周期
#mdadm -C /dev/md0 -l1 -n2 -b /tmp/md0 --write-behind=256 /dev/sdc1 --write-mostly /dev/sdd1
在一個慢裝置/dev/sdd1上建立raid,以上表示當在對裝置/dev/sdc1的寫請求達到256個是開始往慢裝置/dev/sdd1發送寫請求,僅對raid 1有效。
raid錯誤處理和資料一緻性的檢查
打開壞塊的檢查。
#echo check >> /sys/block/mdX/md/sync_action #要求寫入開機腳本/etc/rc.d/rc.local。
本文轉自netsword 51CTO部落格,原文連結:http://blog.51cto.com/netsword/765038