文档章节

基于软件的方式实现RAID(冗余磁盘阵列)技术

Andy-xu
 Andy-xu
发布于 2014/07/18 17:26
字数 2249
阅读 278
收藏 13
点赞 0
评论 0

        在摘要部分已经对raid进行了简单的介绍,而在实际生产中主要用的便是软件RAID和硬件RAID,同时由于硬件RAID的价钱比较贵,因而,越来越多的人使用软件RAID来构建企业的一套存储方案。那么,使用RAID的最大好处是什么呢?哈哈,当然就是省钱了啊,同时RAID技术具有以下优点:

        提高传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。

        通过数据校验提供容错功能。普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性。

简单介绍以下常用的几种RAID模式:

RAID0:磁盘分条技术,效率最高至少一块硬盘。只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。RAID 0没有提供冗余或错误修复能力,实现交叉复制,总容量是所有磁盘的综合。但是缺点也很致命,即如果任何一块硬盘损坏,数据就很难恢复。

RAID1:磁盘镜像技术,最少两块硬盘。原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证 系统的可靠性和可修复性上,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效 时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。安全性最高,但是磁盘利用率仅有50%,也就是说凉快硬盘,实际只有一块的容量。

RAID5:一种带校验的磁盘分条技术,为系统提供数据安全保障,最少需要三块硬盘,可以支持一块磁盘损坏。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低,是目前运用较多的一种解决方案。

                                        RAID5原理图

同时基于RAID0和RAID1的优缺点,经常会有人讲两个结合使用,成为RAID0+1或者RAID1+0(至少四块硬盘),既能满足磁盘的读写性能,又能保障数据的可靠性。在这里不多介绍,感兴趣的可以下去自己多多了解。






接下来将在试验环境下构建RAID5存储方案:

环境:Centos 6.5

软件环境:mdadm

#yum install mdadm -y

要求:利用四块分区做成RAID5
         每个分区1G,最好每个分区一样大
        使用一块分区作为spare disk,且大小与其他一样,作为备用磁盘
         将此RAID5设备挂载到/mnt/raid下

1.使用fdisk工具准备5个1G的分区

#fdisk -cu /dev/sdb

# cat /proc/partitions

  8       21    1048576 sdb5
   8       22    1048576 sdb6
   8       23    1048576 sdb7
   8       24    1048576 sdb8
   8       25    1048576 sdb9

2.创建raid磁盘阵列

 # mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sdb{5,6,7,8,9}

--create表示创建raid   --auto 决定创建后面接的软件磁盘阵列设备/dev/md0  --leavel表示raid的等级,这里使用raid5

--raid-devices表示使用的磁盘个数  --spare-devices表示使用备用磁盘个数 并且指定那些磁盘分区

3.查看创建好的设备

# mdadm --detail /dev/md0                         查看raid设备信息
/dev/md0:                                                    设备名称
        Version : 1.2
  Creation Time : Fri Jul 18 03:41:56 2014      创建日期
     Raid Level : raid5                                        raid等级
     Array Size : 3142656 (3.00 GiB 3.22 GB)    可用容量
  Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB)    每个磁盘的容量
   Raid Devices : 4                                              四块raid设备
  Total Devices : 5                                                总共五块设备(一块在做备份用哦)
    Persistence : Superblock is persistent
    Update Time : Fri Jul 18 03:42:04 2014
          State : clean
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1                                            一块作为备份磁盘
         Layout : left-symmetric
     Chunk Size : 512K
           Name : node1.example.com:0  (local to host node1.example.com)
           UUID : 69e94971:195da1d1:ac94ce25:d330e237        raid的uuid
         Events : 18
    Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb5
       1       8       22        1      active sync   /dev/sdb6
       2       8       23        2      active sync   /dev/sdb7
       5       8       24        3      active sync   /dev/sdb8
       4       8       25        -      spare   /dev/sdb9

从上面的信息可以看出来,激活的磁盘为/dev/sdb5-8.  /dev/sdb9为备份磁盘

# cat /proc/mdstat         查看raid状态信息
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb8[5] sdb9[4](S) sdb7[2] sdb6[1] sdb5[0]
      3142656 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

sdb9后面的s表示此磁盘用作spare
第二行表明有3142656个block,每个block单位为1k。写入磁盘的小区块(chunk)大小为512k   [m/n]表示需要m个磁盘,n个盘正常运行   U代表正常,-代表不正常

4.挂载使用raid

#mkfs.ext4 /dev/md0
#mkdir /mnt/raid
#mount /dev/md0 /mnt/raid/

raid5设备/dev/md0现在可以正式使用咯!


RAID的错误救援模式:

试想,生产环境中谁也无法预料硬盘的损坏,如果突然损坏,我们应该怎么办呢?不用着急,接下来继续讲讲!

假如/dev/sdb8磁盘坏了,查看磁盘阵列信息,/dev/sdb9备用磁盘会自动替换
[root@node1 ~]# mdadm --manage /dev/md0 --fail /dev/sdb8          模拟磁盘错误
mdadm: set /dev/sdb8 faulty in /dev/md0
[root@node1 ~]# mdadm --detail /dev/md0                                         查看raid设备发现备用/dev/sdb9自动替换工作了
。。。。。。。。。。。。。。。。省略
    Update Time : Fri Jul 18 03:56:19 2014
          State : clean
 Active Devices : 4
