我在亚马逊网络服务上托管了一项服务。我有多个EC2实例运行完全相同的设置和数据,由Elastic Load Balancer和扩展组管理。
这些实例是运行基于PHP的Web应用程序的Web服务器。因此,目前每个实例上都放置了相同的文件等。但是当ELB /扩展组根据加载规则等启动新实例时,文件可能不是最新的。 另外,我更喜欢使用共享文件系统进行PHP会话等而不是粘性会话。
所以,我的问题是,由于这些原因以及未来可能会出现更多,我希望有一个共享文件系统实体,我可以将其附加到我的EC2实例。 您建议以什么方式解决此问题?是否有AWS直接提供的解决方案,因此我可以依赖他们的服务而不是使用DRBD等来实现它?什么是最简单的方法? DRBD,NFS,......? S3对那些打算是否可行?
提前致谢。
答案 0 :(得分:3)
正如评论中所述,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存储和访问静态Web资源的好处,同时保留了您服务器上的动态内容。
答案 1 :(得分:1)
为了使您的网络服务器会话保持同步,您可以轻松切换到Redis或Memcached作为会话处理程序。这是PHP.ini中的一个简单设置,它们都可以访问相同的Redis或Memcached服务器来进行会话。您可以使用Amazon的Elasticache,它将为您管理Redis或Memcache实例。
http://phpave.com/redis-as-a-php-session-handler/< - 解释如何使用PHP轻松设置Redis
保持文件同步有点复杂。
如何将新代码更改推送到我的所有网络服务器?
你可以使用Git。部署时,您可以设置多个服务器,它会将您的分支(主服务器)推送到多个服务器。所以每个新版本都会出现在所有网络服务器上。
推出的新机器怎么样?
我会设置新机器来运行来自可信来源(主Web服务器)的rsync脚本。这样他们就可以在启动时将他们的web文件夹与主文件夹同步,即使AMI中有旧的Web文件,它们也是相同的。
如果文件发生变化并需要实时更新?
在S3中存储任何用户上传的文件。因此,如果用户在服务器1上上载文档,则该文件存储在s3中,并且位置存储在数据库中。然后,如果服务器2上有不同的用户,他可以看到相同的文件并将其访问,就像它在服务器2上一样。该文件将从s3中检索并提供给客户端。
答案 2 :(得分:1)
从目前我们可以看出,EFS有望在SSD支持的存储上提供基本的NFS文件共享。一旦可用,它将成为v1.0专有文件系统。没有加密和仅限AWS。数据完全受AWS控制。
SoftNAS是一款成熟的,经过验证的先进的基于ZFS的NAS Filer,功能齐全,包括加密的EBS和S3存储,用于数据保护的存储快照,用于DevOps和QA测试的可写克隆,用于最大IOPS的RAM和SSD缓存以及吞吐量,重复数据删除和压缩,跨区域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云,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停电,并且IOPS停电超过100万个文件(根据使用它的客户而言)。据报道,对于规模较小的部署,它的运行情况相当不错。
希望有所帮助。
首席技术官 - SoftNAS
答案 3 :(得分:0)
在Amazon EFS投入生产之前,我认为最好的方法是构建从EC2实例导出NFS的存储后端,可能使用Pacemaker/Corosync来实现HA。
您可以创建一个存储文件的EBS卷,并指示Pacemaker卸载/拆卸,然后将EBS卷连接/挂载到健康的NFS群集节点。
答案 4 :(得分:0)
您好我们目前在AWS环境中使用名为SoftNAS的产品。它允许我们在EBS和S3支持的存储之间进行选择。它内置了复制功能和高可用性选项。可能是你可以看看的东西。我相信他们提供了一个可以在AWS上试用的免费试用版
答案 5 :(得分:0)
我们正在使用ObjectiveFS,它对我们来说效果很好。它使用S3进行存储,并且可以直接设置。
他们还撰写了一篇关于如何在EC2实例之间共享文件的文档。 http://objectivefs.com/howto/how-to-share-files-between-ec2-instances
答案 6 :(得分:0)
GlusterFS也是一个开源分布式文件系统,许多人用它来创建跨EC2实例的共享存储