磁盘 IO 在这里绝对是一个问题,当您使用单个主轴备份它时,您无法执行任何大量的磁盘 IO 活动。单个 SATA 驱动器上的 32MB 缓存将被您的主机和几个客户操作系统的滴答作响而饱和。如果您查看 Ubuntu 主机操作系统中的磁盘队列长度计数器,您应该会看到它很高(在此系统上任何时间超过 1 且有 2 个驱动器的任何时间都意味着有东西在等待该磁盘)。
当我为 VM 确定基础架构的规模时,我通常将每个 VM 平均 30-50 IOPS 作为一个大致目标,这适用于不经常使用磁盘子系统的系统。对于不需要大量 IO 活动的系统,您可以降低一点,但构建系统的 IO 模式将严重偏向于大量非常随机的相当小的读取。为了使问题更加复杂,您需要同时构建大量虚拟机,这将推动磁盘争用。整体磁盘带宽可能不是一个大问题(当 IO 模式完全顺序时,SATA 驱动器可能会推动 70-100Meg/sec)但是当文件很小且分散时,您的 IO 会受到主轴限制的限制,这将是在 7.2k SATA 上每秒大约 70-100 IO。一个运行 Type 2 Hypervisor(如 VMware Server)的主机操作系统可能会在轻负载下达到这一点。
我的建议是使用更小且速度更快的驱动器构建 RAID 10 阵列。 10k SAS 驱动器每个将为您提供 100-150 IOPS,因此一包 4 块可以处理 600 读取 IOPS 和 300 写入 IOPS,然后才能达到顶峰。如果要将 VM 文件放在 RAID 阵列上,还要确保 align all of the data partitions 用于托管 VMDK 和来宾操作系统的驱动器。对于像这样的工作负载,这将使您的磁盘性能提高 20-30%。避免使用 RAID 5,因为空间很便宜,而且 RAID 5 的写入损失意味着您需要 RAID 5 包中的 4 个驱动器才能达到单个驱动器的写入性能。
我要补充的另一点是,VMware Server 在性能方面并不是一个出色的 Hypervisor,如果有可能迁移到 Type 1 Hypervisor(如 ESXi v4,它也是免费的)。设置并非易事,并且您完全失去了主机操作系统,因此这可能是一个问题,但您会看到全面的 IO 性能要好得多,尤其是在磁盘和网络流量方面。
已编辑以回复您的评论。
1) 看看您现有的 Ubuntu 主机是否确实存在问题。
我看到你已经尝试过 dstat,我认为它没有给你足够的细节来理解正在发生的事情,但我不熟悉使用它,所以我可能是错的。 Iostat 将让您清楚地了解正在发生的事情 - 这篇关于使用 iostat 的文章将帮助您更好地了解实际 IO 模式撞击磁盘 - http://bhavin.directi.com/iostat-and-disk-utilization-monitoring-nirvana/。 avgrq-sz 和 avgwq-sz 是排队请求数量的原始指标。高数字通常不好,但实际不好的数字因磁盘类型和 RAID 几何结构而异。您最终感兴趣的是查看您的磁盘 IO 是否在队列中花费了更多\增加的时间而不是实际得到服务。 (await-svctim)/await*100 的计算确实告诉你你的磁盘是否在努力跟上,超过 50% 并且你的 IO 的排队时间与磁盘服务的时间一样长,如果它接近 100%,那么磁盘就会完全被撞到。如果您确实发现主机实际上并没有受到压力,而 VMware Server 实际上很糟糕(很可能是这样,我从未在 Linux 平台上使用过它),那么您可能想在您之前尝试使用 VirtualBox 之类的替代方案之一跳转到 ESXi。
2) 弄清楚你需要什么。
在具有良好\可接受性能的系统上确定典型构建的 IO 要求 - 在 Windows 上查看 IOPS 计数器 - 磁盘读取/秒和磁盘写入/秒计数器,并确保平均队列长度小于 1。您需要在系统加载时知道两者的峰值,如果所有内容都来自磁盘缓存,则瞬时峰值可能非常高,因此请注意一分钟左右的持续峰值。一旦你有了这些数字,你就可以确定一个磁盘子系统来提供你需要的东西。您需要查看 IO 编号的原因是它们反映了驱动器磁头完成读取和写入所必须经历的实际切换(每秒 IO,IOPS),除非您正在执行大文件流式传输或全盘备份它们将最准确地反映您的磁盘在负载下将达到的限制。
现代磁盘可以支持大约以下内容:
- 7.2k SATA 驱动器 - 70-100 IOPS
- 10k SAS 驱动器 - 120-150 IOPS
- 15k SAS 驱动器 - 150-200 IOPS
请注意,这些是典型驱动器的近似数字,代表驱动器在最大负载和不利 IO 模式下的饱和能力。这是为最坏的情况设计的,除非您真的知道自己在做什么,否则您应该这样做。
RAID 包允许您并行化您的 IO 工作负载,并且使用合适的 RAID 控制器,N 驱动器 RAID 包将为您提供 N*(1 个磁盘的基本 IOPS)用于读取 IO。对于写入 IO,RAID 策略会导致惩罚 - RAID 0 没有惩罚,写入与读取一样快。 RAID 5 每个 IO 需要 2 次读取和 2 次写入(读取奇偶校验、读取现有块、写入新奇偶校验、写入新块),因此惩罚为 4。RAID 10 的惩罚为 2(每个 IO 写入 2 次)。 RAID 6 的惩罚为 5。要确定您需要从 RAID 阵列获得多少 IOPS,您需要获取操作系统所需的基本读取 IOPS 数,并将操作系统所需的写入 IOPS 数与相关惩罚因子相加。
3) 现在计算出满足您性能需求的 RAID 阵列结构
如果您对物理基线系统的分析告诉您只需要 4\5 IOPS,那么您的单个驱动器可能就可以了。如果确实如此,我会感到惊讶,但不要相信我的话 - 获取您的数据并做出明智的决定。
无论如何,假设您在基线练习期间测量了 30 个读取 IOPS 和 20 个写入 IOPS,并且您希望能够支持这些构建系统的 8 个实例作为 VM。为了实现这一点,您的磁盘子系统需要能够支持操作系统的 240 读取 IOPS 和 160 写入 IOPS。调整您自己的计算以适应您真正需要的系统数量。
如果您选择 RAID 10(我强烈建议您这样做,RAID 10 会牺牲容量来换取性能,但是当您设计足够的性能时,您可以调整磁盘大小以获得所需的容量,结果通常会比 RAID5 便宜,除非您的IO 模式只涉及很少的写入)您的磁盘需要能够提供总共 560 IOPS(读取 240,写入 320,以便考虑 RAID 10 写入惩罚因子 2)。
这将需要:
- 4 个 15k SAS 驱动器
- 6 个 10k SAS 驱动器(向上取整,RAID 10 需要偶数驱动器)
- 8 个 7.2k SATA 驱动器
如果您选择 RAID 5,则必须针对增加的写入损失进行调整,因此需要 880 IOPS 才能提供您想要的性能。
那将需要:
- 6 个 15k SAS 驱动器
- 8 个 10k SAS 驱动器
- 14 个 7.2k SATA 驱动器
这样您将拥有更多空间,但成本几乎是其两倍,因为您需要更多驱动器,并且需要一个相当大的盒子来装这些驱动器。这就是为什么我强烈推荐 RAID 10,如果性能是任何问题的话。
另一种选择是找到具有足够存储空间以满足您的需求的优质 SSD(例如 Intel X-25E,而不是 X-25M 或任何更便宜的产品)。购买两个并将它们设置为 RAID 1,SSD 非常好,但它们的故障率(即使对于像 X-25E 这样的驱动器)目前比旋转磁盘更糟糕,所以除非你准备好处理你想要 RAID 1 的死系统最低限度。结合像 X-25E 这样的优质高端控制器,在现实世界中可以轻松维持 6k IOPS,相当于 30 个 15k SAS 驱动器。 SSD 的每 GB 容量相当昂贵,但如果使用得当,它们可以为 IO 密集型任务提供更具成本效益的解决方案。