关于IT运维技术的
最佳实践博客网站

在高I/O密集操作中应用RAID10存储数据为最佳解决方案(附性能检测方法)

以往笔记:在Linux系统中配置软 RAID 磁盘阵列 Software RAID的实验笔记

为了弄明白,RAID10,必须要先弄清楚  RAID 10 和 RAID 0 , RAID 1 , RAID 01 有什么区别和联系?

  • RAID 0:将多个磁盘合并成一个大的磁盘,不具有冗余,并行I/O,速度最快。RAID 0亦被称为带区集。他是将多个磁盘并列起来,成为一个大磁盘。在存放数据是,其将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。所以,在所有级别中,RAID 0的速度是最快的,但是没有冗余功能,显而易见,如果一个磁盘(物理)损坏,则所有数据都会丢失。
  • RAID 1:N个磁盘(至少两个磁盘)相互做镜像,速度没有提高,但是允许N-1个磁盘损坏,可靠性最高。RAID 1就是镜像。其原理为在主役你光盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘工作。因为有镜像硬盘作数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,均存放主硬盘上的数据,是所有RAID上磁盘利用效率最低的一个级别。
  • RAID 10:RAID 10就是RAID 1+0,需要注意到是,RAID 10并不等于RAID 0+1,实现的顺序不一样,功能也是不一样的。RAID 01是先条带化再镜像,RAID 10是先镜像在条带化。我们以六块应按为例:RAID 01模式是将磁盘分成两组,一组住磁盘(三块),一组镜像磁盘(三块),当主磁盘其中一块损坏时,镜像磁盘其中任意一块损坏就导致整个阵列失效;RAID 10模式中先将磁盘分为三组,当主磁盘中其中一块损坏时,只有对应这个镜像磁盘损坏才能导致整个阵列失效,所以RAID 10相对RAID 01有更高的安全性,使用RAID 10模式时,镜像备份磁盘在操作系统中是不可见的,但是镜像磁盘和主磁盘是同时工作,在对主磁盘写入文件时,同时将文件写入镜像磁盘,文件保持高度一致。

总之:RAID0 太危险,RAID1 性能稍逊一些,RAID5 频繁写情况下性能差,RAID10 似乎是当今磁盘阵列的最佳选择,特别适合在I/O密集操作中应用比如 数据库、电子邮件或web服务器、KVM/Xen/VMware 虚拟机母机(host)的本地存储系统。

特别注意:做 Software RAID 不要求硬盘都一模一样,但是强烈推荐用同一厂商、型号和大小的硬盘。

建立RAID 10阵列

有两种建立RAID 10阵列的可行方案:复杂法(一步完成)和嵌套法(先创建两个或更多的RAID 1阵列,然后使用它们组成RAID 0)。本文会讲述复杂法创建RAID 10阵列的过程,因为这种方法能够使用偶数或奇数个磁盘去创建阵列,而且能以单个RAID设备的形式被管理,而嵌套法则恰恰相反(只允许偶数个磁盘,必须以嵌套设备的形式被管理,即分开管理RAID 1和RAID 0)。

mdadm 是multiple devices admin 的简称,它是Linux下的一款标准的软件RAID 管理工具。 一般情况下,系统都已经自动安装了。

实验环境为vmware创建的centos虚拟机

1、查看是否安装?

[root@c66mini ~]# rpm -qa | grep mdadm
mdadm-3.3-6.el6_6.1.x86_64

我的已经安装了。如果没有安装可以使用yum来安装。

[root@C65mini ~]# yum install mdadm

2、确保运行着相应的守护进程

chkconfig --levle 35 mdmonitor on

3、在 vmware 中创建 6个硬盘

raid10-hd

在虚拟机中创建6块硬盘

命令行下查看刚创建的硬盘

fdisk-l

fdisk-l 查看硬盘

4、为每个磁盘上已经划分出一个主分区sd[bcdefg]1

