【问题标题】:How to setup shared persistent storage for multiple AWS EC2 instances?如何为多个 AWS EC2 实例设置共享持久存储?
【发布时间】:2015-08-02 20:02:42
【问题描述】:

我有一项托管在 Amazon Web Services 上的服务。我有多个 EC2 实例运行完全相同的设置和数据,由弹性负载均衡器和扩展组管理。

这些实例是运行基于 PHP 的 Web 应用程序的 Web 服务器。因此,目前每个实例上都放置了完全相同的文件等。但是当 ELB / 伸缩组根据负载规则等启动新实例时,文件可能不是最新的。 此外,我更愿意为 PHP 会话等使用共享文件系统,而不是粘性会话。

所以,我的问题是,出于这些原因以及将来可能会出现的更多原因,我希望拥有一个可以附加到我的 EC2 实例的共享文件系统实体。 你会建议用什么方法来解决这个问题? AWS 是否直接提供任何解决方案,这样我就可以依赖他们的服务,而不是使用 DRBD 等在我的设备上进行操作?最简单的方法是什么? DRBD,NFS,...? S3 是否也适用于这些意图?

提前致谢。

【问题讨论】:

  • AWS 即将推出新的网络文件存储解决方案功能。在那之前,我认为最好的选择是使用 S3 来存储资产。对于会话,请尝试 Elasticache 或将会话存储在数据库中以获得完整的无状态服务器。您的设置听起来像 beanstalk 提供的。您是手动配置它们还是使用 Beanstalk?如果您使用 beanstalk,您可以编写脚本以在启动时从 s3 存储桶或其他实例下载资产用于本地存储。只要您的服务器不生成任何新资产,这将起作用。

标签: amazon-web-services amazon-ec2


【解决方案1】:

