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

我刚开始尝试使用Amazon的EC2服务来运行一个使用SQL Server 2005 Express数据库的asp.net web应用程序。 我有一些关于如何configuration和操作最适合可靠性的问题,我希望能在这里获得一些集体智慧,因为这是我第一次进入EC2。

以下是我如何configuration它:

操作系统:Windows 2003 SQL Server Express 2005

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

现在,当我对操作系统configuration进行更改时,我使用捆绑function创build了一个新的AMI。 不幸的是,我发现这会导致严重的停机。 捆绑被创build并且新的实例被启动。 看来,当我准备好新的AMI时,我应该:

  1. 启动一个新的临时实例。
  2. 从生产实例中分离EBS卷。
  3. 从生产实例中分离IP地址。
  4. 将IP地址附加到临时实例。
  5. 将EBS卷附加到临时实例。
  6. 从生产实例创build一个AMI。
  7. 生产实例重新启动后,反转附加/分离步骤以重新投入生产。

这是事件的正确顺序,以防止任何机会腐蚀EBS卷? 如果在数据库写入过程中分离,EBS卷会损坏吗? 我应该快照生产实例的EBS卷并将其附加到临时实例吗? 或者在使用EBS卷的过程中拍摄快照会导致腐败? 任何提高可靠性和操作的build议?

这取决于您正在进行的更改的types以及您如何进行AMI设置。

假设您只是对操作系统进行了更改,而您的AMI不会自动挂载您的EBS卷…

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

在这一点上,你应该有一个更新的实例运行,只需要将IP地址和EBS卷转移到您的新实例。 可能最简单的方法是彻底closures第一个Windows实例,一旦完成,只需将IP和EBS卷连接到新实例。 就个人而言,我更喜欢做以下事情…以防万一二审失败,我想回到一审…

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

由于您正在对您的ami的第二个实例进行所有更新,因此在捆绑过程中没有停机时间。 您也可以随时进行更新,即使是在工作date间,因为您没有触碰您的生产实例。 您唯一的停机时间是将EBS卷和IP传输到新实例。 另一件好事是,如果更新或新实例的任何内容不能解决,您可以退回到使用原始实例。

此外,还有一件事情…当写入发生时,您可以通过强制将数据库分离到数据库中,从而导致问题。 请注意您的EBS卷以及备份和快照。 EBS是伟大的,但它仍然可能失败。