Eth*_*ron 44 amazon-web-services
我的客户使用AWS作为他的VPS.他遇到问题的一件事是,如果现场实例的出价高于他的出价,那么他的实例就会被终止.看起来并不是什么大不了的,除了现场实例不是持久性的,所以每次发生这种情况时我们都必须从图像中恢复.
他希望我做的是写一些会在每X个时间内检查已终止实例的内容,并自动重启它们.更重要的是,他想要某种方式来假装"坚持".我最好的想法是每隔Y时间从每个服务器创建一个图像,然后从该图像启动(如果/当该实例终止时).
任何其他想法都会很高兴听到.我想我的问题是,我是否在正确的轨道上,您是否知道可能已经存在的任何解决方案?
更新:差不多一年后,我回到这里寻找所有这些精彩的回应,并且比我预期的更多地关注这个话题.以下很多答案虽然内容丰富且有帮助,但却质疑我的推理.我想说,即使在那个时候,我100%同意这不是一个明智的想法,但我的客户要求,尽管我有任何尝试,但要把事情转向更好的方向.
非常感谢你的帮助.我最终确定了如何完全按照自己的意愿行事,并且能够编写一些自动重新启动已终止实例的代码.这从来都不容易,但是当我转移到新客户端时它运作良好.
祝你们中任何一个有同样问题的人好运,你们正在进行(可能通过武力,就像我的情况一样)并不容易.现场请求更便宜,因为这里的一些人提到了他们的回复,特别是因为没有提供持久性.否则,我认为"现货要求"市场的定价会大不相同.
尽管如此,有可能,我做到了,这是一次很棒的经历.如果没有办法,你必须伪造它!如果你不这样做,别人会.
更新II:我只想提醒大家,这是我基本上的任务.虽然当时许多人只是驳回了整个概念,但我最终得到了一个或多或少功能的SaaS,允许人们轻松管理和监控所有现场实例,包括启用/禁用自动持续重启的能力.实例,单个实例的调度时间(它们应该或不应该启动它们)等.
虽然我绝对同意,从开发者的角度来看,它是一个不雅的需求,在当时,我并没有想这样做,我还是会说,这是在一个方法挺有意思,被要求到努力工作,因为我不仅学到了很多东西,而且不仅对我的能力和代码有了很大的信心,而且我制作了一个非常有用的东西,据我所知,我的软件非常有价值.客户(即使他们要求错误的东西,因为他们不知道更好).
我试图说服他,但他坚持说,既然他是那个付钱的人,我把注意力集中在那里,不仅完成了许多人在这里被贬低的愚蠢行为,而且使得它对某人有利可图.
如果它是愚蠢,就不会保存任何人的钱.
看,我现在读这篇文章并且稍微畏缩一下.那时我更天真.我知道AWS 好多了,现在,我现在代码好多了,等等.当然.
但我仍然为解决这个问题而感到骄傲,特别是因为正是这些同事,年龄更大,经验更丰富,无疑是伟大的程序员,他们告诉我它不能或不应该完成.你是那些对我提出挑战的人,谢谢!
如果可以盈利的话怎么办?你确定它不应该吗?
Eth*_*ron 26
我们最终找到了解决方案,这就是我们必须做的事情.我将逐步列出这一点,以便为那些可能正在寻找类似解决方案的人重新创建这个...
如果您按照上述步骤操作T,您将在旧实例终止时的同一点上有一个新实例.因此,我们已经实现了某种形式的持久性.
Nig*_*com 11
(感谢Ethan Barron的一些原创想法.这是一个有一些更正和澄清的版本.)
[1].创建一个新的专色实例.取消激活根设备的"终止时删除".记下体系结构(x86_64)和内核ID.
[2].SSH进入新实例并创建一些文件,这些文件应该在重新启动后持续存在.不要终止实例.
[3].在实例仍在运行时创建实例的快照(这可能会在极少数情况下导致文件系统不一致,因此限制写入启动卷).记下该快照的名称.
[4].现在退出SSH连接并终止实例.
[5].从步骤3中创建的快照创建AMI(AWS不支持从卷创建AMIS;它必须是快照.如果您使用的是剩余卷,则还有一个步骤:创建该快照).
[6].根据步骤1中的体系结构,步骤1中的内核ID和步骤5中创建的AMI请求新的现场实例.
这应该工作.
小智 9
如果你使用的是ubuntu,我找到了解决这个问题的方便方法.它使用了一个名为'overlayroot'的功能,该功能包含在ubuntu发行版中.我们的想法是将根文件系统保持为只读,并将所有更改写入EBS支持的覆盖文件系统.由于root是只读的,因此可以在终止时删除它,并且所有更改都将保留在overlay文件系统中.
首先创建一个启用overlayroot的自定义AMI.使用AWS控制台启动您最喜欢的AMI.登录并将以下行添加到/etc/overlayroot.local.conf
overlayroot=device:dev=/dev/xvdf,timeout=180,recurse=0
使用AWS从您的实例"Instances-> Actions-> Image-> Create Image"创建自定义AMI
现在创建并将EBS卷附加到实例."Volumes-> Actions-> Attach Volume"然后初始化卷.
mkfs.ext4 /dev/xvdf
Run Code Online (Sandbox Code Playgroud)
第一个实例仅用于创建自定义AMI并初始化卷,因此可以终止它.在创建自定义图像之前,请勿附加EBS卷,以使其不包含在图像中.
每次启动现场实例时都应遵循以下步骤.
重新启动您的实例."Instances-> Actions-> Instance State-> Reboot".登录后,你应该看到这样的东西
ubuntu@ip-10-178-74-83:~$ mount
overlayroot on / type overlayfs (rw,discard)
...
/dev/xvda1 on /media/root-ro type ext4 (ro,relatime,data=ordered)
/dev/xvdf on /media/root-rw type ext4 (rw,relatime,data=ordered)
更新:时间已经改变
现在可以将EC2 竞价型实例请求配置为stop
代替terminate
高价竞价型实例,或配置为导致竞价型实例中断的任何其他与容量相关的事件.
请参阅"EC2开发人员指南"中的" 中断行为 ".某些类的实例也可以在安装了适当的代理的情况下休眠.
请注意,此新功能不保证实例将继续运行,而只是保证它们将以其先前的EBS卷,专用IP,弹性IP和实例ID重新启动.
以前的答案如下:
竞价型实例不能持久,但是现货请求可以.
持久性竞价请求:当您将竞价出价请求指定为"持久性"时,您可以确保在您的实例终止后 - 由您或Amazon EC2自动重新提交它 - 直到您取消出价请求为止.这使您可以在竞价价格低于最高价格时自动启动竞价型实例.
http://aws.amazon.com/ec2/spot-instances/#4
这使得机器在价格在范围内的任何时候运行,但就其余部分而言,考虑你的现场实例在做什么,你认为磁盘的持久性是要走的路.想想"云".想想"短暂的".竞价型实例旨在成为启动,获取工作,工作,提交工作的短暂机器,如果它们消失,工作仍然在那里等待下一个实例再次获取它,完成它并提交它.您可以"使用"它们与EBS一起使用并保留卷,但如果这样做,则无法重新启动这些实例(正如您所注意到的那样).
如果您的AMI使用实例存储,并存储需要在外部持久化的所有内容(例如,在S3中),那么您不需要破解AWS架构,并且可以坐下来看看您的机器在价格时启动是的,做他们的工作,并在价格超出范围时再次关闭.而且,没有任何腐烂,因为每个靴子都是一个闪亮的清洁系统.
或者,您的实例可以挂载由始终打开的计算机导出的NFS共享.
或者:https://serverfault.com/questions/448043/auto-attach-ebs-volume-to-a-new-spot-instance
归档时间: |
|
查看次数: |
16518 次 |
最近记录: |