Total Pageviews

Monday, 16 July 2012

Linux环境中的软件RAID


RAID 1是最适合数据库环境的一种磁盘配置方式。理由主要有以下几点:
1,目前磁盘容量一般都远远超出数据库数据的容量,一般认为,如果单个MySQL实例的数据容量超过100G,就算是很大了,目前的服务器配置的单块磁盘容量基本都在300G以上,所以磁盘容量不是我们所担心的。
2, 互联网应用中的数据库,数据写入与读取比例一般会高于1 : 10,而且写入操作可以使用多种措施进行延迟写入,所以数据库应用对于磁盘的读取性能要求很高,对写入的性能要求相对低一些。从理论上说,RAID 1的写入性能与单块磁盘写入性能相近,读取性能基本等同于单块磁盘的性能X磁盘的数量。所以说RAID 1的磁盘配置满足了数据库对于读写性能的需求。
3,数据是最宝贵的资源,即使对于互联网应用,数据的安全性也是必须重视的,RAID 1 提供了最高级别的数据冗余。所以说RAID 1的磁盘配置满足了数据库对于数据安全性的要求。
4, 最基本的RAID 1的磁盘配置只需要两块磁盘即可,相对成本很低。由于RAID 1的原理简单,所以使用软件实现的RAID 1 也具有很好的性能表现,不需要使用昂贵的硬件RAID卡即可达到比较高的可靠性和读取性能,所以 RAID 1 是一种低成本的磁盘配置方式。

Linux 内核中实现了RAID 1的磁盘配置,模块名为raid1,可以使用modprobe raid1来加载。
Linux 环境下RAID磁盘配置的管理工具有多种,一般认为比较稳定好用的为mdadm。
以下为在CentOS 4.7环境下使用两块磁盘配置RAID 1 的操作过程:
使用/dev/sdb /dev/sdc创建RAID 1磁盘配置,新的设备名为/dev/md0 
[root@localhost ~]# mdadm --create --level=1 /dev/md0 --raid-devices=2 /dev/sdb /dev/sdc
mdadm: array /dev/md0 started.
通过查看/proc/mdstat来获知目前RAID的状态,可以看到正处于sync状态。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] md0 : active raid1 sdc[1] sdb[0] 8388544 blocks [2/2] [UU]  [===>.................] resync = 16.7% (1402368/8388544) finish=0.5min speed=200338K/sec unused devices:
现在已经sync完成。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] md0 : active raid1 sdc[1] sdb[0] 8388544 blocks [2/2] [UU] unused devices:
创建文件系统。
[root@localhost ~]# mkfs.ext3 /dev/md0 
将刚刚创建的文件系统加载。
[root@localhost ~]# mount -o noatime /dev/md0 /mnt/md0/ 
将RAID的配置写入系统配置文件,系统重新启动后会自动加载所有有效的RAID设备。 
[root@localhost ~]# cat /etc/mdadm.conf
DEVICE /dev/sdb /dev/sdc
ARRAY /dev/md0
devices=/dev/sdb,/dev/sdc
当两个磁盘设备中的任何一个失效后,系统仍然能够正常加载并运行。
mdadm还可以作为监控工具来使用,甚至可以发邮件给系统管理员。
参考资料:
RAID基本概念: http://en.wikipedia.org/wiki/RAID
The Software-RAID HOWTO: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
RAID_setup: http://linux-raid.osdl.org/index.php/RAID_setup
mdadm的manual文档: man 8 mdadm