管理 Amazon EC2 Web 服务器上的持久数据

管理 Amazon EC2 Web 服务器上的持久数据

我刚刚开始尝试使用 Amazon 的 EC2 服务来运行使用 SQL Server 2005 Express 数据库的 asp.net Web 应用程序。我对如何配置和操作它以实现最佳可靠性有一些疑问,我希望在这里利用一些集体智慧,因为这是我第一次尝试 EC2。

这是我目前的配置方式:

操作系统:Windows 2003 SQL Server Express 2005

存储在 EBS 卷(E 驱动器)数据库上的 Web 内容存储在 EBS 卷(E 驱动器)数据库上的数据存储到“C 驱动器”,然后复制到 S3。弹性 IP 地址附加到生产实例。

现在,当我更改操作系统配置时,我会使用捆绑功能创建新的 AMI。不幸的是,我发现这会导致大量停机时间。在创建捆绑包并启动新实例时。似乎当我准备好创建新的 AMI 时,我应该:

  1. 启动一个新的临时实例。
  2. 从生产实例中分离 EBS 卷。
  3. 从生产实例中分离 IP 地址。
  4. 将 IP 地址附加到临时实例。
  5. 将 EBS 卷附加到临时实例。
  6. 从生产实例创建 AMI。
  7. 生产实例重新启动后,执行反向连接/分离步骤即可将其重新投入生产。

这是防止 EBS 卷损坏的正确事件顺序吗?如果我在数据库写入时分离 EBS 卷,EBS 卷是否会损坏?我是否应该对生产实例的 EBS 卷进行快照并将其附加到临时实例?或者在使用 EBS 卷时对其进行快照是否会导致损坏?有什么建议可以提高可靠性和操作性?

答案1

这很大程度上取决于您所做的更改类型以及您的 AMI 设置方式。

假设您只是对操作系统进行更改,并且您的 AMI 不会自动安装您的 EBS 卷...

  1. 启动 AMI 的第二个实例
  2. 将您的更改应用到第二个实例和捆绑包。
  3. 捆绑完成后,终止第二个实例。
  4. 注册您的新包并启动它的一个实例。

此时,您应该有一个更新的实例正在运行,只需将 IP 地址和 EBS 卷传输到新实例即可。可能最简单的方法是彻底关闭您的第一个 Windows 实例,完成后只需将 IP 和 EBS 卷附加到新实例即可。就我个人而言,我更喜欢执行以下操作...以防第二个实例无法正常工作并且我想回到第一个实例...

  1. 关闭第一个实例上的 IIS 和数据库服务。(以及访问 EBS 卷的任何其他应用程序/服务)
  2. 拍摄 EBS 卷的快照
  3. 从第一个实例中完全分离 EBS 卷。(http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1841
  4. 将 EBS 卷和 IP 地址附加到第二个实例。
  5. 启动第二个实例上的 IIS 和数据库服务器并进行冒烟测试

由于您在 ami 的第二个实例上进行所有更新,因此在捆绑过程中不会出现停机时间。您还可以随时进行更新,即使在工作日期间,因为您不会触及生产实例。您唯一的停机时间是将 EBS 卷和 IP 转移到新实例时。另一个好处是,如果更新或有关新实例的任何内容不起作用,您可以恢复使用原始实例。

另外,还有一件事……在写入时强制分离数据库肯定会导致问题。小心您的 EBS 卷以及备份和快照。EBS 很棒,但它仍然可能会失败。

相关内容