我正在尝试为运行 ubuntu 12.04 的一组 EC2 实例制定标准配置。这些服务器将主要用作 Ruby on Rails 应用程序的 Web 服务器。当您配置新的大型实例时,您将获得 8GB 的主存储,然后是挂载到 /mnt 的 400GB 的临时存储。
对我来说,将一些具有增长潜力的目录移到 /mnt 目录似乎合乎逻辑,我特别考虑的是/var/www
和/var/log
。
我的问题有两个:
这是一个好主意吗?或者是否存在我所没有看到的陷阱?
如果这是个好主意,我应该如何配置它。我确实有能力配置新实例并关闭旧实例。我担心的是长期配置,我不一定担心停机时间。
我是一名在 devops 方面有一定经验的开发人员,但安装驱动器是我以前从未遇到过的事情,因此非常感谢明确的指导。
答案1
我不知道您保存了什么/var/www
,但我服务器上的内容绝对不能被描述为“短暂的”,我的理解是“随时可能消失,我并不介意”。如果这不是亚马逊所说的“短暂的”,我很抱歉。
至于/var/log
,如果您根本不关心日志数据,那么首先就不要收集它。
如果您确实关心它,但又负担不起将其长期保存在主存储中,那么这不是一个日益严重的问题,而是一个日志管理问题。logrotate
如果可以使用,我倾向于使用,并将其配置为每周左右将旧日志移出/mnt
。这样,旧日志就在那里(直到临时存储消失),但当前日志在主存储上是安全的。
logrotate 配方如下
/var/log/foo {
olddir /mnt
compress
weekly
rotate 1000
postrotate
/etc/rc.d/init.d/fooservice restart
endscript
}
可能会有用,至少可以作为模板。
答案2
您的计划与我为所有实例所做的类似,但我还包括 /var/lib/mysql 和大多数 /etc/{apache2,mysql,php} 目录。我这样做是为了在实例因任何原因终止时不会丢失配置。
这是一个绝妙的主意,因为你永远不会丢失数据。正如我提到的,如果实例发生故障,你将保留该信息,只需将其安装到新实例即可。
最简单的方法是将这些目录移动到 EBS 卷,然后在其原始位置创建指向它们的符号链接。
答案3
如果应用程序积累的数据(在文件系统上)很有价值,则忽略 400GB 免费存储并安装 EBS 卷。否则...
答案取决于(a)你的应用,以及(b)“现货”或“预留”实例,但
1) 是的,这是个好主意,因为显然,您不太可能用完磁盘空间。这是否可能取决于您的 rails 应用程序的功能,但只是为了区分和明确定义什么是“您的”和“我的”,我倾向于将所有“我的”东西放在 上/mnt
。无需手动安装。只需完成即可cd mnt
。需要对权限进行一些调整,但您不会遇到任何问题。
但当然,这个空间是“短暂的”,所以当服务器关闭时它也会关闭,这就引出了我的第二个资格……
2)“现货”还是“预留”实例?
如果你有一个现货实例,那么你必须接受这样的可能性,尽管这种可能性很小,但你的最高价格可能会被超过,服务器可能会被意外终止。如果服务器上的数据有价值,那就会造成问题。
但是!如果您为“保留”实例支付额外费用,这意味着(我还没有阅读所有细则免责声明 ;-/)您的服务器意外终止的威胁以及应用程序的数据积累将大大减少。您可能能够安排定期备份(到 S3?)并非常轻松地入睡,而无需支付 EBS 的额外费用。
如果从长远来看,如前所述,目标是最小化停机时间(和风险)。因此,您宁愿多付一点钱,也不愿浪费时间省钱,然后忽略/mnt
并熟悉如何创建和安装EBS
卷。将all
您的内容放在那里。这样您就可以重新启动服务器而不会失眠。这些东西不会消失,也不会“花一段时间”才能恢复到发生灾难之前的状态,从而需要循环服务器实例。