我有相当多的 RAID 阵列(服务器控制器以及中端 SAN 存储)都遇到相同的问题:几乎没有足够的心轴来保持峰值 I/O 性能,以及大量未使用的磁盘空间。
我想这是一个普遍的问题,因为供应商提供了 300 GB 容量的最小驱动器,但自最小驱动器为 36 GB 以来,随机 I/O 性能并没有真正增长太多。
一个例子是一个有 300 GB 的数据库,需要 3200 IOPS 的随机性能,所以它有 16 个磁盘(4800 GB 减去 300 GB,我们有 4.5 TB 的浪费空间)。
另一个常见示例是响应时间敏感的 OLTP 数据库的重做日志。重做日志有自己的 300 GB 镜像,但占用 30 GB:浪费了 270 GB。
我希望看到的是一种适用于 Linux 和 Windows 环境的系统方法。如何设置空间以便提醒系统管理员团队注意阻碍主数据库/应用程序性能的风险?或者,更好的是,免受这种风险?我想到的典型情况是“哦,我有一个非常大的 zip 文件,我在哪里解压缩它?嗯,让我们看看df -h
,我们很快就会弄清楚……”我不强调严格性安全性(系统管理员被信任以善意行事),但方法的整体简单性。
对于 Linux,最好有一个定制的文件系统来将 I/O 速率限制在非常低的水平——这可能吗?
我会考虑将高 IOPS/低空间请求数据库移动到基于 SSD 的阵列 - 这些磁盘很小并且提供出色的吞吐量。这是一种最简单的方法
LUN、分区和资源的选择性呈现...
仅仅因为 SAN 由 16 个磁盘轴支持并不意味着使用该数据的服务器需要查看阵列的全部容量。直连存储也是如此。有时我可能在一个阵列中有大量磁盘,但我仍然会调整提供给操作系统的 LUN/分区/设备的大小。
以下来自 HP ProLiant SmartArray 控制器的示例显示了 RAID 1+0 阵列中的 4 个 480GB SSD。那是 960GB 可用。我从 960GB 中切出了一个 400GB 的 LUN。操作系统只看到 400GB。甚至 400GB 也被划分为对应用程序有意义的逻辑块。关键是您可以控制存储空间的消费者看到的内容:
但归根结底,如果性能满足您的需求,并且组织能够负担得起当前的配置,您为什么认为未使用的空间是“浪费的”?
顺便说一句 -可以使用 cgroups在块设备级别限制 Linux 中的 I/O 。但是,如果您的主要应用程序或数据库存在风险,为什么不分离工作负载呢?