高可用性NFS

我们正在考虑在Amazon AWS上托pipe一个Web应用程序。 我已经为它提出了一个build议的设置,我将尝试总结几行:

  • Web应用程序由负载均衡器后面的3个可用区域中的Web服务器提供。 当负载增加时,networking服务器会自动从3增大。 这是通过运行几个bash命令的用户数据文件完成的。
  • 数据库放置在多可用区RDS解决scheme上
  • 由于应用程序写入文件系统,我们还需要在webroot上安装某种networking附加文件系统。

最后一点是我担心的。 我有一些AWS的经验,除了处理两个可用区之间的延迟之外,这将提供单点故障。

所以,我一直在看GlusterFS,因为那是serverfault上的某个人向正在处理类似泡菜的人提出的build议。 我已经在每个AZ中build立了一个Gluster节点的环境。 在我的web服务器的启动脚本中,我评估它所在的AZ的名称,并select同一AZ中的Gluster节点,以减less延迟。 那很完美!

但是,让我们说在AZ美国us-east-1a节点以某种方式失败。 有没有办法让我的web服务器在us-east-1a回落到us-east-1b的节点us-east-1b如果us-east-1a节点不可用? 当然,如果两者都不可用,对us-east-1c也是us-east-1c

到目前为止,我只看到了在同一台机器上使用Gluster的服务器和客户端function的例子,我想避免这种情况。 出于性能考虑,我将使用NFS客户端可能是一件好事。

当然,这个文件存储系统的任何其他build议将是非常受欢迎的。

我想更新任何感兴趣的人如何决定去做这件事。 就像我说的那样,S3 适合我们的情况,这可能是更多人争取的东西。

Gluster似乎是当时要走的路,因为它专门用来做这些事情。 然而,在我们的testing环境中,Glusters的速度让我们失望。 是的,文件传输到Gluster文件系统是相当快的,但我们做了很多的查找和快速读取和写入这些安装的卷,当testing更高的负载,它成为一个瓶颈。 Gluster NFS客户端对于这些操作要快得多,但不支持Gluster内置的容错function。

所以,我们回到了原来的想法:简单地在另一个AZ中使用具有故障转移的NFS服务器。 为了保持节点同步,我们使用DRBD 。 我们解决了使用VTun没有虚拟IP的问题(我对其他build议非常开放),并且在主站closures时使用Heartbeat来提升从站。