由于RAID-10不能实现动态扩容,我就打起了支持动态扩容的RAID-5的主意。
实际上,公司搭建存储很少在乎动态扩容这么一回事,但对于我这种穷苦老百姓来说,动态扩容还真是件很重要的事。
但是由于RAID-5的奇偶校验,可能会比较大地影响读写性能。
奇偶校验的情况比较复杂,所以我打算先在虚拟机里面简单测试下。
由于虚拟机无法模拟条带化带来的读写性能的上升,所以就以数据量来代替速度指标。
先在RAID-10上检验方法是否可行。这次的RAID-10参数如下:
# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md127 : active raid10 sde1[3] sdd1[2] sdc1[1] sdb1[0] 16765952 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
构筑这个阵列的时候,我并没有刻意制定Chunk大小,很意外地发现程序自动指定的大小竟然高达512kB。
以下是文件系统建立好并挂载后iostat给出的值。
# iostat -md Linux 3.11.0-12-generic (ubuntu) 03/25/2014 _x86_64_ (1 CPU) Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 3.99 0.08 0.00 108 6 sdb 88.50 5.71 0.01 8194 17 sdc 87.28 5.71 0.01 8188 17 sdd 87.48 5.71 0.01 8189 17 sde 87.16 5.71 0.01 8188 17 dm-0 4.00 0.07 0.00 104 6 dm-1 0.22 0.00 0.00 1 0 md127 1.86 0.00 0.02 4 23 dm-2 0.92 0.00 0.01 1 12
接下来,cd到阵列挂载的目录,使用iozone跑一跑自动参数。
iozone -aI
这里一个小插曲,可能是虚拟机虚拟的SATA总线有点不如人意,跑着跑着就跑得I/O堵塞然后整个文件系统出毛病自动转ReadOnly了。
只好先重启,清空下iostat的统计数据。
# iostat -md Linux 3.11.0-12-generic (ubuntu) 03/25/2014 _x86_64_ (1 CPU) Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 78.59 1.40 0.06 89 3 sdb 8.42 0.03 0.00 2 0 sdc 3.88 0.02 0.00 0 0 sdd 4.96 0.02 0.00 1 0 sde 3.94 0.02 0.00 0 0 md127 5.62 0.02 0.00 1 0 dm-0 3.32 0.01 0.00 0 0 dm-1 117.99 1.11 0.06 70 3 dm-2 3.82 0.01 0.00 0 0
重新跑过iozone,这次指定下跑的大小。
iozone -g64M -n64M -aI
这次跑得很顺,跑完后iostat数值如下,
# iostat -md Linux 3.11.0-12-generic (ubuntu) 03/25/2014 _x86_64_ (1 CPU) Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 13.13 0.23 0.01 91 3 sdb 244.03 17.15 4.10 6708 1604 sdc 222.75 14.49 4.10 5667 1604 sdd 248.87 17.12 4.75 6694 1857 sde 229.62 14.53 4.75 5682 1857 md127 89.75 9.01 8.85 3524 3461 dm-0 89.08 9.01 8.85 3523 3461 dm-1 19.61 0.19 0.01 72 3 dm-2 0.62 0.00 0.00 0 0
看到实际上数据并不是均匀写到两组RAID-1里面的,这是因为RAID-0里面数据按照指定的Chunk分条而非均匀分条。
然后发现件令人费解的事情,这个读取的数据量为什么大得有点离谱,而且在各个盘不是均匀的?不太理解这个,可能跟其他什么有关。
由于出现了意料之外的变量,这个本来就不太严谨的检测可能越发不严谨,但我还是决定继续做下去,至少写入的数据检测到是准确的。
现在,我把RAID-10拆了改成了RAID-5。
# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md127 : active raid5 sde1[4] sdd1[2] sdc1[1] sdb1[0] 25148928 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
重启,清空iostat数据。
# iostat -dm Linux 3.11.0-12-generic (ubuntu) 03/25/2014 _x86_64_ (1 CPU) Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 35.11 0.53 0.01 61 0 sdb 2.60 0.01 0.00 1 0 sdc 2.16 0.01 0.00 0 0 sdd 2.57 0.01 0.00 1 0 sde 2.21 0.01 0.00 0 0 md127 0.82 0.00 0.00 0 0 dm-0 29.99 0.51 0.01 57 0 dm-1 2.17 0.01 0.00 0 0
重复跑iozone的过程后,iostat数据如下。
# iostat -dm Linux 3.11.0-12-generic (ubuntu) 03/25/2014 _x86_64_ (1 CPU) Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 17.72 0.27 0.00 62 1 sdb 67.69 6.00 5.17 1370 1180 sdc 76.92 5.92 6.67 1353 1523 sdd 66.82 5.65 5.84 1291 1335 sde 76.23 5.65 6.86 1291 1567 md127 151.96 15.40 15.14 3521 3461
时间太晚了,就列个数据,明天再分析。