Chinaunix首页 | 论坛 | 博客
  • 博客访问: 845510
  • 博文数量: 116
  • 博客积分: 1472
  • 博客等级: 上尉
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-06 11:45
文章分类

全部博文(116)

文章存档

2015年(1)

2014年(42)

2013年(5)

2012年(19)

2011年(49)

我的朋友

分类: LINUX

2014-08-07 08:50:24

原文:

数据在现今企业中占有重要的地位,数据存储的安全性有而是人们使用计算机要注意的重要问题之一.通常情况下人们在服务器端采用各种冗余磁盘阵列RAID技术

来保护数据,中高档的服务器一般都提供了昂贵的硬件RAID控制器,但是很多中小企业没有足够的经费承受这笔开销.我们有没有方法可以通过软件来实现RAID呢?
实际上在Linux下可以通过软件来实现硬件的RAID功能,这样既节省了投资,又能达到很好的效果.今天就由我为大家介绍如何在网络环境中实现带有一块Spare-disk的软RAID1(数据镜像)阵列.
小提示:什么是RAID1(数据镜像)?RAID1是比较可靠的数据存储方式,每一个磁盘都具有一个对应的镜像盘.对任何磁盘的数据写入都会被复制镜像盘中;系统可以从一组镜像盘中的任何一个磁盘读取数据,也就是说同一个数据会被重复写入两次,这样的磁盘镜像肯定会提高系统成本.因为我们所能使用的空间只是所有磁盘容量总和的一半.
由于本文中会使用mdadm软件,而该软件一般情况下都会集成在Redhat linux中,所以可以直接使用.如果系统中没有安装可以到~neilb/source /mdadm来下载mdadm-xxx.tgz进行编译安装,也可以到~neilb /source/mdadm/rpm下载mdadm-xxx.i386.rpm直接安装.

作为一个面向服务器的网络型操作系统,Linux对数据的安全和存取速度给予了高度重视,从2.4版内核开始Linux就实现了对软件RAID的支持,这让我们可以不必购买昂贵的硬件RAID设备,就能享受到增强的磁盘I/O性能和可靠性,进一步降低了系统的总体拥有成本.下面就让我们看一个

Redhat Linux AS 4下的软件RAID配置实例吧.
● 操作系统为RedHat Linux AS 4;
● 内核版本为2.6.9-5.EL;
● 支持RAID0、RAID1、RAID4、RAID5、RAID6;
● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库.
在RedHatAS4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定.而在早期Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了.
实现过程

一.几种常用RAID的简介
RAID是冗余磁盘阵列(Redundant Array of InexpensiveDisk)的简称.它是把多个磁盘组成一个阵列,当作单一磁盘使用.它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据.简单地说,其好处就是:安全性高、速度快、数据容量大.
磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID0~RAID 5.其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2,至于选择哪一种RAID需视用户的需求而定.下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍.
1.RAID 0
特点:它是将多个磁盘并列起来,成为一个大硬盘.在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中.在所有的级别中,RAID 0的速度是最快的.但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失.

磁盘利用数:n(假设有n个磁盘).
配置条件:最低两块磁盘,且分区大小尽量相同.
应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作.当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了.
2.RAID 1
特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据.因为有了备份磁盘,所以RAID1的数据安全性在所有的RAID 级别上来说是最好的.尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID0有同样的性能.

磁盘利用数:n/2.
配置条件:最低两块磁盘,且分区大小尽量相同.
应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域.再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式.
3.RAID 5
特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上.这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据.并行读写数据,性能也很高.

磁盘利用数:n-1.
配置条件:最低三块硬盘,且分区大小尽量相同.
应用领域:适合于事务处理环境,如售票处、销售系统等.

 

二、模式
 mdadm有6种模式,前两种模式:Create、Assemble用于配置和激活阵列;Manage模式用于操作在活动阵列中的设备;Follow或 Monitor模式允许管理员对活动阵列配置事件提醒和动作;Build模式用于对旧阵列使用旧版本的md驱动;还有Grow模式可以扩展阵列;剩下的是 Misc模式,它包括对多种内部的任务和没有指定特殊模式的一些操作.

三、部署
1、准备磁盘
 只能使用Sofware RAID格式的磁盘才能组成阵列,所以,首先我们要把做好磁盘格式.正如上面提到的,除了系统盘sda外,我们需要对sdb、sdc、sdd进行操作
a)对sdb进行分区
fdisk /dev/sdb

分区前状态:


n,划分区:


t,修改分区格式为fd:


w,保存:


b)同样的方法,对sdc、sdd进行分区和保存
最后状态如下:

2、创建阵列
 mdadm可以支持LINEAR、RAID0  (striping)、 RAID1(mirroring)、 RAID4、RAID5、RAID6和MULTIPATH的阵列模式.
创建命令格式如下:

mdadm [mode] [options]

例如:创建一个RAID 0设备:

mdadm –create –verbose /dev/md0 –level=0 –raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
–level表示创建的阵列模式,–raid-devices表示参与阵列的磁盘数量.

也可以这样表达,意思是一样的:
mdadm -Cv /dev/md0 -l0 -n3 /dev/sd[bcd]1
还可以增加-c128参数,指定chunk size为128K(默认64K) –spare-devices是加入热备.


 

3、配置文件
 mdadm不采用/etc/mdadm.conf作为主要配置文件,它可以完全不依赖该文件而不会影响阵列的正常工作.
 该配置文件的主要作用是方便跟踪软RAID的配置.对该配置文件进行配置是有好处的,但不是必须的.推荐对该文件进行配置.

