也许标题令人困惑,但让我稍微解释一下......
我们的 mysql 服务器(在 xen 虚拟机上)有时会在磁盘上生成巨大的 tmp 文件。因此我们需要一个大的 tmpdir 来存储它们。我们决定将 tmpdir 安装到 SSD 以获得更好的性能。但正如您所知,SSD 有点昂贵,而且 mysql 并不总是生成那么大的 tmp 文件。因此,如果我们为每个 vm mysql 提供一个大 SSD,那就太浪费了。因此,我们只想为每个 tmpdir 提供小 SSD(实际上是基于 xen SSD 的虚拟磁盘)(例如 10G)。
但正如前面所说,有时 mysql 会生成超过 10G 的巨大 tmp 文件。如果发生这种情况,mysql 查询将失败。所以我们希望它像这样:
将 ssd 和 hdd 合并为一个驱动器(这样它就可以安装到 mysql tmpdir)。当 ssd 用完所有空间后就使用 hdd。
然后我想 dmseupt 或 LVM 也许可以做到这一点。所以我做了一个简单的测试:
1个固态硬盘0.5G|10G硬盘1个|逻辑卷跨越两个驱动器|上述逻辑卷上的 ext4 文件系统
并使用 dd 工具生成一些大小为 0.3 G 的文件。然后我可以看到 SSD 使用量增长了 0.3G,而 HDD 没有变化。到目前为止一切都很好!但是当我删除该文件,然后创建,然后删除,... 时,就会出现这种情况。
事实证明硬盘空间使用量正在不断增加!
所以我认为 ext4 不会覆盖已删除的文件?我们可以禁用此功能吗?或者是否有其他文件系统更喜欢先写入低 LBA?
谢谢阅读!
答案1
您想将旋转磁盘的低成本与 SSD 的高性能结合起来吗?是的,可以做到:混合存储池是个好主意。但是,我认为您的计划不会重塑混合存储是一个好主意。
混合存储在名为 ZFS 的文件系统中完美实现。您现在可以免费使用 ZFS:
- 尝试启动一个单独的虚拟机作为 ZFS 存储服务器,运行您选择的 Nexenta、OpenIndiana 或 FreeBSD。
- 为 ZIL(写入缓存)和 L2ARC(读取缓存)创建一个具有适当指定 SSD 的 ZFS 存储池。
- 提供您需要的混合存储卷,可以作为 iSCSI 目标,或者以在您的环境中最有意义的方式。
- 让 ZFS 自动管理哪些块存储在 RAM 或 SSD 以及旋转磁盘中。