我目前正在研究将我们的基础设施迁移到 Amazon 的 EC2 上运行,并试图找出设置 MySQL 服务的最佳方法。我倾向于运行我们自己的 MySQL 实例,而不是使用 Amazon 的 RDS,但仍在考虑实例本身的性能和成本最佳方法。
为了获得持久数据,MySQL 数据需要放在 EBS 卷上(使用某种形式的条带 RAID,例如 RAID0 或 RAID10)以提高持久性。但是,EBS IO 受到网络接口(千兆位,因此理论上最大为 128 MB/s)的限制,而临时卷则没有这样的问题。
我确实看到了在一个实例上运行两个 MySQL 服务器的建议,其中一个主服务器在临时磁盘(我们也会对其进行 RAID)上运行,另一个从服务器将更改存储到 EBS 卷,但这会带来一些额外的开销和复杂性(两台服务器)。
我当时的设想是使用某种形式的复制文件系统,这样我就可以
- 在临时卷 RAID0 之上建立文件系统,以最大程度地提高性能
- 上述所有更改均立即复制到由多个 EBS 卷支持的另一个 RAID1 卷,以确保不会丢失数据
这样做的好处是
- 数据库服务器的最佳 IO 性能;IO 无网络延迟
- 减少 EBS 卷上的 IO(因为所有读取 IO 都将在临时卷上完成),从而降低成本
- 良好的数据安全性,因为它备份到冗余的 EBS 卷上
但是,我还没有看到合适的系统将所有更改从一个卷复制到另一个卷;是否有文件系统或任何其他方法可以做到这一点?分布式文件系统(例如 GlusterFS、DRBD 等)似乎专注于在服务器之间复制磁盘,是否可以设置它们来执行我感兴趣的操作?
我还没有看到其他人采用这种方法。我是否有解决方案来解决问题(即性能是否足够好,所以整个想法都是多余的)?该计划是否存在缺陷?
答案1
在没有更好的答案的情况下,看起来我们可以使用 RAID1通过在临时驱动器和 EBS 驱动器的 RAID0 之上创建 RAID1 阵列来实现这一点;由于读取主要发生在临时 RAID0 上,因此性能应该很好,同时我们仍然有写入持久存储和临时存储的操作。