通常可以这样来建立:


 

echo DEVICE /dev/sd[bcd]1 > /etc/mdadm.conf
mdadm -Ds >> /etc/mdadm.conf
mdadm –detail –scan >> /etc/mdadm.conf

4、格式化阵列
 后续,只要你把/dev/md0作为一个单独的设备来进行操作即可:
mkfs.ext3 /dev/md0
mkdir /mnt/test
mount /dev/md0 /mnt/test
5、若要开机自动挂载,请加入/etc/fstab中:
/dev/md0                /mnt/tes                auto    defaults        0 0

四、监控和管理

 mdadm可以非常方便的对阵列进行监控和管理的操作,也包括了停止和启动阵列等常用维护.

1、查看

 /proc/mdstat

可以查看所有使用md驱动的阵列的状态:

mdadm –detail /dev/md0
查看指定阵列的详细信息(-D):

2、停止

mdadm -S /dev/md0

停止指定阵列,并释放磁盘(–stop):

※注意:停止后,原组成阵列的磁盘将处于空闲状态,一旦吾操作这些磁盘,将不能再重启激活原阵列.
3、启动

mdadm -A /dev/md0 /dev/sd[bcd]1

启动指定的阵列,也可理解为讲一个新阵列装配到系统中(–assemble):

若你已经在上面配置了/etc/mdadm.conf文件,也可用-s查找:

mdadm -As /dev/md0


4、测试
 如果你没有配置/etc/mdadm.conf文件,而且又忘了某磁盘属于那个阵列,则你可以使用检测:(–examine)

mdadm -E /dev/sdb1


获得UUID后,也可以这样激活阵列:

mdadm -Av /dev/md0 –uuid=8ba81579:e20fb0e8:e040da0e:f0b3fec8 /dev/sd*

可以看到,只要磁盘没有损坏,这样装配是非常方便的:

5、添加及删除磁盘
 mdadm可以在Manage模式下,对运行中的阵列进行添加及删除磁盘.常用于标识failed磁盘,增加spare(冗余)磁盘,以及替换磁盘等.
例如:原来状态是:

则可以使用–fail指定坏磁盘,并–remove走:

mdadm /dev/md0 –fail /dev/sdc1 –remove /dev/sdc1



等待同步完成后,结果:

※需要注意的是,对于某些阵列模式,如RAID0等,是不能用–fail和–remove的.

增加一个新的阵列用磁盘

mdadm /dev/md0 –add /dev/sdc1


※需要注意的是,对于某些阵列模式,如RAID0等,是不能用–add的.
6、监控
 在Follow或Monitor状态下,可以使用mdadm对阵列进行监控,例如当阵列出现问题的时候,发送邮件给管理员;或者当磁盘出现问题的时候进行自动的磁盘替换.

nohup mdadm –monitor –mail=sysadmin –delay=300 /dev/md0 &

上述定义:没300秒监控一次,当阵列出现错误,会发送邮件给sysadmin用户.由于monitor启动后是不会自动退出的,所以需要加上nohup和&,使之持续在后台运行.
 在Follow模式下,是允许共享冗余磁盘的.
 例如,我们有两个阵列:/dev/md0、/dev/md1,而/dev/md0里面有一个spare磁盘.当我们在/etc/mdadm.conf中定义类似:
DEVICE  /dev/sd*
ARRAY   /dev/md0 level=raid1 num-devices=3 spare-group=database  
  UUID=410a299e:4cdd535e:169d3df4:48b7144a
ARRAY  /dev/md1 level=raid1 num-device=2 spare-group=database  
  UUID=59b6e564:739d4d28:ae0aa308:71147fe7
也就是定义一个spare-group组.并运行上面的monitor模式命令.这样,当组成/dev/md1的其中一个磁盘出现问题的时候,mdadm会自动从/dev/md0上移走spare磁盘,并加入/dev/md1中,而不需要人工干预.(请注意,能实现这样工作的,只有在该阵列支持冗余的情况下才能实现,如raid1、raid5等.而对于raid0等阵列模式,是无效的)

五、其他
1、增加spare磁盘
 可以通过在创建的时候指定冗余磁盘:

mdadm -Cv /dev/md0 -l1 -n2 -x1 /dev/sd[bcd]1

-x(–spare-devices)参数用于指定冗余磁盘的数量,结果:

 另外,对于full的阵列(例如已经有2个磁盘的RAID1),则直接使用-add参数,mdadm会自动把冗余的磁盘作为spare disk.
2、删除阵列

mdadm -S /dev/md0

rm /dev/md0

修改/etc/mdadm.conf、/etc/fstab等配置文件,把相关的地方去掉;
最后,用fdisk对磁盘进行重新分区即可.
3、重建阵列
 我们也可以在没有fdisk的情况下把使用过,但目前没有属于任何阵列的磁盘划分到新阵列中:

确认后即可.

六、附录

参考资料:
mdadm: A New Tool For Linux Software RAID Management

 

1.启用阵列 #mdadm -As /dev/md0 -A 启用已存在的阵列 -s 以/etc/mdadm.conf为依据 没有创建mdadm.conf文件,则采用如下方法启用

#mdadm -A /dev/md0 /dev/sd[bc]1

2.停止阵列 #mdadm -S /dev/md0

3.显示阵列详细信息 #mdadm -D /dev/md0

删除RAID中的硬盘

mdadm –stop /dev/md0 
mdadm –remove /dev/md0

mdadm –zero-superblock /dev/sda


阅读(3171) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~