数据库服务器和数据存储虚拟化技术的优缺点

Mar*_*tin 5 postgresql postgis vmware virtualisation

昨天我们讨论了性能和可恢复性,我意识到虚拟化环境可以给我带来多少好处 - 但由于我对性能有点怀疑,所以我在这里问。它可能是特定于 GIS 的,但是在 gis 用户那里,他们说这是特定于数据库的......;)

数据库服务器是否会因虚拟化而遭受严重的性能损失?我不了解这项技术的最后细节,但不知何故,它更像是一个“黑匣子”,需要通过硬件进行处理。磁盘访问以及 PostGIS 为我们提供的所有技巧是否会被授予?(聚类、索引等) - 碎片聚类就像没有聚类!

最大的优势是可维护性和可扩展性。如果发生严重的硬件故障,我可以在几分钟内甚至实时迁移到另一台物理机器。

谁有经验,可以给我指点关于这个主题的好的网站或文献?我记得上次 fossgis 中的一些事情以及 ESXi 和本机服务器上的一些内部基准测试,不知何故我无法确定它是否好。

Cra*_*ger 14

这是“视情况而定”的问题之一。

性能取决于资源、争用、配置和 VM 引擎

无竞争的 VM 主机:如果您正确地为具有无竞争的高性能本地连接或 SAN 存储、CPU 资源争用低、没有内存过度使用或争用、快速专用网络访问等的 VM 提供资源,则它通常会在适当的情况下运行良好调整 VM 引擎。确切的结果将取决于所使用的 VM 系统、您如何提供对资源的访问等等。

您可以在保证低争用率和良好存储的高端 VPS 计划中获得出色的结果。

竞争/资源不足的 VM 主机:如果您将它与其他三个应用程序服务器和一个文件服务器放在同一个机器上,所有这些服务器都共享相同的 RAID 5 阵列并且正在争夺 RAM 和 CPU,它的性能会非常糟糕。

如果你把它放在便宜的过度订阅和过度使用的 VPS 主机上,你会得到同样糟糕的结果。如果您的一半 RAM 真的在主机磁盘上交换,那么速度不会很快。

“在云中”:如果你把它放在 EC2、Azure 或其他任何东西上,那么性能将取决于服务的争用率、他们使用的存储、其他用户在做什么、他们的 QoS 有多好,以及还有很多。

至少对于 EC2,磁盘子系统的性能很差(在标准 VM 上,至少在 2012 年),因此只有当您有足够的 RAM 来缓存至少索引时,它才能正常运行。亚马逊推出了新的高 I/O 实例,可能会更好,但我还没有看到基准测试。

通常,如果您选择具有良好磁盘的轻度竞争主机,例如高质量的高端虚拟专用服务器主机,您将获得介于两者之间的东西

直接与 VM 保证

关于文件排序之类的具体保证,这取决于您的 VM 设置。您是否使用由文件支持的虚拟机?通过原始块设备?通过 iSCSI SAN?它还取决于您的 VM 引擎的配置方式,以及您使用的确切 VM 系统。

最好的情况

在最好的情况下 - 一个带有所有 paravirt 驱动程序、VT-x、VT-IO、对主机资源的无竞争访问等的系统 - 您可能会获得与主机非常接近的性能。如果您为 VM 提供直接块设备而不是托管文件进行存储,那么您将获得正确的文件排序,而不会产生主机端碎片。究竟有多接近取决于您的特定硬件、主机和来宾、配置等;用你的工作量来衡量它

fsync() 和写持久性

使用 VM 需要注意的一件事是,您必须确保磁盘系统说出有关 fsync() 的真相。让虚拟机更快的一个非常简单的方法是忽略 fsync() 请求。这很好,直到 VM 主机崩溃或断电,此时您的数据库可能会被无可救药地损坏。VM 主机必须通过尊重来宾操作系统的磁盘刷新命令来接受 fsync() 请求,或者必须提供在断电时不会消失的非易失性写入缓存。一些 SAN 为此使用 SSD,大多数其他系统使用电池支持的 RAID 控制器缓存。如果您的 VM 每秒可以处理数百个以上的事务,则可能会忽略 fsync 或写入缓存存储,您应该在它吃掉您的数据之前找出哪个。

但为什么?

(更新):正如 Chris Travers 所指出的,为什么要虚拟化数据库服务器?为什么不在数据库服务器级别处理复制、心跳和故障转移,通过副本提升进行迁移,并获得裸机的全部性能?

我以 VM 是给定的心态写了这个原始回复,问题是如何获得最佳结果。在我看来,最好的数据库服务器虚拟化仍然是没有虚拟化。也就是说,我只管理过相当小的网站。