RAID(Redundant Array of Inexpensive Disks):廉价磁盘冗余阵列

raid级别

特性

优点

缺点

raid0

也叫条带化(Stripe),按一定的条带大小将数据依次分布到各个磁盘,没有数据冗余

数据并发读写速度快,无额外磁盘空间开销,投资省

数据无冗余保护,可靠性差

raid1

也叫磁盘镜像(Mirror),两个磁盘一组,所有数据都同时写入两个磁盘,但读时从任一磁盘读都可以

数据有完全冗余保护,只要不出现两块镜像磁盘同时损坏,不会影响使用;可以提高并发读性能

在容量一定的情况下,需要2倍的磁盘,投资比较大

raid10

raid1+raid0,先对磁盘做镜像,再条带化,兼具raid1可靠性和raid0的优良并发读写性能

可靠性高,并发读写性能优良

在容量一定的情况下,需要2倍的磁盘,投资比较大

raid4

像raid0一样条带化,不同的是需要额外增加一个磁盘,用来写各stripe的校验纠错数据

raid中的一个磁盘损坏,器数据可以通过校验纠错数据计算出来,具有一定的容错保护能力,读数据速度快

每个stripe上数据的修改都要写校验纠错块,写性能受影响;所有纠错数据都在同一个磁盘上,风险大,也会形成一个性能瓶颈;出现坏盘时,读性能会下降

raid5

是对raid4的改进:将每个条带(stripe)的校验纠错数据块也分别写到各个磁盘,而不是写到一个特定的磁盘

基本同raid4,只是其写性能和数据保护能力要更强一点

写性能不及raid0.raid1和raid10,容错能力也不及raid1;在出现坏盘时,读性能会下降

选择raid

  • 数据读写都很频繁,可靠性要求也很高,最好选择raid10
  • 数据读很频繁,写相对较少,对可靠性有一定要求。可以选择raid5
  • 数据读写都很频繁,但可靠性要求不高,可以选择raid0

MyISAM存储引擎,禁止操作系统更新文件的atime属性

atime是linux系统下的一个文件属性,每当读取文件时,操作系统都会将读操作发生的时间会写到磁盘上,对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响IO的性能,因此可以通过设置文件系统的mount属性,阻止操作系统写atime信息,以减轻磁盘IO的负担。

打开系统配置文件
vim /etc/fstab

指定noatime选项
LABEL=/home /home ext3 noatime 1 2

重新mount文件系统
#mount -oremount /home

至此,读/home下文件就不会再写磁盘了。

InnoDB存储引擎用裸设备(raw device)存放innodb的共享表空间

  • 修改mysql配置文件,在innodb_data_file_path参数中增加裸设备文件名并指定newraw属性
innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw
  • 启动mysql,使其完成分区初始化工作,然后关闭mysql
  • 将innodb_data_file_path中的newraw改成raw
  • 重新启动即可开始使用mysql

调整IO调度算法

  • 在完全随机的访问环境下,选择Deadline最后期限算法
  • 写较多的环境下,选择Anticipatory预期算法

查看当前系统支持的IO调度算法

dmesg | grep -i scheduler

查看当前设备(/dev/sda)使用的IO调度算法

more /sys/block/sda/queue/scheduler

修改当前块设备(/dev/sda)使用的IO调度算法,修改IO调度算法后直接生效

echo "deadline" > /sys/block/sda/queue/scheduler

永久地修改IO调度算法,可以通过修改内核引导参数,增加elevator=调度程序名:

vi /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.18-308.el5 ro root=LABEL=/ elevator=deadline