优化 ext2 文件系统以用于 LVM + RAID 设备?跨度、条带宽度、LVM IO 大小注意事项

优化 ext2 文件系统以用于 LVM + RAID 设备?跨度、条带宽度、LVM IO 大小注意事项

我正在构建一个新的数据库服务器,并试图确保我的设置尽可能正确。数据库存储是 22x 15.7k RPM Western Digital SAS 驱动器,采用 RAID10 格式,位于带有两个 RAID 控制器的外部 SAS 机箱中。最初,我在 SAS 阵列上只创建了一个卷,使用 ext2 格式化。我按如下方式计算了 Stride 和 Stripe-Width:

  • 块大小 = 128 Kb
  • 块大小 = 4 Kb
  • 总磁盘数 = 22
  • 数据磁盘 = 11
  • 步幅 = 块大小 / 块大小 = 128 Kb / 4 Kb = 32 Kb
  • 条带宽度 = 步幅 * 数据磁盘 = 32 Kb * 11 = 352 Kb

当我创建文件系统时,我为 mkfs.ext2 提供了 Stride 和 Stripe-Width 值。

然后我尝试了另一种设置,这就是我的问题开始的地方。我在 SAS 阵列上创建了两个卷,每个卷都有不同的“主”控制器。导出到主机时,我使用 LVM2 将它们初始化为物理卷,创建卷组,然后将“--stripes 2”传递给 lvcreate 以对卷进行条带化。这样做的目的是将 IO 负载分散到两个控制器上,以期获得更高的性能。

SAS 阵列的“最佳实践”文档中有一节关于 LUN 段(块)大小的说明:

当使用卷管理器将多个存储系统 LUN 收集到逻辑卷
管理器 (LVM) 卷组 (VG) 中时,I/O 条带宽度将分配到所有 LUN 中所有数据驱动器的所有段上。调整后的公式变为:LUN 段大小 = LVM I/O 条带宽度 / (数据驱动器数量/LUN * LUN 数量/VG)

现在,SAS 阵列上的卷组有 22 个驱动器,其中 11 个是数据驱动器,还有两个 LUN。主持人有两个物理卷(LUN),并且两个 LUN 都访问相同的数据驱动器。因此,假设 LUN 段大小为 128 KB,我是否可以计算 LVM I/O 条带宽度

  • 128 = LVM_Stripe_Width / (11 * 2)
  • 128 * 22 = LVM_条纹_宽度
  • 分段阅读_第 2816 章

或者

  • 128 = LVM_Stripe_Width / (11 * 1)
  • 128 * 11 = LVM_条纹_宽度
  • 1408 = LVM_条纹_宽度

然后,这让我想到了 mkfs.ext2 的步幅和条带宽度问题:它的计算方式是否与初始设置相同,还是现在由于 LVM 层而有所不同?它会变成

  • 块大小 = 128 Kb
  • 块大小 = 4 Kb
  • 总磁盘数 = 2
  • 数据磁盘 = 2
  • 步幅 = 块大小 / 块大小 = 128 Kb / 4 Kb = 32 Kb
  • 条带宽度 = 步幅 * 数据磁盘 = 32 Kb * 2 = 64 Kb

在哪里

  • 总磁盘数 = 2

来自‘--stripes 2’到 lvcreate?

谢谢,

肯德尔

答案1

我建议检查一下这个答案寻找想法。我在那里提供了一些关于对齐 xfs 的反馈,有人评论了 ext3。它可能会给你一些线索。

此外,在对齐文件系统之前,请确保您的卷也与条带大小对齐。这可以通过正确调整元数据大小和优化范围大小来实现。以下是示例:

pvcreate -M2 --metadatasize 2048K --metadatacopies 2 <raw_device>
vgcreate --physicalextentsize 256M --autobackup y vg10 <pv_device>

答案2

你从错误的地方开始优化——你需要从数据库使用的页面大小开始(InnoDB (MySQL / MariaDB) 为 16KB,PostgreSQL 为 8KB),然后从那里进行优化。我写了一篇关于重要性的文章文件系统对齐您可能会发现这对于这种优化很有帮助。

相关内容