RAID概念
磁盤陣列(Redundant Arrays of Independent Disks,RAID)勒魔,有“獨立磁盤構(gòu)成的具有冗余能力的陣列”之意。 磁盤陣列是由很多價格較便宜的磁盤招刨,以硬件(RAID卡)或軟件(MDADM)形式組合成一個容量巨大的磁盤組暖释,利用多個磁盤組合在一起戚炫,提升整個磁盤系統(tǒng)效能剑刑。利用這項技術(shù),將數(shù)據(jù)切割成許多區(qū)段,分別存放在各個硬盤上施掏。 磁盤陣列還能利用同位檢查(Parity Check)的觀念钮惠,在數(shù)組中任意一個硬盤故障時,仍可讀出數(shù)據(jù)七芭,在數(shù)據(jù)素挽。
注:RAID可以預(yù)防數(shù)據(jù)丟失,但是它并不能完全保證你的數(shù)據(jù)不會丟失狸驳,所以大家使用RAID的同時還是注意備份重要的數(shù)據(jù)
RAID的創(chuàng)建有兩種方式:軟RAID(通過操作系統(tǒng)軟件來實現(xiàn))和硬RAID(使用硬件陣列卡)预明;了解raid1、raid5和raid10耙箍。不過隨著云的高速發(fā)展撰糠,供應(yīng)商一般可以把硬件問題解決掉。
RAID幾種常見的類型
| RAID類型 | 最低磁盤個數(shù) | 空間利用率 | 各自的優(yōu)缺點 |
| 級 別 | 說 明 |
| RAID0 | 條帶卷 | 2+ | 100% | 讀寫速度快辩昆,不容錯 |
| RAID1 | 鏡像卷 | 2 | 50% | 讀寫速度一般阅酪,容錯 |
| RAID5 | 帶奇偶校驗的條帶卷 | 3+ | (n-1)/n | 讀寫速度快,容錯汁针,允許壞一塊盤 |
| RAID10 | RAID1的安全+RAID0的高速 | 4 | 50% | 讀寫速度快术辐,容錯 |
RAID基本思想:把好幾塊硬盤通過一定組合方式把它組合起來,成為一個新的硬盤陣列組施无,從而使它能夠達(dá)到高性能硬盤的要求
RAID有三個關(guān)鍵技術(shù):
鏡像:提供了數(shù)據(jù)的安全性辉词;
條帶(塊大小也可以說是條帶的粒度),它的存在的就是提供了數(shù)據(jù)并發(fā)性
數(shù)據(jù)的校驗:提供了數(shù)據(jù)的安全
Raid相對于單個磁盤優(yōu)點:
RAID-0的工作原理
條帶 (strping)帆精,也是我們最早出現(xiàn)的RAID模式
需磁盤數(shù)量:2塊以上(大小最好相同)较屿,是組建磁盤陣列中最簡單的一種形式隧魄,只需要2塊以上的硬盤即可.特點:成本低卓练,可以提高整個磁盤的性能。RAID 0沒有提供冗余或錯誤修復(fù)能力购啄,速度快.任何一個磁盤的損壞將損壞全部數(shù)據(jù)襟企;磁盤利用率為100%。
RAID-1
mirroring(鏡像卷)狮含,需要磁盤兩塊以上
原理:是把一個磁盤的數(shù)據(jù)鏡像到另一個磁盤上顽悼,也就是說數(shù)據(jù)在寫入一塊磁盤的同時,會在另一塊閑置的磁盤上生成鏡像文件几迄,(同步)
RAID 1 mirroring(鏡像卷)蔚龙,至少需要兩塊硬盤
磁盤利用率為50%,即2塊100G的磁盤構(gòu)成RAID1只能提供100G的可用空間木羹。
RAID-5
需要三塊或以上硬盤,可以提供熱備盤實現(xiàn)故障的恢復(fù);只損壞一塊坑填,沒有問題抛人。但如果同時損壞兩塊磁盤,則數(shù)據(jù)將都會損壞脐瑰。 空間利用率: (n-1)/n 2/3
奇偶校驗信息的作用:
當(dāng)RAID5的一個磁盤數(shù)據(jù)發(fā)生損壞后妖枚,利用剩下的數(shù)據(jù)和相應(yīng)的奇偶校驗信息去恢復(fù)被損壞的數(shù)據(jù)。
擴展:異或運算
所謂的“奇偶校驗”可以簡單理解為二進(jìn)制運算中的“異或運算”苍在,通常用 xor 標(biāo)識绝页。
最左邊的是原始數(shù)據(jù),右邊分別是三塊硬盤寂恬,假設(shè)第二塊硬盤出了故障抒寂,通過第一塊硬盤上的 1 和第三塊硬盤上的 1 xor 2,就能夠還原出 2掠剑。同理可以還原出 3 和 8屈芜。至于 5 xor 6 則更簡單了,直接用 5 和 6 運算出來即可朴译。一句話解釋 raid 5 的數(shù)據(jù)恢復(fù)原理就是:都是用公式算出來的井佑。
嵌套RAID級別
RAID-10鏡像+條帶
RAID 10是將鏡像和條帶進(jìn)行兩級組合的RAID級別,第一級是RAID1鏡像對眠寿,第二級為RAID 0躬翁。比如我們有8塊盤,它是先兩兩做鏡像盯拱,形成了新的4塊盤盒发,然后對這4塊盤做RAID0;當(dāng)RAID10有一個硬盤受損其余硬盤會繼續(xù)工作狡逢,這個時候受影響的硬盤只有2塊
RAID硬盤失效處理
一般兩種處理方法:熱備和熱插拔
熱備:HotSpare
定義:當(dāng)冗余的RAID組中某個硬盤失效時宁舰,在不干擾當(dāng)前RAID系統(tǒng)的正常使用的情況下,用RAID系統(tǒng)中另外一個正常的備用硬盤自動頂替失效硬盤奢浑,及時保證RAID系統(tǒng)的冗余性
全局式:備用硬盤為系統(tǒng)中所有的冗余RAID組共享
專用式:備用硬盤為系統(tǒng)中某一組冗余RAID組專用
如下圖所示:是一個全局熱備的示例蛮艰,該熱備盤由系統(tǒng)中兩個RAID組共享,可自動頂替任何一個RAID中的一個失效硬盤
熱插拔:HotSwap
定義:在不影響系統(tǒng)正常運轉(zhuǎn)的情況下雀彼,用正常的物理硬盤替換RAID系統(tǒng)中失效硬盤壤蚜。
RAID-0-1-5-10搭建及使用-刪除RAID及注意事項
RAID的實現(xiàn)方式
面試題:我們做硬件RAID,是在裝系統(tǒng)前還是之后徊哑?
答:先做陣列才裝系統(tǒng) 袜刷,一般服務(wù)器啟動時,有顯示進(jìn)入配置Riad的提示莺丑。
硬RAID:需要RAID卡著蟹,我們的磁盤是接在RAID卡的,由它統(tǒng)一管理和控制。數(shù)據(jù)也由它來進(jìn)行分配和維護草则;它有自己的cpu钢拧,處理速度快
軟RAID:通過操作系統(tǒng)實現(xiàn)
Mdadm命令詳解
Linux內(nèi)核中有一個md(multiple devices)模塊在底層管理RAID設(shè)備,它會在應(yīng)用層給我們提供一個應(yīng)用程序的工具mdadm 炕横,mdadm是linux下用于創(chuàng)建和管理軟件RAID的命令源内。
mdadm
mdadm命令常見參數(shù)解釋:
| 參數(shù) | 作用 |
| -a | 檢測設(shè)備名稱
添加磁盤
| -n | 指定設(shè)備數(shù)量 |
| -l | 指定RAID級別 |
| -C | 創(chuàng)建 |
| -v | 顯示過程 |
| -f | 模擬設(shè)備損壞 |
| -r | 移除設(shè)備 |
| -Q | 查看摘要信息 |
| -D | 查看詳細(xì)信息 |
| -S | 停止RAID磁盤陣列 |
互動: raid5需要3塊硬盤。 那么使用4塊硬盤份殿,可以做raid5嗎膜钓?
可以的
實戰(zhàn)搭建raid10陣列
第一步:添加四塊磁盤
[root@ken ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
第二步:下載mdadm
[root@ken ~]# yum install mdadm -y
第三步:創(chuàng)建RAID10陣列
[root@ken ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sd{b,c,d,e}
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
第四步:查看陣列信息
[root@ken ~]# mdadm -D /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Wed May 15 18:39:37 2019
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed May 15 18:40:09 2019
State : clean, resyncing
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Resync Status : 15% complete
Name : ken:10 (local to host ken)
UUID : 9e7f9023:2a2fa0d0:14815344:78bc6f6b
Events : 2
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
第五步:格式化
[root@ken ~]# mkfs.xfs /dev/md10
meta-data=/dev/md10 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
第六步:掛載使用
[root@ken ~]# mount /dev/md10 /ken
[root@ken ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 1.4G 16G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/md10 40G 33M 40G 1% /ken
第七步:創(chuàng)建文件
[root@ken ~]# touch /ken/{1..100}.txt
[root@ken ~]# ls /ken
100.txt 17.txt 24.txt 31.txt 39.txt 46.txt 53.txt 60.txt 68.txt 75.txt 82.txt 8.txt 97.txt
10.txt 18.txt 25.txt 32.txt 3.txt 47.txt 54.txt 61.txt 69.txt 76.txt 83.txt 90.txt 98.txt
11.txt 19.txt 26.txt 33.txt 40.txt 48.txt 55.txt 62.txt 6.txt 77.txt 84.txt 91.txt 99.txt
12.txt 1.txt 27.txt 34.txt 41.txt 49.txt 56.txt 63.txt 70.txt 78.txt 85.txt 92.txt 9.txt
13.txt 20.txt 28.txt 35.txt 42.txt 4.txt 57.txt 64.txt 71.txt 79.txt 86.txt 93.txt
14.txt 21.txt 29.txt 36.txt 43.txt 50.txt 58.txt 65.txt 72.txt 7.txt 87.txt 94.txt
15.txt 22.txt 2.txt 37.txt 44.txt 51.txt 59.txt 66.txt 73.txt 80.txt 88.txt 95.txt
16.txt 23.txt 30.txt 38.txt 45.txt 52.txt 5.txt 67.txt 74.txt 81.txt 89.txt 96.txt
[root@ken ~]# umount /dev/md10
第八步:寫入到文件
方法一、
[root@ken ~]# echo “mount /dev/md10 /ken” >> /etc/rc.local
方法二卿嘲、
[root@ken ~]# echo “/dev/md10 /ken xfs defaults 0 0 ” >> /etc/fstab
損壞磁盤陣列及修復(fù)
之所以在生產(chǎn)環(huán)境中部署RAID 10磁盤陣列颂斜,是為了提高硬盤存儲設(shè)備的讀寫速度及數(shù)據(jù)的安全性,但由于我們的硬盤設(shè)備是在虛擬機中模擬出來的拾枣,因此對讀寫速度的改善可能并不直觀沃疮。
在確認(rèn)有一塊物理硬盤設(shè)備出現(xiàn)損壞而不能繼續(xù)正常使用后,應(yīng)該使用mdadm命令將其移除梅肤,然后查看RAID磁盤陣列的狀態(tài)司蔬,可以發(fā)現(xiàn)狀態(tài)已經(jīng)改變。
mdadm管理RAID10陣列–模擬磁盤損壞后的處理方式
第一步:模擬損壞磁盤
[root@ken ~]# mdadm /dev/md10 -f /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md10
[root@ken ~]# mdadm -D /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Wed May 15 18:39:37 2019
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed May 15 18:46:53 2019
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : ken:10 (local to host ken)
UUID : 9e7f9023:2a2fa0d0:14815344:78bc6f6b
Events : 26
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
– 0 0 2 removed
3 8 64 3 active sync set-B /dev/sde
2 8 48 – faulty /dev/sdd #顯示/dev/sdd磁盤已經(jīng)損壞
第二步:重啟
第三步:添加磁盤
[root@ken ~]# mdadm /dev/md10 -a /dev/sdd
mdadm: added /dev/sdd
[root@ken ~]# mdadm -D /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Wed May 15 18:39:37 2019
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed May 15 18:49:56 2019
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 9% complete
Name : ken:10 (local to host ken)
UUID : 9e7f9023:2a2fa0d0:14815344:78bc6f6b
Events : 29
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
4 8 48 2 spare rebuilding /dev/sdd
3 8 64 3 active sync set-B /dev/sde
實戰(zhàn)搭建raid5陣列+備份盤
為了避免多個實驗之間相互發(fā)生沖突姨蝴,我們需要保證每個實驗的相對獨立性俊啼,為此需要大家自行將虛擬機還原到初始狀態(tài)。另外左医,由于剛才已經(jīng)演示了RAID 10磁盤陣列的部署方法授帕,我們現(xiàn)在來看一下RAID 5的部署效果。部署RAID 5磁盤陣列時浮梢,至少需要用到3塊硬盤跛十,還需要再加一塊備份硬盤,所以總計需要在虛擬機中模擬4塊硬盤設(shè)備黔寇。
第一步:添加四塊磁盤
[root@ken ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
第二步:創(chuàng)建磁盤陣列RAID5
失敗演示:
[root@ken ~]# mdadm -C /dev/ken -l 5 -n 3 -x 1 /dev/sd{b,c,d,e} #磁盤陣列名需要以md開頭
mdadm: /dev/ken is an invalid name for an md device. Try /dev/md/ken
正確演示:
[root@ken ~]# mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
第三步:查看陣列信息
[root@ken ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Wed May 15 19:08:06 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed May 15 19:09:16 2019
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 44% complete
Name : ken:5 (local to host ken)
UUID : 118db989:9ac48e2f:30313d35:4a0268e7
Events : 8
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 spare rebuilding /dev/sdd
3 8 64 – spare /dev/sde
第四步:格式化
[root@ken ~]# mkfs.xfs /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
第五步:掛載
[root@ken ~]# mkdir /ken
[root@ken ~]# mount /dev/md5 /ken
mdadm管理RAID5陣列–模擬磁盤損壞后的處理方式
第一步:查看陣列狀態(tài)
[root@ken ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Wed May 15 19:08:06 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed May 15 19:11:12 2019
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : ken:5 (local to host ken)
UUID : 118db989:9ac48e2f:30313d35:4a0268e7
Events : 22
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
3 8 64 – spare /dev/sde
第二步:模擬/dev/sdd磁盤損壞
[root@ken ~]# mdadm /dev/md5 -f /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md5
第三步:查看陣列狀態(tài)
[root@ken ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Wed May 15 19:08:06 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed May 15 19:13:23 2019
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 9% complete
Name : ken:5 (local to host ken)
UUID : 118db989:9ac48e2f:30313d35:4a0268e7
Events : 25
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
3 8 64 2 spare rebuilding /dev/sde
4 8 48 – faulty /dev/sdd
centos7系統(tǒng)啟動過程及相關(guān)配置文件
1.uefi或BIOS初始化偶器,開始post(power on self test)開機自檢
2.加載MBR到內(nèi)存
3.GRUB階段
4.加載內(nèi)核和initramfs模塊
5.內(nèi)核開始初始化,使用systemd來代替centos6以前的init程序
(1)執(zhí)行initrd.target
包括掛載/etc/fstab文件中的系統(tǒng),此時掛載后缝裤,就可以切換到根目錄了
(2)從initramfs根文件系統(tǒng)切換到磁盤根目錄
(3)systemd執(zhí)行默認(rèn)target配置
centos7表面是有“運行級別”這個概念,實際上是為了兼容以前的系統(tǒng)颊郎,每個所謂的“運行級別”都有對應(yīng)的軟連接指向憋飞,默認(rèn)的啟動級別時/etc/systemd/system/default.target,根據(jù)它的指向可以找到系統(tǒng)要進(jìn)入哪個模式
模式:
0 ==> runlevel0.target, poweroff.target –>關(guān)機
1 ==> runlevel1.target, rescue.target –> 單人用戶模式
2 ==> runlevel2.target, multi-user.target –> 無網(wǎng)絡(luò)的多用戶模式
3 ==> runlevel3.target, multi-user.target –> 多用戶模式
4 ==> runlevel4.target, multi-user.target –> 保留位
5 ==> runlevel5.target, graphical.target –>圖形界面
6 ==> runlevel6.target, reboot.target –> 重啟
有沒有很眼熟?是的姆吭,在CentOS6上是被叫做rc.sysint程序榛做,初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)
(5)systemd啟動multi-user.target下的本機與服務(wù)器服務(wù)
(6)systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
6.Systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)
getty.target我們也眼熟,它是啟動終端的systemd對象。如果到此步驟检眯,系統(tǒng)沒有被指定啟動圖形桌面厘擂,到此就可以結(jié)束了,如果要啟動圖形界面锰瘸,需要在此基礎(chǔ)上啟動桌面程序
centos6系統(tǒng)中使用 /etc/inittab 管理運行級別刽严,但是在centos7中已經(jīng)廢棄了該文件
使用方式:
init 0 —》關(guān)機
init 3 —》多用戶模式
init5 —》圖形界面
7.systemd執(zhí)行g(shù)raphical需要的服務(wù)
CentOS6,7啟動區(qū)別
系統(tǒng)啟動和服務(wù)器守護進(jìn)程管理器避凝,它不同于centos5的Sysv init舞萄,centos6的Upstart(Ubuntu制作出來),systemd是由Redhat的一個員工首先提出來的管削,它在內(nèi)核啟動后倒脓,服務(wù)什么的全都被systemd接管,kernel只是用來管理硬件資源含思,相當(dāng)于內(nèi)核被架空了崎弃,因此linus很不滿意Redhat這種做法。