假设我有一个在单个 EC2 实例 (PHP + PostgreSQL) 上运行的 Web 应用程序。现在我创建负载均衡器并设置自动缩放。
问题是:当 AutoScaling 启动新的 EC2 实例时,如何动态复制数据库?如何复制应用程序的文件和文件夹?最后,如何将每个实例上所做的更改同步到主实例?
答案1
您必须将 PostgreSQL 实例与 PHP/Apache 实例分开。并为 PHP/Apache 实例设置自动缩放。
PHP/Apache 实例可以通过 s3、git 或 svn 同步获取文件。或者使用 NFS 等共享文件系统。
这样,您只需 1 个 DB 即可拥有 1-N 个 PHP/Apache 实例。
答案2
当您只运行两个实例时,我会等待负载平衡器并开始划分服务器角色。因此,您可以在一台服务器上运行 PHP 应用程序,在另一台服务器上运行 PostgreSQL。
您将获得更高的效率,因为服务器总是执行相同的任务比在数据库和 php 脚本之间跳转更容易。尤其是对于数据库。
当需要添加第三台服务器时,您可以添加一台前端服务器并在这两台服务器之间设置一个负载平衡器,但它们都将连接到同一个数据库。
但是负载均衡器方案中还有一个问题您没有提到,但您肯定会遇到,那就是维护会话。但如果您没有登录用户,这对您来说可能不是问题。
答案3
我还建议将 Web 服务器与数据库分开。扩展 Web 服务器(= 启动更多实例)通常很简单,只需使用其他答案中描述的文件系统同步或共享选项之一即可。
然而对于数据库来说这并不那么容易。
如果你可以选择更改你的申请,你也可以给亚马逊的关系数据库服务尝试。但是,由于这是 MySQL 克隆,因此其功能与 PostgreSQL 并不完全相同。
如果你想尝试一个完全不同的存储选项,你可能需要看看简单数据库- 这是这些“现代”NoSQL 存储选项之一。但不要指望它能够完成您习惯使用关系数据库的所有功能。
这两种存储选项(RDS 和 SimpleDB)在设计上都是可扩展的,因此在前端使用大量负载平衡的 Web 服务器时不会遇到问题。