AWS-EC2:高可用性的共享文件系统

我有两个在Amazon EC2上运行的ubuntu实例,希望通过在负载均衡器中运行另一个区域(由快照生成)中的重复实例(或者使用弹性ip进行手动故障转移) 。

问题是具体数据,例如,如果文档根目录(即/ var / www)的内容不相同,从一个Web服务器故障转移到另一个Web服务器是没有好处的。

在这个例子中,我将在自己的卷上争用/ var / www,以免影响根分区。 有没有办法在不同区域的两个或多个实例上共享一个卷? 或者也许是保持两个或更多不同卷在不同区域同步的方法?

正如cyberx86所说,EBS卷不能挂载在多个EC2实例上(即使在同一个可用区域中)。

第一个答案应该是将您的共享资产存储在Amazon S3中 – 这样,您可以通过Capistrano / Mcollective /直接将代码部署到您的实时和备用EC2实例,并完全卸载您的静态内容(即图像,媒体)到S3,也许甚至用CloudFront提供边缘caching。

也就是说,S3不会跨区域复制(EU-West-1到US-East-1),但它确实在一个地区内提供了“四个九”(99.99%)可用性,因此在整个地区范围内失败是不可能的。 对于“腰带和大括号”方法,您可能需要在两个不同区域的S3存储桶之间configuration一个cron'd同步过程 – 使用--sync标志查看--sync 文档 。

如果将你的资产移植到S3上太麻烦了,而且如果你的故障转移机制是热备份的(例如,你在另一个区域有一个随时可用的克隆和手动故障转移),你可以configuration一个cron'd rsync run来保持您的非版本控制资产同步(像以前一样,您应该始终将您的应用代码发布到所有服务器。

集群文件系统(例如GlusterFS,GFS2)或块级复制(例如DRBD)在EC2上不推荐使用(或者至less不要使用保证NIC带宽的实例,例如集群networking范围)。 由于文件系统上的每个IO请求都必须用S3 API调用来支持,所以S3FS已经被certificate是非常慢的 – 详细信息在这里: (1) , (2) 。

您可能会遇到由其他租户造成的networking拥塞(或者甚至自己造成堵塞) – 这些types的解决scheme最适合您控制整个堆栈(或至less影响整个堆栈)的环境。