Amazon Auto Scaling + Elastic Load Balancer + Web应用程序

假设我有一个运行在单个EC2实例(PHP + PostgreSQL)上的Web应用程序。 现在我创buildLoad Balancer并设置Auto Scaling。

问题是:当AutoScaling启动新的EC2实例时,如何实时复制数据库? 如何复制我的应用程序的文件和文件夹? 最后,如何将每个实例所做的更改同步到主实例?

你必须从你的PHP / Apache实例中分离PostgreSQL实例。 并为您的PHP / Apache实例设置自动缩放。

PHP / Apache实例可以通过s3,git或svn获得同步获取文件。 或者使用像NFS一样的共享文件系统。

这样,只有1个DB可以有1-N的PHP / Apache实例。

当你只运行两个实例时,我会等待负载平衡器,并开始分配服务器angular色。 所以你在一台服务器上运行PHP应用程序,在另一台服务器上运行PostgreSQL。

您将获得更高的效率,因为服务器总是执行相同的任务,而不是在数据库和php脚本之间跳转。 特别是对于数据库。


当需要添加第三台服务器时,可以添加一台前端服务器,并在这两台服务器之间设置负载均衡器,但两台服务器都将连接到同一个数据库。

但是还有一个你没有提到的负载平衡器scheme的问题,但是你肯定会碰到并维护会话。 但是,如果你没有login用户,这可能不是你的问题。

我也build议将Web服务器从数据库中分离出来。 通过使用其他答案中描述的文件系统同步或共享选项之一,扩展Web服务器(=启动更多的实例)通常很简单。

但是这对于数据库来说不会那么容易。

如果您可以select更改您的应用程序,那么也可以尝试给Amazon提供关系数据库服务 。 但是,由于这是一个MySQL克隆,因此与PostgreSQL的function并不完全相同。

如果您想尝试一个完全不同的存储选项,您可能需要看看SimpleDB–这是“现代”NoSQL存储选项之一。 但是不要指望能够从关系数据库中完成所有的工作。

这两种存储选项(RDS和SimpleDB)都可以通过devise进行扩展,所以在使用这些存储选项时,如果在前面使用大量负载平衡的Web服务器,则不会有任何问题。