Amazon EC2上的冗余NFS

我有兴趣在Amazon EC2上构build两个具有故障转移function的容错/冗余NFS服务器。 我熟悉DRBD,Heartbeat等工具/技术。亚马逊是否提供了通过他们的平台实现这一目标的具体方式?

一个合适的例子可能是文件保存在一个单独的冗余EBS上 – 如果发生故障,将从预先构build的AMI自动启动一个新实例,安装EBS卷,并且无缝地转换IP地址。

这可能吗? 有没有比亚马逊更好的平台? 你能给我一个关于我们正在讨论的基础架构的广泛的概念吗?

在AWS上,使用带有Elastic Load Balancer的GlusterFS和自动扩展EC2实例应该可以实现您想要的function。 我不能评论任何其他的IaaS。

亚马逊提供了一些你需要达到你的目标 – 并允许你实现其余的。

亚马逊的EC2服务器基本上是VPS – 你可以设置Heartbeat / Corosync / Pacemaker等(虽然上次我检查了,你不能在他们的networking上使用广播 – 你可以使用unicast,但是 – udpu)。

您提到亚马逊(有点)分别提出两个想法:容错和冗余。

在EC2上没有内置的冗余机制,虽然取决于你在找什么,但有一些方法来实现它。

  • 从理论上讲,S3的devise具有多层的减less和“devise提供99.999999999%的物体在一年内的耐久性 ”。 他们的SLA是每年99.9%的可用性 。 如果您想要使用该路由来获取静态文件,则可以使用s3fuse作为本地文件系统来挂载S3存储桶。 然而,这是相当缓慢的,对于大多数目的(代码,数据库,服务器软件等)来说并不是很明智的。
  • EBS快照将为您提供EBS卷的压缩,差分时间点映像。 这些作为备份是非常棒的 – 你可以从快照中启动新的实例,但不是真正的冗余。
  • 对于任何实际冗余的解决scheme,您必须自行设置。 为此问题devise的一种方法是GlusterFS。 您可以将砖块设置为分布式,复制式或两者兼而有之,数据将分布在整个系统中 – 它可以轻松移除各个节点,并且具有预先构build的AMI,您可以从中启动多个实例来构build簇。

另一方面,亚马逊平台更好地提供容错function:

  • EC2networking提供了多个区域和可用性区域 – 理论上这些区域提供了隔离和/或地理上分离的数据中心,以避免单点故障
  • Amazon提供了各种实例指标(CPU,networking,磁盘I / O等)的监控(Cloudwatch)以及自定义指标。 这些可以用作从预先构build的AMI启动新实例的触发器,这个过程称为“自动缩放”。
  • EC2具有弹性IP地址 – 这些是可以保留的公共IP地址,可以根据需要快速重新映射到另一个实例,从而避免实例closures时DNS传播的延迟。
  • 最后,亚马逊拥有Elastic Load Balancer,这些平衡器被devise用来避免单点故障,并且可以扩展传入stream量(不会受到相同带宽限制的影响,因此作为负载平衡器的单个实例设置可能会受到影响至)。 ELB能够监视后端实例的“健康状况”,并使用自动缩放来保持适当数量的实例。

除上述之外,还可以将自定义parameter passing给新启动的实例,或者相当容易地检索有关当前正在运行的实例的信息 – 这可能允许您编写一些设置脚本(当然,AWS确实有一个API将允许您脚本提供的所有操作 – 包括重新映射弹性IP地址,启动新实例,分离/附加EBS卷等)。

您所描述的'文件保存在一个单独的,冗余的EBS上(然后被挂载)“。 首先,在EC2上,EBS卷一次只能附加到一个实例(所以要复制数据,EBS卷需要被附加)。 维护冗余(您可以设置EBS设备的RAIDarrays,或者做其他任何事情)由您决定。 但问题是,有时EBS卷在某个实例崩溃时不会被分离 – 您可以强制将它们分离(它有一个更好的,但不是完美的成功率),并且可以快照EBS卷,即使在使用中那么你可以创build一个新的EBS卷,并使用AMI启动)。 尽pipe如此,更好(恢复时间更短,更灵活等)是为了在多个实例中维护数据的副本,而不是跨同一实例中的多个EBS卷。

另一种select是使用Zadara Storage,即NFS作为服务。 因为这是一个服务,所以不需要pipe理NFS服务器堆栈,默认情况下是HA。 你甚至不需要为NFS服务器实例付费。 您可以使用标准NFS将所有EC2机器连接到您的共享。

披露:我在Zadara存储。