在 EC2 上运行 PostgreSQL 的最佳性能是什么?RAID中的EBS?/mnt 上的 PGData?
你有什么喜好或经验吗?在 EBS 上运行 PostgreSQL 的主要“加号”是从一个实例切换到另一个实例。这可能是比使用 /mnt 分区慢的原因吗?
PS:我正在运行 PostgreSQL 8.4,数据/大小约为 50G,Amazon EC2 xlarge(64) 实例。
在 EC2 上运行 PostgreSQL 的最佳性能是什么?RAID中的EBS?/mnt 上的 PGData?
你有什么喜好或经验吗?在 EBS 上运行 PostgreSQL 的主要“加号”是从一个实例切换到另一个实例。这可能是比使用 /mnt 分区慢的原因吗?
PS:我正在运行 PostgreSQL 8.4,数据/大小约为 50G,Amazon EC2 xlarge(64) 实例。
这里有一些链接信息。主要的收获是布莱恩墨菲的这篇文章:
1.5 年来一直在 Amazon 上运行一个非常繁忙的 170+ gb OLTP postgres 数据库。我不能说我“快乐”,但我已经让它工作了,而且我仍然喜欢它而不是在凌晨 3 点出现问题时跑到市中心去科罗拉多。
主要有两点需要警惕:
1) 物理 I/O 不是很好,因此第一个系统如何使用 RAID0。
让我们在这里明确一点,物理 I/O 有时很糟糕。:)
如果您有一个更大的数据库,那么 EBS 卷将成为真正的瓶颈。我们的主数据库在一个 RAID 驱动器中需要 8 个 EBS 卷,我们使用 slony 将请求卸载到两台从机,但它仍然无法真正跟上。
我们无法在单个 EBS 卷上运行此数据库。
我还建议您使用 RAID10,而不是 RAID0。EBS 卷失败。更常见的是,单个卷将经历很长一段时间的性能不佳。您在团队中拥有的驱动器越多,您就越能顺利解决问题。但是,在某些情况下,我们不得不将性能不佳的卷换成新的,并重建 RAID 以使事情恢复正常。RAID0 阵列无法做到这一点。
2) EBS 的可靠性按数据库标准来说很糟糕;我已经在 http://archives.postgresql.org/pgsql-general/2009-06/msg00762.php对此发表了一些评论最终结果是,您必须小心备份数据的方式,并使用连续流式传输通过 WAL 运输进行备份是推荐的方法。如果在 EC2/EBS 故障的情况下丢失一两分钟的事务是不可接受的,我不会部署到这种环境中,因为与大多数数据库硬件相比,这种情况在这里发生的可能性更大。
同意。我们有三个 WAL 发货的备件。一个将我们的 WAL 文件流式传输到单个 EBS 卷,我们将其用于最坏情况下的快照备份。另外两个是我们用于故障转移的主数据库(一个在西海岸数据中心,另一个在东海岸数据中心)的精确副本。
如果我们不得不从我们的一个 EBS 快照进行最坏情况的恢复,我们将停机六个小时,因为我们必须将 EBS 快照中的数据流式传输回 EBS RAID 阵列。20mb/秒的 170gb(如果幸运的话)需要很长时间。一旦我们从中创建驱动器,其中一个快照需要 30 到 60 分钟才能变得“可用”,然后我们仍然必须启动数据库并等待很长一段时间让热数据流回内存。
在过去的 1.5 年中,我们不得不两次故障转移到我们的一个备件。不好玩。两次都是由于实例失败。
在 EC2 上运行更大的数据库是可能的,但这需要大量的工作、仔细的计划和厚脸皮。
布莱恩