Amazon ECS - 实例之间的持久数据
Posted
技术标签:
【中文标题】Amazon ECS - 实例之间的持久数据【英文标题】:Amazon ECS - Persistent data between instances 【发布时间】:2016-05-03 17:44:01 【问题描述】:您将如何使用 Amazon ECS 中的负载平衡服务最好地处理实例之间的持久数据?仅数据容器将不起作用,您可以在任务中指定的卷也不起作用,它们都只会保留在实例本身上。我一直在尝试阅读有关在启动配置中使用用户数据创建实例时附加 EBS 的内容,但我没有运气。
【问题讨论】:
多少数据?是只读的吗? 我需要存储mysql数据库+用户上传的内容。没有大量数据,但它需要是 R+W。我使用的是 Linux 环境 Amazon ECS 数据量就是您要找的docs.aws.amazon.com/AmazonECS/latest/developerguide/… @number5 从该页面您可以看到数据量在实例之间不同步,并且在使用自动缩放时这有点没用,可以在不再需要时删除任何实例? “Amazon ECS 不会跨容器实例同步您的数据卷。使用持久数据卷的任务可以放置在集群中具有可用容量的任何容器实例上。如果您的任务在停止和重新启动后需要持久数据卷,您应该始终指定使用 AWS CLI start-task 命令在任务启动时创建相同的容器实例。” @Sultanen 抱歉,我误解了你的问题。您想要的实际上是 docker 集群(如 Swarm)的持久存储。我建议你看一下 Aurora 或 Mysql + S3 之类的 RDS(用于用户上传内容)另外查看 kubernetes(可以在普通 EC2 上顺利运行) 【参考方案1】:您可以使用 Amazon EFS 在 ECS 容器和实例之间共享文件系统。 EFS 基于 NFS,因此可以同时挂载在多个主机实例上。这允许集群调度和扩展按预期工作。在此处查看以这种方式保存 MySQL 数据的教程:
https://aws.amazon.com/blogs/compute/using-amazon-efs-to-persist-data-from-amazon-ecs-containers/
【讨论】:
【参考方案2】:我建议使用 Amazon EFS (https://aws.amazon.com/blogs/compute/using-amazon-efs-to-persist-data-from-amazon-ecs-containers/)。
只需添加一个限制,即只有 4 个区域支持 EFS。
欧盟(爱尔兰)
美国东部(弗吉尼亚北部)
美国东部(俄亥俄州)
美国西部(俄勒冈)
如果您的区域不受支持,那么我们可以实施您自己的 NFS 共享以在 EC2 实例之间共享持久文件夹。 S3FS 看起来很酷,但它有问题(我在 2 年前测试过。今天情况可能会改变)
【讨论】:
【参考方案3】:根据数据需求,我可以想到两种选择:
将 S3 存储桶映射为本地驱动器
您可以共享一个 S3 存储桶并限制对任意数量的实例的访问。我们在 Windows 中使用 drive mapping solution 将 S3 存储桶挂载为本地驱动器。 Similar drivers exist for Linux。因此,每个实例都获得相同的映射驱动器,并共享该持久数据。数据是读/写的,所以如果我们缩小或缩小,每个实例都可以以一致的格式访问 S3 数据。
从快照挂载卷
正如您所建议的,如果您需要访问的是只读数据,您可以使用 Userdata 脚本在启动时从快照挂载卷。您只需要一个脚本和凭证/IAM 角色即可在启动时运行相应的命令
【讨论】:
感谢您的意见!我会尝试为 Linux 找到 S3 映射器! 我添加了对 Linux S3 映射器的引用。 @Sultanen 但绝对不要尝试在 S3 映射器上运行 MySQL 数据库。 S3 是一个对象存储,而不是文件系统,并且缺乏必要的一致性保证以使其正常工作。 @Michael-sqlbot 感谢您的评论,我们将尝试为 MySQL 数据库使用 RDS。 我应该跟进,这不是 s3fs 本身的限制。我使用它,但不是在前端,也不是用于数据库。这是一种聪明的做事方式,但您必须了解正确的文件系统和无法完全桥接的对象存储之间存在阻抗差距。此外,MySQL 不适用于任何类型的共享卷。不过,对于其他事情,一旦在您所在的地区可用,Elastic File System 就相当不错了。以上是关于Amazon ECS - 实例之间的持久数据的主要内容,如果未能解决你的问题,请参考以下文章
Amazon ECS 上的 Spring Cloud 数据流
Amazon RDS 在 Reader 实例和 Writer 实例之间切换服务器