php - Amazon 横向扩展 Web 服务器的数据库服务器

标签 php mysql amazon-ec2 load-balancing amazon-rds

我们有一个基于 PHP 的 Web 服务器,托管在 Amazon EC2 上的 AMI 上。此 Web 服务器使用在另一个 RDS Amazon 实例上运行的 MySQL 服务器。两种设置都完美运行。我们正在尝试通过将它们放在负载均衡器后面来扩展设置,并在负载上下波动时启动新实例。

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

我在互联网上搜索并阅读了亚马逊文档,但全都是空白。

坦白说,我也不知道这是一个 SO 相关问题还是一个 SU 或 ServerFault 站点问题。如有其他情况,敬请谅解。

最佳答案

横向扩展数据库服务器比横向扩展 Web 服务器复杂得多。您将需要创建只读副本实例,RDS 使这变得相当容易。只读副本与主数据库实例保持同步。然而,顾名思义,只读副本是只读数据库实例。任何插入/更新/删除命令都需要返回到主数据库服务器。

这意味着您不能使用简单的负载平衡来分配负载。负载均衡器需要检查每个 SQL 请求并了解哪些命令可以发送到哪些服务器。亚马逊的弹性负载均衡器无法做到这一点。如果您搜索“MySQL 负载均衡器”,您可以找到大量关于设置 HAProxy 等软件以在 MySQL 实例集群上智能分配负载的文章和教程。

或者,您可以对应用程序进行编码,以了解不同的可用数据库服务器,并向主服务器发送更新,同时向只读副本服务器之一发送查询。在您的场景中,我可以看到这样的情况:每次启动 Web 服务器时,您还会启动该 Web 服务器用于查询的 MySQL 只读副本。

<小时/>

顺便说一句,由于您在 Amazon RDS 上使用 MySQL,因此您应该真正了解一下 Amazon 的 Aurora 数据库。它与 MySQL 兼容,因此您无需更改一行代码,并且它的性能通常比 MySQL 更好。如果您切换到 Aurora,您可能会发现您的数据库不再是瓶颈。

亚马逊也recently added load balancing支持奥罗拉。借助此新功能,您仍然拥有用于更新的主数据库,但现在您只需跟踪单个只读副本端点,该端点将在所有只读副本实例之间分配查询负载。

关于php - Amazon 横向扩展 Web 服务器的数据库服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805549/

相关文章:

php - 绘制锦标赛括号(基于 PHP 数据集的 CSS/HTML)

php - iOS 无法通过 PHP 在 iPhone 应用程序和 MySQL 数据库之间进行通信

java - 如何检测tomcat连接池问题

linux - AWS Linux : illegal intrusion attempts against remote hosts on the Internet. 预防方法?

linux - mongod(v2.6.5) 分片集群查询延迟问题?

amazon-web-services - 如何使用aws-cdk在EC2和RDS之间创建DependsOn关系

php - Laravel Lighthouse 配置 - 无法找到可发布的资源

php - 获取 db 中条目的 "nth"出现次数

php - 关系 : MySQL database view and Yii's CActiveRecord

c# - 您的 SQL 语法有错误