任何人都有合理的策略来在AWS上实施NFS,使其不是SPoF(单点故障),或者至少能够在实例崩溃时快速恢复? / p>
我已经阅读了这篇SO post,关于与多个EC2实例共享文件的能力,但它没有回答如何在AWS上使用NFS确保HA的问题,只是可以使用NFS。
许多在线资产都说 AWS EFS 可用,但它仍处于预览模式,仅在俄勒冈州有售,我们的主要VPC位于N. Cali。,所以不能使用此选项。
其他在线资产表示 GlusterFS 是一种可行的方式,但经过一些研究后,由于竞争条件和性能问题,我不愿意实施此解决方案。
另一个选择是 SoftNAS ,但我想避免将未知的AMI引入严格控制的同质环境中。
其中 NFS 。 NFS是我们在开发环境中使用的并且运行良好,但它是开发人员,所以如果它崩溃了,我们会在系统修复问题时得到几杯啤酒,但在生产中,这显然是不行的。
此时我能想出的最佳解决方案是创建一个EBS和两个EC2实例。两个实例都将正常更新(通过puppet)以维护堆栈对齐(内核,nfs库等),但只有一个实例将安装EBS。我们在活动的NFS实例上设置了一个监视器,如果它关闭,我们会收到通知,我们会手动分离并附加到备份EC2实例。我认为我们还创建了一个也可以解除连接的网络接口,因此我们只需要在DNS中维护一个IP。
虽然我认为我们可以使用keepalived自动执行此操作,以及允许自动分离/重新附加的IAM策略。
- UPDATE -
看起来EBS卷与特定的可用区域相关联,因此无法重新附加到另一个AZ中的实例。我能想到的唯一其他选择是:
这里唯一的问题是,保持两台NFS服务器同步的最佳方法是什么?只是cron之间的rsync脚本?
或者是否有一种我完全失踪的最佳做法?
答案 0 :(得分:2)
有几个选项可用于构建高可用性NFS服务器。虽然我更喜欢使用EFS或GlusterFS,因为所有这些解决方案都有其缺点。
a)DRBD 可以在DRBD的帮助下同步卷。这允许您镜像数据。在不同的可用区域中使用两个EC2实例以实现高可用性。缺点:配置和操作很复杂。
b)EBS快照 如果RPO超过30分钟是合理的,您可以使用定期EBS快照来从另一个可用区域中断恢复。这可以通过Auto Scaling Group运行单个EC2实例,用户数据脚本和用于定期EBS快照的cronjob来实现。缺点:RPO> 30分钟。
c)S3同步 可以将充当NFS服务器的EC2实例的状态与S3同步。备用服务器使用S3保持最新。缺点:许多小文件的S3同步将花费太长时间。
我建议您通过AWS re:Invent:https://youtu.be/xbuiIwEOCAs
观看此演讲答案 1 :(得分:0)
AWS已审核并批准了许多SoftNAS AMI,这些AMI可在AWS Marketplace上找到。联合出版的SoftNAS Architecture on AWS White Paper提供了更多详细信息:
您还可以尝试30天免费试用,看看它是否符合您的需求。 http://softnas.com/tryaws
完全披露:我为SoftNAS工作。