RAID的原理及实现

RAID的原理及实现

一、简介

  • RAID(独立磁盘冗余阵列,Redundant Array of Independent Disks),磁盘阵列技术。

  • 现代硬盘的缺陷:IO性能极弱、稳定性极差。

  • 硬盘性能的指标有两个:磁盘的吞吐量和IOPS(每秒进行读写(I/O)操作的次数)

  • 现代的计算机总线、内存的速度可以达到5G毎秒,甚至更高,但是硬盘

在这里插入图片描述

RAID (Redundant Array of Independent Disks)廉价磁盘冗余阵列技术是通过多磁盘并行运行来提高计算机的存储IO性能

RAID分为很多种类,称之为RIAD级别,现代RIAD共有7类,常用的有以下四类

  • RAID 0 读写性能

  • RAID 1 读取性能、冗余性

  • RAID 5 读写性能、冗余性(支持1块硬盘故障)

  • RAID 6 读写性能、冗余性(支持2块硬盘故障)

1.1、RAID 0

使用最少2块硬盘,两块磁盘的大小、型号规格要一样

在读写时,将数据分开读写到多块硬盘的方式来提高读写性能
数据条带化

在这里插入图片描述

空间利用率: 所有硬盘空间之和

性能: 所有硬盘速度之和

冗余能力: 无 也就是说没有备份

1.2、RAID 1

用最少2块硬盘,在写数据时,将数据复制写到多块硬盘,在读数据时,以提供冗余性,同时从多块硬盘读取数据,以提高读性能,对数据的安全要求非常严格,读取速度要求快,写入数据要求不是很高的系统会用RAID1

在这里插入图片描述

空间利用率: 所有磁盘中最小的那块

性能: 读性能为所有磁盘速度之和,写性能会有所减弱

冗余能力: 只要有一块磁盘正常,数裾就正常

1.3、RAID 5

RAID5最少使用3块硬盘即实现了raid1又实现了raid0,读写数据的时候会将数据分布式的读写在所有硬盘上,但是在写数据的时候会对数据进行奇偶校验运算,将校验信息同时保存在硬盘上

在这里插入图片描述

空间利用率: 1- (1/n)

性能: 读性能接近RAID0,写性能较RAID0弱一些

冗余能力: 可接受1块硬盘损坏

1.4、RAID1,0

img

二、RAID的实现

软件RAID 企业在使用 稳定速度快,没有独立硬件和接口,需要占用一定的系统资源(CPU、硬盘接口速度),并且受操作系统稳定性影响。

在Linux中软件RAID通过mdadm( multiple devices admin )这个程序实现

mdadm支持的RAID级别有: RAIDO、RAID1 RAID4、RAID5、RAID6

mdadm可以基于多块硬盘、分区或逻辑卷创建软件RAID,

创建好的软件RAID对应/dev/mdn,n为第几个RAID,如第一个创建的RIAD为/dev/mdO,第二个为/dev/mdl

RAID的信息保存在/proc/mdstat文件中,或通过mdadm命令査看

2.1、RAID 0,1,5的基本应用

2.1.1、创建RAID 0

先保证有至少两块磁盘