#分区方法:fdisk /dev/sd[bcdefg] 然后 n p 1 回车 回车 w
[root@c66mini ~]# ll /dev/ | grep sd[bcdefg]1
brw-rw---- 1 root disk      8,  17 12月 10 16:36 sdb1
brw-rw---- 1 root disk      8,  33 12月 10 16:37 sdc1
brw-rw---- 1 root disk      8,  49 12月 10 16:37 sdd1
brw-rw---- 1 root disk      8,  65 12月 10 16:37 sde1
brw-rw---- 1 root disk      8,  81 12月 10 16:38 sdf1
brw-rw---- 1 root disk      8,  97 12月 10 16:38 sdg1

创建一个RAID 10阵列(使用了5块硬盘来阵列盘,1块硬盘位热备盘)

mdadm --create --verbose /dev/md127 --level=10 --raid-devices=5 /dev/sd[bcdef]1 --spare-devices=1 /dev/sdg1

mdadm-raid10

6、创建完毕后查看阵列详情

[root@c66mini ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Wed Dec 10 16:56:10 2014
     Raid Level : raid10
     Array Size : 2607104 (2.49 GiB 2.67 GB)
  Used Dev Size : 1042944 (1018.67 MiB 1067.97 MB)
   Raid Devices : 5
  Total Devices : 6
    Persistence : Superblock is persistent

    Update Time : Wed Dec 10 16:56:24 2014
          State : clean 
 Active Devices : 5
Working Devices : 6
 Failed Devices : 0
  Spare Devices : 1

         Layout : near=2
     Chunk Size : 512K

           Name : c66mini.localdomain:0  (local to host c66mini.localdomain)
           UUID : 1c132b44:d2acdec7:54cf8f2a:b6f123dc
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1
       4       8       81        4      active sync   /dev/sdf1

       5       8       97        -      spare   /dev/sdg1

几个主要数据项说明:

1、Used Dev Size :  表示阵列所使用的每一块磁盘的容量。

2、Array Size表示阵列的整体大小。RAID 10阵列的大小通过(N*C)/M计算,其中N是活跃磁盘的数目,C是每个活跃磁盘的容量,M是每一个镜像中磁盘的数目。在本文的情形下,这个值等于(5*1GiB)/2 = 2.5GiB。

3、Layout是整个数据布局的详细信息。可能的布局数值如下所示。

n(默认选项):代表就近(near)拷贝。一个数据块的多个拷贝在不同磁盘里有相同的偏移量。这种布局提供和RAID 0阵列相似的读写性能。

layout-n

o代表偏移量(offset)拷贝。块并不是在条带里面复制的,而是整个条带一起复制,但是循环会打乱,所以同一个分 区中复制的块会出现在不同的磁盘。因此,一个块的后续拷贝会出现在下一个磁盘中,一个块接着一个块。为了在RAID 10阵列中使用这种布局,在创建阵列的命令中添加–layout=o2选项。

offset

f代表远端(far)拷贝(多个拷贝在不同的磁盘中具有不同的偏移量)。这种布局提供更好的读性能但带来更差的写性能。因此,对于读远远多于写的系统来说是最好的选择。为了在RAID 10阵列中使用这种布局,在创建阵列的命令中添加–layout=f2。

far

跟在布局选项nfo后面的数字代表所需的每一个数据块的副本数目。默认值是2,但可以是2到阵列中磁盘数目之间的某个值。提供足够的副本数目可以最小化单个磁盘上的I/O影响。

4、Chunk Size,参考Linux RAID wiki的说明,是写入磁盘的最小数据单元。最佳的chunk大小取决于I/O操作的速率和相关的文件大小。对于大量的写操作,通过设置相对较大的chunk可以得到更低的开销,但对于主要存储小文件的阵列来说更小的chunk性能更好。为了给RAID 10指定一个chunk大小,在创建阵列的命令中添加–chunk=desiredchunksize。

不幸的是,并没有设置一个大小就能适合全局的策略来提高性能,但可以参考下面的一些方案。

  • 文件系统:就整体而言,XFS据说是最好的,当然EXT4也是不错的选择。
  • 最佳布局:远端布局能提高读性能,但会降低写性能。
  • 副本数目:更多的副本能最小化I/O影响,但更多的磁盘需要更大的花费。
  • 硬件:在相同的环境下,SSD比传统(机械旋转)磁盘更能带来出性能提

格式化RAID10,并且挂载使用

为RAID10指定文件系统(格式化)

[root@c66mini ~]# mkfs.ext4 /dev/md127
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=640 blocks
163200 inodes, 651776 blocks
32588 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=671088640
20 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

正在写入inode表: 完成
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

建立挂载目录,并且挂载

[root@c66mini ~]# mount /dev/md127 /raid10test/
[root@c66mini ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 20G 1.3G 18G 7% /
tmpfs tmpfs 515M 0 515M 0% /dev/shm
/dev/sda1 ext4 199M 71M 118M 38% /boot
/dev/md127 ext4 2.6G 4.0M 2.5G 1% /raid10test

开机自动挂载

[root@c66mini ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 3 23:10:32 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6d639406-5da0-4c61-b360-d6d890baf6c6 / ext4 defaults 1 1
UUID=b90241dc-82bb-4e02-8646-f5cfc4080171 /boot ext4 defaults 1 2
UUID=76ac4ca2-1416-4a7c-b12e-201b427691ea swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/md127 /raid10test ext4 defaults 0 0

使用DD进行RAID性能测试

下面的基准测试用于检测RAID 10阵列(/dev/md0)的性能。

1、写操作

往磁盘中写入大小为256MB的单个文件:

[root@c66mini ~]# dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync 
记录了1+0 的读入
记录了1+0 的写出
268435456字节(268 MB)已复制,2.86389 秒,93.7 MB/秒

写入1000次512字节:

[root@c66mini ~]# dd if=/dev/zero of=/dev/md0 bs=512 count=1000 oflag=dsync
记录了1000+0 的读入
记录了1000+0 的写出
512000字节(512 kB)已复制,0.151473 秒,3.4 MB/秒

使用dsync标记,dd可以绕过文件系统缓存,在RAID阵列上执行同步写。这个选项用于减少RAID性能测试中缓存的影响。

2、读操作

从阵列中拷贝256KiB*15000(3.9 GB)大小内容到/dev/null:

[root@c66mini ~]# dd if=/dev/md0 of=/dev/null bs=256K count=15000
记录了10184+0 的读入
记录了10184+0 的写出
2669674496字节(2.7 GB)已复制,3.45389 秒,773 MB/秒

使用Iozone进行RAID性能测试

Iozone是一款文件系统基准测试工具,用来测试各种磁盘I/O操作,包括随机读写、顺序读写和重读重写。它支持将结果导出为微软的Excel或LibreOffice的Calc文件。

在CentOS/RHEL 7上安装Iozone

先保证Repoforge可用

yum install https://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

然后输入:

yum install iozone

在Debian 7上安装Iozone

 aptitude install iozone3

下面的iozone命令会在RAID-10阵列中执行所有测试:

iozone -Ra /dev/md0 -b /tmp/md0.xls
  • -R:往标准输出生成兼容Excel的报告
  • -a:以全自动模式运行所有的测试,并测试各种记录/文件大小。记录大小范围:4K-16M,文件大小范围:64K-512M。
  • -b /tmp/md0.xls: 把测试结果存储到一个指定的文件中
赞(0)
未经允许不得转载:菜鸟HOW站长 » 在高I/O密集操作中应用RAID10存储数据为最佳解决方案(附性能检测方法)
分享到: 更多 (0)

留下你的脚印

  订阅  
关注动态