【发布时间】:2016-01-29 01:17:40
【问题描述】:
是否有人制定了在 AWS 上实施 NFS 的合理策略,使其不是 SPoF(单点故障),或者至少在实例崩溃时能够快速恢复?
我读过这个SO post,关于与多个 EC2 实例共享文件的能力,但它没有回答如何在 AWS 上使用 NFS 确保 HA 的问题,只是可以使用 NFS。
很多在线资产都在说 AWS EFS 可用,但它仍处于预览模式,仅在俄勒冈地区可用,我们的主要 VPC 位于北加州,所以无法使用此选项。
其他在线资产说 GlusterFS 是一种可行的方法,但经过一些研究,由于竞争条件和性能问题,我觉得实施此解决方案并不合适。
另一个选项是 SoftNAS,但我想避免将未知的 AMI 引入严格控制的同质环境中。
留下NFS。 NFS 是我们在我们的开发环境中使用的并且工作正常,但它是开发的,所以如果它崩溃了,我们会在系统修复问题时去喝几杯啤酒,但在生产环境中,这显然是不行的。
此时我能想到的最佳解决方案是创建一个 EBS 和两个 EC2 实例。两个实例都将正常更新(通过 puppet)以保持堆栈对齐(内核、nfs 库等),但只有一个实例会挂载 EBS。我们在活动 NFS 实例上设置了一个监视器,如果它出现故障,我们会收到通知,然后我们手动分离并附加到备份 EC2 实例。我认为我们还创建了一个也可以取消/重新连接的网络接口,因此我们只需要在 DNS 中维护一个 IP。
虽然我认为我们可以使用 keepalived 和允许自动分离/重新附加的 IAM 策略自动执行此操作。
--更新--
EBS 卷似乎绑定到特定的可用区,因此重新连接到另一个 AZ 中的实例是不可能的。我能想到的唯一其他选择是:
- 在每个 AZ、公共子网中创建 EC2(每个都有 EIP)
- 为 TCP:2049 创建路由 53 健康检查
- 为 nfs-1 (AZ1) 和 nfs-2 (AZ2) 创建路由 53 故障转移策略
这里唯一的问题是,保持两个 NFS 服务器同步的最佳方法是什么?只是在它们之间运行一个 rsync 脚本?
或者是否有我完全错过的最佳实践?
【问题讨论】:
-
取决于您的要求:您是否需要能够故障转移到另一个可用区?您的 RPO 和 RTO 是多少?您希望客户端自动进行故障转移吗?
-
@Andreas 我更新了 OP。
标签: amazon-web-services amazon-ec2