我正在尝试为我的 EC2 帐户创建一个服务器结构。我选择的设计包括在不同可用区运行的 2 个实例、弹性负载均衡器、配置了 CloudWatch 监控的自动扩展组以及定义访问实例规则的安全组。此设置用于支持用 PHP 编写的在线 Web 应用程序。
我正在尝试确定什么是更好的政策:
- 将 MySQL DB 存储在单独的实例上
- 将 MySQL DB 存储在附加的 EBS 卷上(据我所知,自动扩展不会复制附加的 EBS 卷,但会从所选的 AMI 生成新实例 - 这种观点正确吗?)
关于 AMI,我计划使用基本的 Amazon Linux 64 位 AMI,并安装 bastille(可能是 OSSEC),但我还希望使用加密文件系统。
- 在使用加密文件系统以及数据库和 Web 应用程序之间的通信时我需要注意什么问题?
- 在承载 Web 应用的实例上使用加密文件系统是否存在任何通信问题
- 我打算启动第二个实例或在第二个可用区域中附加第二个卷以作为数据库的备用数据库 - 我只是在寻找一些关于如何让两个数据库进行对话的建议 - 这是一项艰巨的任务吗
- 关于安全更新,最好是创建最近的快照,然后重新启动并允许亚马逊在启动时安装更新,或者 yum 更新机制是一种合适的替代方案——重新启动而不是安装强制重新启动的更新是否是更好的做法。
- 我计划创建两个 AMI 快照,一个用于应用服务器,一个用于数据库,每个快照都采用相同的安全措施 - 这是合理的吗 - 我只是认为这是一个比在我打算使用的 AMI 中包含不必要的额外应用程序更好的策略。
- 我的备份计划是创建 webapp 和 DB 实例的定期快照(如果我使用额外的 EBS 卷而不是单独的实例,我的理解是,如果发生意外终止,EBS 卷将保留在 S3 存储中,我可以创建卷备份目的的快照)。
提前感谢大家的建议和意见。我是 EC2 新手,我可能描述了不必要的过度操作,但我想尝试实施可以视为最佳实践的解决方案,因此非常感谢大家提出的所有建议。
答案1
数据库应尽可能位于专用实例上。这样您就可以独立于您可能拥有的任何其他服务器来管理该服务器(添加磁盘空间、更换服务器等)。
数据库也应放在与根卷不同的 EBS 卷上。这样您就可以设置新服务器并轻松将数据“移动”到新实例。
我不会将 AutoScaling 应用于您的数据库。AutoScaling 从 AMI 映像创建新实例,而这些实例对于您的数据来说肯定会过时。您可以让 AutoScaling 启动的所有其他实例使用您的单个数据库。
您可以使用 MySQL 复制将数据复制到另一个可用区的从属实例。请参阅http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html
从属实例有许多用途:
- 保持待机状态,以防主服务器发生故障
- 在从服务器上执行只读操作,以减轻主服务器的负载
- 备份从服务器而不是主服务器,以避免表锁和/或其他数据库可访问性问题