亚马逊ECS - 实例之间的持久数据传输

9
您如何在Amazon ECS中的负载均衡服务实例之间处理持久数据?使用仅数据容器或任务中指定的卷都无法工作,它们只会持久存在于实例本身。我一直在尝试阅读有关在启动配置中使用用户数据在实例创建时附加EBS,但我没有成功。

多少数据?它是只读的吗? - Rodrigo Murillo
我需要存储MySQL数据库和用户上传的内容。数据量不是很大,但需要读写权限。我使用Linux环境。 - Sultanen
1
Amazon ECS数据卷是您要寻找的内容。http://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html - number5
@number5 从那个页面可以看到,数据卷在实例之间不同步,这在使用可自动删除任何不再需要的实例的自动扩展时有点无用,是吗? “Amazon ECS 不会在容器实例之间同步您的数据卷。使用持久数据卷的任务可以放置在具有可用容量的集群中的任何容器实例上。如果您的任务在停止和重新启动后需要持久数据卷,则应始终在任务启动时使用 AWS CLI start-task 命令指定相同的容器实例。” - Sultanen
@Sultanen 对不起,我误解了你的问题。你实际上想要一个Docker集群(如Swarm)的持久存储。我建议你看看RDS,例如Aurora或Mysql+S3(用于用户上传内容)。还可以查看kubernetes(可在普通EC2上平稳运行)。 - number5
3个回答

11

4
我建议使用Amazon EFS(https://aws.amazon.com/blogs/compute/using-amazon-efs-to-persist-data-from-amazon-ecs-containers/)。请注意,只有4个区域支持EFS:
欧洲(爱尔兰)
美国东部(北弗吉尼亚)
美国东部(俄亥俄州)
美国西部(俄勒冈州)
如果您所在的地区不支持,则可以实现自己的NFS共享以在EC2实例之间共享持久文件夹。S3FS看起来很酷,但存在错误(我在两年前进行了测试,今天可能会有所改变)。

2
根据您的数据需求,我能想到两种选择: 将S3存储桶映射为本地驱动器 您可以共享一个S3存储桶并限制任意数量的实例访问。在Windows中,我们使用驱动器映射解决方案,将S3存储桶挂载为本地驱动器。Linux也有类似的驱动程序。因此,每个实例都会得到相同的映射驱动器,并共享该持久化数据。数据是读/写的,因此如果我们进行缩放,每个实例都可以以一致的格式访问S3数据。 从快照挂载卷 正如您所建议的,如果您需要访问只读数据,您可以使用Userdata脚本在启动时从快照挂载卷。您只需要一个脚本和凭据/IAM角色来运行适当的命令即可。

谢谢您的输入!我会尝试为Linux找到一个S3映射器! - Sultanen
我添加了一个对Linux S3映射器的引用。 - Rodrigo Murillo
3
@Sultanen,但绝对不要尝试在S3映射器上运行MySQL数据库。 S3是一个对象存储,而不是文件系统,并且缺乏必要的一致性保证以使其正常工作。 - Michael - sqlbot
@Michael-sqlbot 感谢您的评论,我们将尝试改用RDS来作为MySQL数据库。 - Sultanen
1
我应该跟进一下,这并不是s3fs本身的限制。我使用它,但不在前端,也不用于数据库。这是一种聪明的做法,但你必须理解适当的文件系统和对象存储之间存在无法完全弥合的阻抗差。此外,MySQL不能在任何共享卷上工作。不过,对于其他事情,一旦在您的地区可用,弹性文件系统非常好用。 - Michael - sqlbot
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接