Linux RAID5 最佳块大小

Linux RAID5 最佳块大小

我再次提出一个始终存在的问题:如何最好地优化磁盘结构。在我的组织中,我们有一个 14TB 的 Linux 软件 RAID 阵列,专门用于存储使用 Symantec Backup Exec 制作的备份。这些文件很大,每个文件 10GB - 100GB,一些支持元数据文件大小为几 KB。长话短说,我们必须重新创建阵列,我想知道此用例的最佳阵列块大小。

我们的设置细节:

Netgear ReadyNAS Pro,运行全新且更新的 CentOS 6.4 安装。

6 个 3TB 消费级(SATA II,7200 RPM)硬盘,来自不同的供应商(尺寸相同)。

每个驱动器有 3 个相同的分区,形成 3 个软件 RAID 设备:

  • /dev/md0:6 x 32GB 用于 RAID6
  • /dev/md1:RAID10 中的 6 x 4GB 交换
  • /dev/md2:6 x 2.7TB 存储空间,采用 RAID5 方式,总可用存储空间约为 14TB

此外,还有一个集成的 128MB 闪存设备设置为 /boot

/dev/md2 是我关注的阵列。它作为驱动器“R:”提供给运行 Symantec Backup Exec 的 Windows Server 2008 R2 机箱,通过两台机器上的双千兆位 NIC 上的多路径 iSCSI(也运行 9k 巨型帧)。

在 Server 2008 机器上,R: 被格式化为 NTFS,簇大小为 64k,专用于存储备份文件。平均文件大小一般在 40MB 到 5GB 之间,具体取决于当前完整备份与增量/差异备份的比例。磁盘使用率在读取和写入之间大约各占 50%,因为我们还将此驱动器上的备份镜像到磁带上。

总体而言,考虑到硬件,我认为这个设置已经优化得相当好了,但我不是存储专家,而且 RAID 块大小的含义有点超出我的理解范围。我知道默认块mdadm大小是 512KB。这对于我的场景来说是最佳的吗?我应该调整它以匹配 NTFS 簇大小吗?还是我错过了一些神奇的公式?

感谢您的任何帮助,您可以提供。

编辑:以下是基准测试结果。并非所有组合都经过测试。


##########   4K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   111.551 MB/s
          Sequential Write :    96.759 MB/s
         Random Read 512KB :   107.033 MB/s
        Random Write 512KB :    56.770 MB/s
    Random Read 4KB (QD=1) :     9.500 MB/s [  2319.2 IOPS]
   Random Write 4KB (QD=1) :     5.042 MB/s [  1231.0 IOPS]
   Random Read 4KB (QD=32) :   101.717 MB/s [ 24833.3 IOPS]
  Random Write 4KB (QD=32) :     8.237 MB/s [  2010.9 IOPS]

  Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
  Date : 2013/07/12 13:10:31
    OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1 

[6.1 Build 7601] (x64)

##########  32K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :    91.276 MB/s
          Sequential Write :    11.119 MB/s
         Random Read 512KB :     0.000 MB/s
        Random Write 512KB :     0.000 MB/s
    Random Read 4KB (QD=1) :     0.000 MB/s [     0.0 IOPS]
   Random Write 4KB (QD=1) :     0.000 MB/s [     0.0 IOPS]
   Random Read 4KB (QD=32) :     0.000 MB/s [     0.0 IOPS]
  Random Write 4KB (QD=32) :     0.000 MB/s [     0.0 IOPS]

  Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
  Date : 2013/07/12 14:37:05
    OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1 

[6.1 Build 7601] (x64)

##########  64K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   111.968 MB/s
          Sequential Write :   103.318 MB/s
         Random Read 512KB :   105.047 MB/s
        Random Write 512KB :    48.321 MB/s
    Random Read 4KB (QD=1) :    10.373 MB/s [  2532.5 IOPS]
   Random Write 4KB (QD=1) :     5.180 MB/s [  1264.5 IOPS]
   Random Read 4KB (QD=32) :    95.106 MB/s [ 23219.3 IOPS]
  Random Write 4KB (QD=32) :     9.108 MB/s [  2223.6 IOPS]

  Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
  Date : 2013/07/12 12:47:37
    OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1 

[6.1 Build 7601] (x64)