Working Devices : 4                                                 坏了一个磁盘,但是工作设备仍然4个
 Failed Devices : 1         
                                           显示一个设备坏了哦
  Spare Devices : 0

    Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb5
       1       8       22        1      active sync   /dev/sdb6
       2       8       23        2      active sync   /dev/sdb7
       4       8       25        3      active sync   /dev/sdb9
       5       8       24        -      faulty spare   /dev/sdb8

那么为了保证真个raid存储的安全性,我们需要重新新建分区,作为新的spare分区。

仍然使用fdisk工具创建1G分区/dev/sdb10

1.增加一个磁盘设备,将损坏的设备移除,就可以直接拔掉硬盘了(注意,要支持热插拔哦)

[root@node1 ~]# mdadm --manage /dev/md0  --add /dev/sdb10 --remove /dev/sdb8
mdadm: added /dev/sdb10
mdadm: hot removed /dev/sdb8 from /dev/md0
重新查看raid设备信息,发现/dev/sdb10变成了备用磁盘了,/dev/sdb8删除了

现在,我们又能保障我们的RAID设备健壮的运行了。

2.设置RAID设备开机自动挂载

#mdadm --detail /dev/md0 | grep UUID            查看/dev/md0磁盘设备的UUID
#vim /etc/mdadm.conf   

(ARRAY /dev/md0  UUID=69e94971:195da1d1:ac94ce25:d330e237)
#vim /etc/fstab        

(/dev/md0  /mnt/raid ext4 defaults  1 2 )
#mount -a         重新挂载分区

这样,一个RAID5设备就完全构建好了!


注意:文章内容使用虚拟环境分区来模拟真实硬盘构建RAID,因此和生产环境有一定出入,希望大家能够适当借鉴。


© 著作权归作者所有

共有 人打赏支持
Andy-xu
粉丝 109
博文 95
码字总数 179246
作品 0
大兴
运维
RAID介绍

第1章 什么是Raid? Raid是廉价冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称,有时也简称磁盘阵列(Disk Array) Raid是一种把多块独立的物理磁盘按不同的技术方式组合起来形...

筚路
2016/05/08
0
0
Raid教程:全程图解手把手教你做RAID

说到磁盘阵列(RAID,Redundant Array of Independent Disks),现在几乎成了网管员所必须掌握的一门技术之一,特别是中小型企业,因为磁盘阵列应用非常广泛,它是当前数据备份的主要方案之一...

JavaGG
2009/05/08
1K
5
浅析数据存储的“那些事儿”

写在前面 对于运维来说,数据读取、安全与存储,也是至关重要的一点,数据存储的技术点也是相当的多,面比较广,今天,民工哥来给各位小伙伴聊一聊有关于数据存储的“那些事儿” 存储的概念介...

民工哥
02/07
0
0
RAID 0, RAID 1, RAID 5, RAID 10图解

RAID 0, RAID 1, RAID 5, RAID 10图解 RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同...

爱你的蔡
2017/03/21
0
0
RAID学习笔记

一、简介 名称:RAID廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks) 组织形式:多个独立的物理硬盘按照不同的方式组合起来,形成一个虚拟的硬盘。 优势: 1.易于灵活地进行容量的扩...

Liekkas_liuli
2017/06/30
0
0
raid技术-研究感受

RAID——Redundant Array of Inexpensive Disks 廉价磁盘冗余阵列 冗余不是多余 raid是将多块物理硬盘按照不同的方式组合起来形成一个硬盘组。提供比单个硬盘更高的存储性能和提供数据备份技...

tuest
2015/06/30
0
0
在Redhat Linux AS 4下实现软件RAID

一,系统配置信息: ● 操作系统为RedHat Linux AS 4; ● 内核版本为2.6.9-5.EL; ● 支持RAID0、RAID1、RAID4、RAID5、RAID6; ● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘...

zt371
2009/05/07
423
0
RAID(廉价磁盘冗余阵列)

RAID可以透过一个技术(软件和硬件),将多个较小的磁盘整合成为一个较大的磁盘装置;而这个较大的磁盘功能可不只是存储而已,它还具有数据保护功能,提升读写性能,所谓保护功能就是将一个数...

爱宇一生
2017/08/19
0
0
存储管理--RAID

RAID的全称是Redundant Array of Inexpensive Disks 可以释义为 廉价磁盘冗余阵列,后来的RAID里的字母I被认为是Independent,即独立的磁盘冗余阵列。 RAID的主要作用就是通过多个条带实现并...

whj3656
2017/05/25
0
0
RAID不同类型的磁盘组织方式介绍

RAID(独立磁盘冗余阵列) RAID是英文Redundant Array of Independent Disks的缩写,中文简称为独立磁盘冗余阵列。RAID技术分为几种不同的等级,分别可以提供不同的速度,安全性和性价比。根据...

侯施群
2016/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部