[root@postgres ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  0 disk 
├─sda1          8:1    0  200M  0 part /boot
└─sda2          8:2    0 39.8G  0 part 
  ├─rhel-root 253:0    0 36.8G  0 lvm  /
  └─rhel-swap 253:1    0    3G  0 lvm  [SWAP]
sdb             8:16   0    5G  0 disk 
sdc             8:32   0    5G  0 disk 
sdd             8:48   0    5G  0 disk 
sde             8:64   0    5G  0 disk 
sr0            11:0    1  4.2G  0 rom  
[root@postgres ~]# df -hl
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               1.9G     0  1.9G   0% /dev
tmpfs                  1.9G     0  1.9G   0% /dev/shm
tmpfs                  1.9G   13M  1.9G   1% /run
tmpfs                  1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   37G   22G   16G  58% /
/dev/sda1              197M  160M   37M  82% /boot
tmpfs                  378M  8.0K  378M   1% /run/user/42
tmpfs                  378M     0  378M   0% /run/user/0

创建RAID 0 ,然后把配置信息写入文件

[root@postgres ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb /dev/sdc
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@postgres ~]# mdadm -D --scan > /etc/mdadm.conf
[root@postgres ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=postgres:0 UUID=e5725052:eeb29c8a:f39b7781:e06ea8c0

mdadm 命令参数说明:

参数 说明
-C 创建一个新的 RAID 设备。
/dev/md0 指定创建的 RAID 设备的名称,表示新的 RAID 设备将命名为 /dev/md0
-a yes 自动确认所有提示,无需用户手动干预,直接允许创建 RAID 设备。
-l 0 指定 RAID 级别。在此为 0,表示创建 RAID 0(条带化),提供性能但无冗余。
-n 2 指定参与 RAID 的磁盘数量。在此为 2,表示使用两个磁盘。
/dev/sdb 参与 RAID 设备的第一个物理磁盘。
/dev/sdc 参与 RAID 设备的第二个物理磁盘。

格式化磁盘组,挂载磁盘组

## 可以看到raid磁盘组已经生效
[root@postgres ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda             8:0    0   40G  0 disk  
├─sda1          8:1    0  200M  0 part  /boot
└─sda2          8:2    0 39.8G  0 part  
  ├─rhel-root 253:0    0 36.8G  0 lvm   /
  └─rhel-swap 253:1    0    3G  0 lvm   [SWAP]
sdb             8:16   0    5G  0 disk  
└─md0           9:0    0   10G  0 raid0 
sdc             8:32   0    5G  0 disk  
└─md0           9:0    0   10G  0 raid0 
sdd             8:48   0    5G  0 disk  
sde             8:64   0    5G  0 disk  
sr0            11:0    1  4.2G  0 rom   

##格式化磁盘组
[root@postgres ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
655360 inodes, 2618880 blocks
130944 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@postgres ~]# df -hl
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               1.9G     0  1.9G   0% /dev
tmpfs                  1.9G     0  1.9G   0% /dev/shm
tmpfs                  1.9G   13M  1.9G   1% /run
tmpfs                  1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   37G   22G   16G  58% /
/dev/sda1              197M  160M   37M  82% /boot
tmpfs                  378M   12K  378M   1% /run/user/42
tmpfs                  378M     0  378M   0% /run/user/0

## 新建磁盘组挂载路径
[root@postgres /]# mkdir raid0_data
[root@postgres /]# mount /dev/md0 /raid0_data
[root@postgres /]# df -hl
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               1.9G     0  1.9G   0% /dev
tmpfs                  1.9G     0  1.9G   0% /dev/shm
tmpfs                  1.9G   13M  1.9G   1% /run
tmpfs                  1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   37G   22G   16G  58% /
/dev/sda1              197M  160M   37M  82% /boot
tmpfs                  378M   12K  378M   1% /run/user/42
tmpfs                  378M     0  378M   0% /run/user/0
/dev/md0               9.8G   37M  9.2G   1% /raid0_data
[root@postgres /]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda             8:0    0   40G  0 disk  
├─sda1          8:1    0  200M  0 part  /boot
└─sda2          8:2    0 39.8G  0 part  
  ├─rhel-root 253:0    0 36.8G  0 lvm   /
  └─rhel-swap 253:1    0    3G  0 lvm   [SWAP]
sdb             8:16   0    5G  0 disk  
└─md0           9:0    0   10G  0 raid0 /raid0_data
sdc             8:32   0    5G  0 disk  
└─md0           9:0    0   10G  0 raid0 /raid0_data
sdd             8:48   0    5G  0 disk  
sde             8:64   0    5G  0 disk  
sr0            11:0    1  4.2G  0 rom   
[root@postgres /]# 

查看RAID磁盘组信息

##显示当前系统中 RAID 设备的状态,包括各个 RAID 设备的活动状态和组成设备。
root@postgres /]# cat /proc/mdstat
Personalities : [raid0] 
md0 : active raid0 sdc[1] sdb[0]
      10475520 blocks super 1.2 512k chunks
      
unused devices: <none>

##显示指定 RAID 设备(这里是 /dev/md0)的详细信息,包括 RAID 级别、设备状态、参与的物理设备等。
[root@postgres /]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Oct 20 11:32:06 2024
        Raid Level : raid0
        Array Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Sun Oct 20 11:32:06 2024
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : postgres:0  (local to host postgres)
              UUID : e5725052:eeb29c8a:f39b7781:e06ea8c0
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      activ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值