正如评论中提到的,AWS 宣布了 EFS (http://aws.amazon.com/efs/) 一个共享网络文件系统。它目前处于非常有限的预览阶段,但基于之前的 AWS 服务,我希望在接下来的几个月内看到它普遍可用。

与此同时,AWS 也有一些第三方共享文件系统解决方案,例如 SoftNAS https://aws.amazon.com/marketplace/pp/B00PJ9FGVU/ref=srh_res_product_title?ie=UTF8&sr=0-3&qid=1432203627313

S3 是可能的,但并不总是理想的,主要的障碍是它本身不支持任何文件系统协议,而是所有交互都需要通过 AWS API 或通过 http 调用。此外,在考虑将其用于会话存储时,“最终一致”模型可能会导致问题。

话虽如此 - 如果您只需要更新资源,您可以创建一个简单的脚本来作为 cron 运行或在启动时从 s3 下载文件。

最后,对于像 css/images 这样的静态资源,首先不要将它们存储在您的网络服务器上 - 有很多文章介绍了直接从 s3 存储和访问静态网络资源同时保持动态内容的好处在您的服务器上。

【讨论】:

  • Softnas 允许您将 s3 用作 NFS 和精简卷。很酷!我会避开 AWS EFS。当我试图有效地使用它时,非常昂贵,缓慢,老实说是在浪费我的时间。我希望看到其他解决方案来挂载存储在 s3 存储桶中的 ZFS 并作为 NFS 共享。
【解决方案2】:

在Amazon EFS 投入生产之前,我认为最好的方法是构建一个从 EC2 实例导出 NFS 的存储后端,也许使用Pacemaker/Corosync 来实现 HA。

您可以创建一个 EBS 卷来存储文件并指示 Pacemaker 卸载/分离,然后将 EBS 卷附加/挂载到健康的 NFS 集群节点。

【讨论】:

    【解决方案3】:

    为了使您的网络服务器会话保持同步,您可以轻松切换到 Redis 或 Memcached 作为会话处理程序。这是 PHP.ini 中的一个简单设置,它们都可以访问同一个 Redis 或 Memcached 服务器来进行会话。您可以使用 Amazon 的 Elasticache,它将为您管理 Redis 或 Memcache 实例。

    http://phpave.com/redis-as-a-php-session-handler/

    保持文件同步有点复杂。

    如何将新的代码更改推送到我的所有网络服务器?


    您可以使用 Git。部署时,您可以设置多个服务器,它将您的分支(主)推送到多个服务器。因此,每个新版本都会发送到所有网络服务器。

    推出的新机器怎么样?

    我会设置新机器以运行来自受信任来源的 rsync 脚本,即您的主 Web 服务器。这样,它们在启动时将其 Web 文件夹与主文件夹同步,即使 AMI 中有旧的 Web 文件,它们也是相同的。

    那些发生变化并需要实时更新的文件呢?

    将任何用户上传的文件存储在 S3 中。因此,如果用户在服务器 1 上上传文档,则文件存储在 s3 中,位置存储在数据库中。然后,如果另一个用户在服务器 2 上,他可以看到相同的文件并像在服务器 2 上一样访问它。该文件将从 s3 检索并提供给客户端。

    【讨论】:

      【解决方案4】:

      您好,我们目前在 AWS 环境中使用名为 SoftNAS 的产品。它允许我们在 EBS 和 S3 支持的存储之间进行选择。它具有内置复制功能以及高可用性选项。可能是你可以检查的东西。我相信他们提供免费试用版,您可以在 AWS 上试用

      【讨论】:

        【解决方案5】:

        据我们目前所知,EFS 有望在 SSD 支持的存储上提供基本的 NFS 文件共享。一旦可用,它将是一个 v1.0 专有文件系统。没有加密,而且仅限 AWS。数据完全在 AWS 控制之下。

        SoftNAS 是成熟的、经过验证的基于 ZFS 的高级 NAS 文件管理器,功能齐全,包括加密的 EBS 和 S3 存储、用于数据保护的存储快照、用于 DevOps 和 QA 测试的可写克隆、RAM 和 SSD 缓存以实现最大 IOPS 和吞吐量、重复数据删除和压缩、跨区域 HA 和 100% 正常运行时间 SLA。它支持带有 LDAP 和 Active Directory 身份验证的 NFS、带有 AD 用户/组的 CIFS/SMB、iSCSI 多路径、FTP 和(很快)AFP。 SoftNAS 实例和所有存储完全由您控制,您可以完全控制 EBS 和 S3 加密和密钥(您可以使用 EBS 加密或任何您喜欢或需要的 Linux 兼容加密和密钥管理方法)。

        ZFS 文件系统是经过验证的文件系统,受到全球数千家企业的信赖。如今,客户在 SoftNAS 上运行超过 6 亿个文件 - ZFS 能够扩展到数十亿个。

        SoftNAS 是跨平台的,可在 AWS 以外的云平台上运行,包括 Azure、CenturyLink Cloud、Faction cloud、VMware vSPhere/ESXi、VMware vCloud Air 和 Hyper-V,因此您的数据不受 AWS 限制或锁定.计划建立更多平台。它提供跨平台复制,可以轻松地在任何受支持的公共云、私有云或本地数据中心之间迁移数据。

        SoftNAS 得到云存储专家的行业领先技术支持(我们所做的一切),您可能需要或想要的东西。

        这些是 EFS 和 SoftNAS 之间更值得注意的区别。更详细的对比图:

        https://www.softnas.com/wp/nas-storage/softnas-cloud-aws-nfs-cifs/how-does-it-compare/

        如果您愿意推出自己的 HA NFS 集群,并负责维护、提供和支持它,那么您可以使用 Linux 和 DRBD/corosync 或任何数量的其他 Linux 集群方法。你必须自己支持它,并对发生的任何事情负责。

        还有 GlusterFS。它可以处理多达 250,000 个文件(在我们的测试中),并且已经观察到在接近 100 万个文件时会出现 IOPS 断电,并且在超过 100 万个文件时会出现 IOPS 断电(根据使用过它的客户的说法)。据报道,对于较小的部署,它工作得相当好。

        希望对您有所帮助。

        首席技术官 - SoftNAS

        【讨论】:

        • 似乎 softnas.com 的 robots.txt 禁止互联网存档允许我查看该链接所指的内容。让我觉得softnas有什么要隐藏的?用户代理:ia_archiver 禁止:/
        【解决方案6】:

        我们正在使用 ObjectiveFS,它对我们来说运行良好。它使用 S3 进行存储,并且可以直接设置。

        他们还编写了有关如何在 EC2 实例之间共享文件的文档。 http://objectivefs.com/howto/how-to-share-files-between-ec2-instances

        【讨论】:

          【解决方案7】:

          GlusterFS 也是一个开源分布式文件系统,被许多人用来创建跨 EC2 实例的共享存储

          【讨论】:

            猜你喜欢
            • 2013-06-29
            • 2022-11-11
            • 1970-01-01
            • 1970-01-01
            • 2018-09-17
            • 2013-06-08
            • 1970-01-01
            • 1970-01-01
            • 2015-01-20
            相关资源
            最近更新 更多