我们正在考虑在Amazon AWS上托pipe一个Web应用程序。 我已经为它提出了一个build议的设置,我将尝试总结几行:
最后一点是我担心的。 我有一些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来提升从站。