EC2在启动时附加实例存储

我正在执行一个实例来托pipe一个Cassandra节点,并且正在testing一些closures和启动脚本。 这个例子是从datastax PV AMI'ami-8932ccfe'发起的。 我为root添加了8GB的SSD EBS存储并启动了它。 在初始启动时,Instance Store(临时驱动器)被连接,一切都很好。 我停止了实例并重新启动它,并且实例存储库不见了,login时显示以下错误消息:

ERROR mount -a: 

接下来,我终止了实例,重新启动了相同的AMI并进行了设置,然后创build了一个快照AMI,并在其中添加了实例存储以尝试将其“烘焙”到实例中。 然而,停下来开始,我得到同样的问题。

我的问题是,我只有权限停止和启动实例,我不能自己创build它们,所以我必须不停地打扰大学帮我启动它们。 我希望能够在一天结束时停止实例,并在早上再次启动,即在工作时间内降低成本。 有问题的服务器只是一个开发实例,所以我不担心数据丢失,所有我需要在启动时运行的是一些脚本来创build表。 但是,因为实例商店没有自动附加启动Cassandra不会安装。

任何人都可以告诉我如何创build一个实例,以便在停止和启动后自动连接实例存储?

在开始实例之后,我使用下面的代码获取一些元数据(如果有帮助的话):

 curl http://169.254.169.254/latest/meta-data/block-device-mapping/ ami ephemeral0 root curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0 sdb 

干杯,阿列克谢蓝。

每当实例停止时,实例存储卷都将被删除。 我不确定什么分配datastax正在运行,但正确的方法是创build一个init脚本,将会:

  1. 检查它是否被安装
  2. 如果不是,则从元数据中获取短暂的驱动器信息
  3. 如果没有,格式化卷并安装它

如果你不想制作一个init脚本来完成它,你可以在/etc/rc.local插入一些行来实现。 就像是:

 mount | awk '{print $3}' | grep -sq /mnt test $? && exit 0 curl -s http://169.254.169.254/latest/meta-data/block-device-mapping/ | grep -sq ephemeral0 test $? && DEV=`curl -s http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0` test -n "$DEV" && mkfs -t ext4 /dev/$DEV test $? && mount /dev/$DEV /mnt 

这个脚本在rails上是非常多的,不能因为任何错误而偏离。 你可能想写一个更强大的。

@ dialtOne的脚本引导我进行一些新的研究,并在github上find了这个脚本 。

本质上,我的实例使用不同的设备模式约定xvdb

有一件事我不得不改变这个脚本是第62行:

 mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=$ephemeral_count $drives 

太多了:

 mdadm --create --verbose /dev/md0 --level=0 -c256 --force --raid-devices=$ephemeral_count $drives 

如果你的实例有一个像我这样的短暂驱动器,你必须使用--force命令来运行。

剧本结束后,我很高兴看到这一点:

 df -h ... /dev/md0 30G 173M 28G 1% /mnt 

再次感谢您的回答@dialtOne。

干杯,阿列克谢蓝