2016-10-01 155 views
0

我们有一个基于PHP的Web服务器,托管在Amazon EC2上的AMI上。此Web服务器使用在另一个RDS Amazon实例上运行的MySQL服务器。这两个设置完美运作。我们试图通过将设置放在负载均衡器后面来扩展设置,并随着负载的升降而旋转新的实例。亚马逊扩展Web服务器的数据库服务器

我们能够实现启动新的Web服务器实例。所有这些Web服务器连接到一个数据库,因此似乎都运行良好。然而在这个过程中,数据库服务器成为瓶颈。我们希望将数据库服务器扩展出来。 Web服务器和数据库服务器将成对扩展,显然数据库服务器将同步。目前尚不清楚如何实现这一目标,任何帮助或参考或教程都会有很大的帮助。

我在互联网上搜索并通过亚马逊文档阅读,但都画空白。

坦率地说,我也不知道这是一个SO相关的问题还是SU或ServerFault站点问题。否则,请保持宽容。

回答

1

扩展数据库服务器比扩展Web服务器要复杂得多。您需要创建只读副本实例,RDS非常简单。只读副本与主数据库实例保持同步。但是,顾名思义,只读副本是只读数据库实例。任何插入/更新/删除命令都需要返回到主数据库服务器。

这意味着您无法使用简单的负载平衡来分配负载。负载均衡器需要检查每个SQL请求并了解哪些命令可以转到哪些服务器。亚马逊的Elastic Load Balancer不具备这一功能。如果您搜索“MySQL负载平衡器”,您可以找到许多关于设置HAProxy等软件的文章和教程,以智能地分布跨MySQL集群实例的负载。

或者,您可以编写应用程序以了解可用的不同数据库服务器,并在将查询发送到其中一个只读副本服务器时将更新发送到主服务器。在你的场景中,我可以看到一种情况,每次启动Web服务器时,还会启动该Web服务器用于查询的MySQL只读副本。


请注意,由于您在Amazon RDS上使用MySQL,因此您应该仔细查看Amazon的Aurora数据库。它与MySQL兼容,因此您不必更改一行代码,并且它通常比MySQL执行得更好。如果你切换到Aurora,你可能会发现你的数据库没有那么多的瓶颈。

Amazon也支持Aurora recently added load balancing。有了这个新功能,您仍然有一个用于更新的主数据库,但是现在您只需跟踪一个只读副本端点,该端点将在所有只读副本实例之间分配查询负载。

+0

非常感谢Mark,该应用程序的目标是拥有100,000个用户,并且可以扩展100倍。因此,扩大数据库服务器是唯一的解决方案,因为如果使用中小型实例,它最终将成为瓶颈,并且在负载减小时会变得过于昂贵且昂贵。 – Narayanan