常见服务器品牌包括:
IBM服务器、Dell服务器、HP服务器、浪潮服务器、华为服务器。
服务器硬件组成:
服务器和普通主机一样,也是由主板、内存、CPU、磁盘、网卡、显卡、电源、主机箱等硬件设备组成。
RAID磁盘阵列是Redundant Array of Independent Disks的缩写,中文简称为独立冗余磁盘阵列。它是把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术,然后把组成磁盘阵列的不同方式称为RAID级别(RAID Levels)。
常用的RAID级别: RAID0,RAID1,RAID5,RAID6,RAID1+0等。
定义:
RAID 0的特点:
示例图:
定义:
通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。
当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。
RAID 1是磁盘阵列中单位成本最高的。但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
RAID 1的特点:
最少需要两块磁盘
提供数据冗余(提供备份)
性能好
示例图:
定义:
N(N≥3)块盘组成阵列,一份数据产生N-1个条带,同时还有一份校验数据,共N份数据在N块盘上循环均衡存储
N块盘同时读写,读性能很高,但由于有校验机制的问题,写性能相对不高
(N-1)/N 磁盘利用率
可靠性高,允许坏一块盘,不影响所有数据
RAID 5的特点:
最少3块磁盘
数据条带形式分布
以奇偶校验作冗余
适合多读少写的情景,是性能与数据冗余最佳的折中方案
示意图:
定义:
示例图:
定义:
N (偶数,N>=4)。块盘两两镜像后,再组合成一个RAID 0
N/2磁盘利用率
N/2块盘同时写入,N/2块盘同时读取
性能高,可靠性高
注意:先做镜像,再做条带。
RAID1+0的特点:
最少4块磁盘
先按RAID 0 分成两组,再分别对两组按RAID 1 方式镜像
兼顾冗余(提供镜像存储)和性能(数据条带形式分布)
示意图:
RAID级别 | 硬盘数量要求 | 磁盘利用率 | 是否有冗余能力 | 读写性能 |
---|---|---|---|---|
RAID 0 | N | N | 无 | 单个硬盘的N倍 |
RAID 1 | N | N/2 | 有,允许一个设备故障 | 读性能提升,写没有提升 |
RAID 5 | N>=3 | (N-1)/N | 有,允许一个设备故障 | 需要多写一份纠删码,所以写性能相对RAID0低一些 |
RAID6 | N>=4 | (N-2)/N | 有,允许两个设备故障 | 需要多写两份纠删码,所以写性能相对RAID5更低一些 |
RAID10 | N>=4(偶数) | N/2 | 有,允许不同组中各坏一个 | 读性能可提升N倍,写性能提升N/2倍 |
其中N为磁盘的个数
定义:
阵列卡是用来实现RAID功能的板卡。通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列组件构成的。
阵列卡的类型:
第一种是 IDE阵列卡 ,以前主要用在一些数据重要或要接很多个硬盘的服务器与工作站电脑中,可以支持 RAID 0、RAID 1、RAID 0+1、RAID 3、RAID 5。 现基本上已经淘汰了。
第二种是 SATA阵列卡,主要作用于大容量数据存储、网吧、数据安全等服务器领域,同时一些低端卡也满足了一些家用客户的需求,能够支持 RAID 0、RAID 1、RAID 0+1、RAID 5 、RAID 6。
第三种是 SCSI阵列卡 使用在高端工作站或者是服务器中,可以支持很多块SCSI接口的硬盘。能够支持RAID 0、RAID 1、RAID 0+1、RAID 3、RAID 5 。这种阵列卡性能很好速度很快 当然价格也比较高。不过,现基本上已经淘汰了。
第四种是 SAS阵列卡 主要使用在一些高端工作站与服务器中,已经取代了昔日的SCSI接口,并且可以兼容SATA接口硬盘,能够支持 RAID 0、RAID 1、RAID 0+1、RAID 5 、RAID 50、RAID 6、RAID 60。
此RAID配置模拟器就能够很好的帮助你在没有硬件的条件下学习RAID配置,下面就具体演示一下RAID5和RAI10的配置:
打开RAID模拟器如下界面,有8块硬盘供你测试使用,清空配置或没有raid信息的情况下,磁盘应为如下状态:
此时选中页面的第一行或者第二行,按F2键,弹出命令行。回车选择“Create Virtual Drive”选项后创建虚拟设备。
回车之后弹出以下界面,选择RAID-5。
之后按空格键,选择加入raid阵列的磁盘,选中后,磁盘前的状态显示为“×”。然后其他选项不设置,一直按回车后点ok完成。
在第一个磁盘阵列中按"F2"键进行初始化,选择“Fast Init”进行快速初始化,然后就配置完成了。
打开RAID模拟器如下界面,有8块硬盘供你测试使用,清空配置或没有raid信息的情况下,磁盘应为如下状态:
此时选中页面的第一行或者第二行,按F2键,弹出命令行。回车选择“Create Virtual Drive”选项后创建虚拟设备。
回车之后弹出以下界面,选择RAID-10。
之后按空格键,选择加入raid阵列的磁盘,选中后,磁盘前的状态显示为“×”。然后其他选项不设置,一直按回车后点ok完成。
在第一个磁盘阵列中按"F2"键进行初始化,选择“Fast Init”进行快速初始化,然后就配置完成了。
如果想要配置全局热备份可以按Ctrl+N进行页面切换,切换后的页面如下:
选择空raid阵列的磁盘,按“F2”键,然后选择"Make Global HS",然后全局热备份就设置好了。
这里以RAID 5为例
mdadm -C -v /dev/md0 [-a yes] -l5 -n3 /dev/sd[bcd]1 -x1 /dev/sde1
各个选项及字段的含义:
-C
:表示新建;
-v
:显示创建过程中的详细信息。
/dev/md0
:创建 RAID5 的名称。
-a yes
:–auto,表示如果有什么设备文件没有存在的话就自动创建,可省略。
-l
:指定 RAID 的级别,l5
表示创建 RAID5。
-n
:指定使用几块硬盘创建 RAID,n3
表示使用 3 块硬盘创建 RAID。
/dev/sd[bcd]1
:指定使用这3块磁盘分区去创建 RAID。
-x
:指定使用几块硬盘做RAID的热备用盘,x1
表示保留1块空闲的硬盘作备用
基本命令格式
mdadm [选项] RAID设备
常用选项
选项 | 含义 |
---|---|
-r | 移除设备 |
-a | 添加设备 |
-S | 停止RAID |
-A | 启动RAID |
–detail | 打印一个或多个设备 |
–scan | 扫描配置文件 |
-E | 检测设备是否做过RAID |
-D | 查看RAID磁盘详细信息 |
mdadm -D /dev/md5
cat /proc/mdstat
//5表示每5秒监听一次
watch -n 5 'cat /proc/mdstat'
(1)检查是否已安装mdadm 软件包
[root@host ~]# rpm -q mdadm
(2)使用echo命令和换行将新磁盘设备/dev/sdb分出主分区sdb1,并且把分区类型的 ID 标记号改为“fd”
[root@host ~]# echo 'n
>
>
>
>
> t
> fd
> w' | fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x76f43aa2 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): Using default response p
分区号 (1-4,默认 1):起始 扇区 (2048-41943039,默认为 2048):将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):已选择分区 1
Hex 代码(输入 L 列出所有代码):已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):The partition table has been altered!
Calling ioctl() to re-read partition table.
[root@host ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 4G 0 part [SWAP]
└─sda2 8:2 0 36G 0 part /
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sdf 8:80 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom /mnt
使用echo -e命令将新磁盘设备/dev/sdc、/dev/sdd、/dev/sde分出主分区sdc1、sdd1、sde1,并且把分区类型的 ID 标记号改为“fd”
[root@host ~]# echo -e "n\n\n\n\n\nt\nfd\nw\n"| fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
...
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@host ~]# echo -e "n\n\n\n\n\nt\nfd\nw\n"| fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。
...
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@host ~]# echo -e "n\n\n\n\n\nt\nfd\nw\n"| fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
...
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@host ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 4G 0 part [SWAP]
└─sda2 8:2 0 36G 0 part /
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 20G 0 part
sde 8:64 0 20G 0 disk
└─sde1 8:65 0 20G 0 part
sdf 8:80 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom /mnt
(3)创建 RAID5 设备,并且用mdadm -D命令查看创建进度条
[root@host ~]# mdadm -Cv /dev/md5 -l5 -n3 /dev/sd[bcd]1 -x1 /dev/sde1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20953088K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@host ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Apr 6 17:00:45 2023
Raid Level : raid5
Array Size : 41906176 (39.96 GiB 42.91 GB)
Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Apr 6 17:01:31 2023
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 : 18% complete
Name : host:5 (local to host host)
UUID : d358a0c0:1548e64f:f5098105:bf5ea8ab
Events : 4
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
4 8 49 2 spare rebuilding /dev/sdd1
3 8 65 - spare /dev/sde1
(4)创建并挂在文件系统(临时挂载)
[root@host ~]# mkdir /data
[root@host ~]# mount /dev/md5 /data/
[root@host ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda2 xfs 36G 4.7G 32G 14% /
tmpfs tmpfs 378M 24K 378M 1% /run/user/0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /mnt
/dev/md5 xfs 40G 33M 40G 1% /data
永久挂载
[root@host ~]# vim /etc/fstab
/dev/md5 /data xfs defaults 0 0
(5)模拟设备故障
//设置数据
[root@host ~] # cd / data/
[root@host data] # ls
[root@host data] # echo a > a
[root@host data] # echo b > b
[root@host data] # echo c > c
[root@host data] # mkdir abc
[root@host data] # echo abc > abc/123.txt
[root@host data] # ll -R
.:
总用量12
-rw-r--r--. 1 root root 2 4月 6 18:00 a
drwxr-xr-x. 2 root root 21 4月 6 18:00 abc
-rw-r--r--. 1 root root 2 4月 6 18:00 b
-rw-r--r--. 1 root root 2 4月 6 18:00 c
./ abc:
总用量4
-rw-r--r--. 1 root root 4 4月 6 1 8:00 123.txt
[root@host data]# cd
//模拟sdb1设备故障
[root@host ~]# mdadm /dev/md5 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md5
//查看sde1已经代替sdb1工作了
[root@host ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md5 : active raid5 sdd1[4] sde1[3] sdc1[1] sdb1[0](F)
41906176 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
[>....................] recovery = 4.6% (980480/20953088) finish=8.8min speed=37710K/sec
unused devices:
//查看数据是否丢失
[root@host ~] # cd / data/
[root@host data] # ll -R
.:
总用量12
-rw-r--r--. 1 root root 2 4月 6 18:00 a
drwxr-xr-x. 2 root root 21 4月 6 18:00 abc
-rw-r--r--. 1 root root 2 4月 6 18:00 b
-rw-r--r--. 1 root root 2 4月 6 18:00 c
./ abc:
总用量4
-rw-r--r--. 1 root root 4 4月 6 1 8:00 123.txt
(6)实现故障移除
[root@host ~]# mdadm /dev/md5 -r /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md5
[root@host ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Apr 6 17:00:45 2023
Raid Level : raid5
Array Size : 41906176 (39.96 GiB 42.91 GB)
Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Apr 6 18:16:04 2023
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : host:5 (local to host host)
UUID : d358a0c0:1548e64f:f5098105:bf5ea8ab
Events : 38
Number Major Minor RaidDevice State
3 8 65 0 active sync /dev/sde1
1 8 33 1 active sync /dev/sdc1
4 8 49 2 active sync /dev/sdd1
(1)检查是否已安装mdadm 软件包
[root@host ~]# rpm -q mdadm
mdadm-4.1-9.el7_9.x86_64
[root@host ~]#
(2)使用echo -e命令将新磁盘设备/dev/sdb 、/dev/sdc、/dev/sdd、/dev/sde分出主分区sdb1、sdc1、sdd1、sde1,并且把分区类型的 ID 标记号改为“fd”
[root@host ~]# echo -e "n\n\n\n\n\nt\nfd\nw\n"| fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
...
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@host ~]# echo -e "n\n\n\n\n\nt\nfd\nw\n"| fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
...
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@host ~]# echo -e "n\n\n\n\n\nt\nfd\nw\n"| fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。
...
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@host ~]# echo -e "n\n\n\n\n\nt\nfd\nw\n"| fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
...
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@host ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 4G 0 part [SWAP]
└─sda2 8:2 0 36G 0 part /
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 20G 0 part
sde 8:64 0 20G 0 disk
└─sde1 8:65 0 20G 0 part
sdf 8:80 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom /mnt
(3)创建 RAID 10 设备(先做镜像,再做条带)
//创建RAID 1
[root@host ~]# mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[bc]1
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: size set to 20953088K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
//创建RAID 1
[root@host ~]# mdadm -Cv /dev/md1 -l1 -n2 /dev/sd[de]1
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: size set to 20953088K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
//建立RAID 0
[root@host ~]# mdadm -Cv /dev/md10 -l0 -n2 /dev/md0 /dev/md1
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
(4)创建并挂载文件系统
[root@host ~]# mkfs.xfs /dev/md10
meta-data=/dev/md10 isize=512 agcount=16, agsize=654208 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10467328, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5112, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@host ~]# mkdir /data/
[root@host ~]# mount /dev/md10 /data
(5)创建 /etc/mdadm.conf 配置文件,方便管理软RAID的配置
[root@host ~]# mdadm --detail --scan >> /etc/mdadm.conf
[root@host ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=host:0 UUID=d00786d0:760a3135:088b4bcb:ea5fdcb9
ARRAY /dev/md1 metadata=1.2 name=host:1 UUID=1ccdd0bc:cf523468:28c0362d:f44cf976
ARRAY /dev/md10 metadata=1.2 name=host:10 UUID=ab01f0bc:f3c66339:676bea0f:a41df16e
(6)查看挂载情况
[root@host ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda2 xfs 36G 4.7G 32G 13% /
tmpfs tmpfs 378M 24K 378M 1% /run/user/0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /mnt
/dev/md10 xfs 40G 33M 40G 1% /data
(7)停止RAID后再重新启动
//解挂载
[root@host ~]# umount /dev/md10
//停止RAID
[root@host ~]# mdadm -S /dev/md10
mdadm: stopped /dev/md10
//重新启动
[root@host ~]# mdadm -A /dev/md10 /dev/md0 /dev/md1
mdadm: /dev/md10 has been started with 2 drives.
//查看RAID设备
[root@host ~]# ls /dev/md10
/dev/md10