我想设置一个 raid01 配置(由两个 raid0 组成的 raid1),其中一个 raid0 卷设置为写入为主状态,这样所有读取都会转到另一个(即一个是磁盘,另一个是闪存)。但是,整个计划遇到了一个问题,即直接从 raid0 读取时,每个磁盘 64k(块大小)是正确的,但是当我在 raid0 上添加 raid1 时,所有读取都会下降到只有 4k,因此性能很差。我猜这是因为 md(或堆栈中的某些东西)已决定 4k 是错误的粒度,所以它以这个大小进行读取,但这只是猜测。无论如何,我真的需要找到一种方法来修复它。
为了测试这一点,我使用了一个只有 1 面的 raid1,即通过以下方式创建的
mdadm --create /dev/md2 -l 1 -n 2 /dev/md1 "missing"
另一个有趣的事情是,raid0 md1 阵列上的 dd bs=512K 显示 md1 及其所有组件的读取次数为 64k,而我原本预计 iostat 会显示 md1 的读取次数为 512K,其组件磁盘的读取次数为 64K。md2 上的 dd bs=512K 显示所有磁盘的读取次数为 4K。我通过将 MB/s 除以 tps 来计算块大小,即 MB/事务。
以下是全部详细信息。
[root@pe-r910 ~]# mdadm --detail /dev/md2
/dev/md2:
Version : 1.2
Creation Time : Tue Jul 26 23:13:59 2011
Raid Level : raid1
Array Size : 1998196216 (1905.63 GiB 2046.15 GB)
Used Dev Size : 1998196216 (1905.63 GiB 2046.15 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Thu Jul 28 08:29:35 2011
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Name : pe-r910.ingres.prv:2 (local to host pe-r910.ingres.prv)
UUID : 299ea821:756847a0:4db591e4:38769641
Events : 160
Number Major Minor RaidDevice State
0 9 1 0 active sync /dev/md1
1 0 0 1 removed
[root@pe-r910 ~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Tue Jul 26 01:05:05 2011
Raid Level : raid0
Array Size : 1998197376 (1905.63 GiB 2046.15 GB)
Raid Devices : 14
Total Devices : 14
Persistence : Superblock is persistent
Update Time : Tue Jul 26 01:05:05 2011
State : clean
Active Devices : 14
Working Devices : 14
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
Name : pe-r910.ingres.prv:1 (local to host pe-r910.ingres.prv)
UUID : 735bd502:62ed0509:08c33e15:19ae4f6b
Events : 0
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 5 active sync /dev/sdg1
6 8 113 6 active sync /dev/sdh1
7 8 129 7 active sync /dev/sdi1
8 8 145 8 active sync /dev/sdj1
9 8 161 9 active sync /dev/sdk1
10 8 177 10 active sync /dev/sdl1
11 8 193 11 active sync /dev/sdm1
12 8 209 12 active sync /dev/sdn1
13 8 225 13 active sync /dev/sdo1
[root@pe-r910 ~]# dd if=/dev/md1 bs=512K count=10000 iflag=nonblock,direct of=/dev/null
10000+0 records in
10000+0 records out
5242880000 bytes (5.2 GB) copied, 3.45236 s, 1.5 GB/s
[root@pe-r910 ~]# dd if=/dev/md2 bs=512K count=10000 iflag=nonblock,direct of=/dev/null
10000+0 records in
10000+0 records out
5242880000 bytes (5.2 GB) copied, 6.81182 s, 770 MB/s
[root@pe-r910 ~]#
更新:这似乎只是 md on md 的问题。如果我直接在磁盘上创建 raid1,其读取速率与磁盘相同。所以我认为我可以重新配置为 raid10(一组 raid1 组成一个 radi0),而不是 raid01(2 个 raid0 组成一个 raid1)。
答案1
创建设备时使用--chunk=64k或--chunk=128k。有关实际块大小,请参阅您的磁盘规格/测试。
不幸的是,创建之后没有办法改变它。
还有条带缓存端参数,这可能会影响
参见此文章 http://www.amiryan.org/2009/04/10/solved-linux-software-raid-5-too-slow/
答案2
这可能很明显,但是您是否尝试在创建设备时指定--chunk = 64k?