将 /var 目录移动到 EC2 实例上的 /mnt

将 /var 目录移动到 EC2 实例上的 /mnt

我正在尝试为运行 ubuntu 12.04 的一组 EC2 实例制定标准配置。这些服务器将主要用作 Ruby on Rails 应用程序的 Web 服务器。当您配置新的大型实例时,您将获得 8GB 的​​主存储,然后是挂载到 /mnt 的 400GB 的临时存储。

对我来说,将一些具有增长潜力的目录移到 /mnt 目录似乎合乎逻辑,我特别考虑的是/var/www/var/log

我的问题有两个:

  1. 这是一个好主意吗?或者是否存在我所没有看到的陷阱?

  2. 如果这是个好主意,我应该如何配置它。我确实有能力配置新实例并关闭旧实例。我担心的是长期配置,我不一定担心停机时间。

我是一名在 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} 目录。我这样做是为了在实例因任何原因终止时不会丢失配置。

  1. 这是一个绝妙的主意,因为你永远不会丢失数据。正如我提到的,如果实例发生故障,你将保留该信息,只需将其安装到新实例即可。

  2. 最简单的方法是将这些目录移动到 EBS 卷,然后在其原始位置创建指向它们的符号链接。

答案3

如果应用程序积累的数据(在文件系统上)很有价值,则忽略 400GB 免费存储并安装 EBS 卷。否则...

答案取决于(a)你的应用,以及(b)“现货”或“预留”实例,但

1) 是的,这是个好主意,因为显然,您不太可能用完磁盘空间。这是否可能取决于您的 rails 应用程序的功能,但只是为了区分和明确定义什么是“您的”和“我的”,我倾向于将所有“我的”东西放在 上/mnt。无需手动安装。只需完成即可cd mnt。需要对权限进行一些调整,但您不会遇到任何问题。

但当然,这个空间是“短暂的”,所以当服务器关闭时它也会关闭,这就引出了我的第二个资格……

2)“现货”还是“预留”实例?

如果你有一个现货实例,那么你必须接受这样的可能性,尽管这种可能性很小,但你的最高价格可能会被超过,服务器可能会被意外终止。如果服务器上的数据有价值,那就会造成问题。

但是!如果您为“保留”实例支付额外费用,这意味着(我还没有阅读所有细则免责声明 ;-/)您的服务器意外终止的威胁以及应用程序的数据积累将大大减少。您可能能够安排定期备份(到 S3?)并非常轻松地入睡,而无需支付 EBS 的额外费用。

如果从长远来看,如前所述,目标是最小化停机时间(和风险)。因此,您宁愿多付一点钱,也不愿浪费时间省钱,然后忽略/mnt并熟悉如何创建和安装EBS卷。将all您的内容放在那里。这样您就可以重新启动服务器而不会失眠。这些东西不会消失,也不会“花一段时间”才能恢复到发生灾难之前的状态,从而需要循环服务器实例。

相关内容