########## 128K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   111.908 MB/s
          Sequential Write :    94.305 MB/s
         Random Read 512KB :   104.772 MB/s
        Random Write 512KB :    43.821 MB/s
    Random Read 4KB (QD=1) :     9.247 MB/s [  2257.6 IOPS]
   Random Write 4KB (QD=1) :     4.929 MB/s [  1203.3 IOPS]
   Random Read 4KB (QD=32) :   101.764 MB/s [ 24844.8 IOPS]
  Random Write 4KB (QD=32) :     7.949 MB/s [  1940.6 IOPS]

  Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
  Date : 2013/07/12 13:52:01
    OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1 

[6.1 Build 7601] (x64)

########## 512K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   110.237 MB/s
          Sequential Write :    93.149 MB/s
         Random Read 512KB :   104.892 MB/s
        Random Write 512KB :    41.407 MB/s
    Random Read 4KB (QD=1) :     6.760 MB/s [  1650.3 IOPS]
   Random Write 4KB (QD=1) :     3.539 MB/s [   864.0 IOPS]
   Random Read 4KB (QD=32) :   101.139 MB/s [ 24692.3 IOPS]
  Random Write 4KB (QD=32) :     7.166 MB/s [  1749.6 IOPS]

  Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
  Date : 2013/07/12 12:22:58
    OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1 

[6.1 Build 7601] (x64)

##########1024K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   112.327 MB/s
          Sequential Write :    92.353 MB/s
         Random Read 512KB :   107.015 MB/s
        Random Write 512KB :    39.793 MB/s
    Random Read 4KB (QD=1) :     9.536 MB/s [  2328.0 IOPS]
   Random Write 4KB (QD=1) :     3.671 MB/s [   896.3 IOPS]
   Random Read 4KB (QD=32) :   101.990 MB/s [ 24900.0 IOPS]
  Random Write 4KB (QD=32) :     0.000 MB/s [     0.0 IOPS]

  Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
  Date : 2013/07/12 14:17:08
    OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1 

[6.1 Build 7601] (x64)

答案1

至少,您希望块大小是文件系统块大小的倍数或除数。您已经做到了。

其他一切都可能取决于实现。由于您是从头开始,因此您应该自行制定基准。不要创建 14 TB 的 RAID 集,而是使用每个驱动器中不同块大小的 500 GB 进行测试。较小的卷大小将减少创建卷所需的时间。

找到最适合您设置的数字后,即可创建 14 TB RAID 集。再次测试以确保性能没有下降。

答案2

这取决于使用场景。假设您有非常少量的小文件(< 512KB),假设有 10000 个文件,其余文件都是非常大的文件(> 10MB),即 5000 个文件。格式化驱动器时最好使用 1MB 的簇大小,如果您设置了 8 个磁盘 raid 10,则每个磁盘将同时读取 128KB。

如果您的所有小文件和大文件的尾部主干都是 4KB,那么您最多会损失 508KB * 15000 的磁盘空间,这相当于 ~ 7500MB,即 7.5 GB 的磁盘空间损失。

与块大小为 512KB、簇大小为 64KB 的不祥设置相比,您将获得 4 倍的速度。

最终的配方是:

  1. 根据文件大小分布选择文件系统集群大小
  2. 将其除以同时使用的磁盘数量,确定块大小
  3. 如果您选择较大的块和集群,您将获得速度,但大文件的磁盘空间却会变得非常小。
  4. 对于小文件,不要过多优化机械设置,而应该考虑为小于 1MB 的文件添加 nvme 或 ssd 缓存

此外:

  • 考虑网络基础设施的带宽限制
  • 在设置 raid 之前检查瓶颈(dd dev/zero to disks watch iostat)
  • 考虑 hba 或 raid 卡 - sata 卡(芯片)和 pci-e 插槽总带宽和每通道带宽
  • 检查电缆是否损坏或松动(dmesg)
  • 使用 ext4 分区进行 mdadm 软件 raid 并留出一点空间用于磁盘兼容性,不要使用原始分区
  • btrfs 和类似的(zfs、nilfs、cloud-dedupe 等)文件系统是另一个问题

! 很重要:

  • 不要使用 raid 5(几乎不可能重建且有缺陷)

  • 不要使用带有自己的 raid 5 或 raid 6 设置的 btrfs(已知错误)

  • 不要使用 raid 0 来存储关键任务数据,虽然它可以保存 10 年,但这是一种赌博

  • 使用 ups 和软件 raid 设置

  • 备份 LSI 芯片组卡的 rombios 软件并购买备用卡,确保它们具有相同的 rombios 版本,并确保如果更换另一个,可以重建 raid

这些是我两年的文件服务器设置经验中的一些

相关内容