3

我正在使用 Amazon RDS 实例来托管我所有 6 个 WordPress 网站的 MySQL 数据库。在最大站点的流量达到峰值的那一刻,RDS 实例的 CPU 利用率为 100% 超过一个小时。

我正在考虑通过读取活动来分配数据库服务器的负载。我网站的大部分流量来自未登录的用户。因此,我想将这些未登录的用户连接到只读副本 RDS 实例,为什么其余的连接到源 RDS 实例,即我正在使用的当前数据库连接。

我该如何做到这一点?

4

2 回答 2

10

扩展 Wordpress 随着网站流量的增加,服务器上的负载也会增加。为了跟上您的速度,您有两种可能性:scale up- 增加盒子的大小 - 这 - 尤其是在 AWS 上 - 除了其他缺点(例如双向扩展的停机时间)之外,显然还有限制。

scale out:拆分流量,让多台机器完成工作。只需在您的流量增加超过阈值时添加一台机器,并在您的流量水平较低时移除电源。

可以在您的网络服务器或数据库服务器上进行常规设置的扩展。AWS 在这两个方面都可以为您提供帮助。由于数据库是常见的瓶颈,而这个问题实际上希望解决这个问题,我现在将讨论数据库扩展。

Amazon RDS(托管 MySQL SaaS)提供一键式解决方案来创建数据库的只读副本。在数据库世界中,只读副本称为复制从属。在您的主服务器上执行的每个修改查询都将在您的从机上自动重播。

您可以根据需要创建尽可能多的只读副本来为用户提供服务。现在是复杂的部分。我们正在谈论 READ 副本。这意味着,您不能简单地在所有实例上随机平衡查询。只有主服务器接受写入查询。

拆分查询类型和平均分配负载可以通过像 MySQL 代理这样的数据库代理来实现,这需要额外的机器。您的应用程序将与此代理通信,并且本身不需要任何更改。

尽管 Wordpress 不是为主从设置而设计的,并且本机不支持这一点,但我们都知道那里有很多博客流量很大。

幸运的是,有一个名为 HyperDB 的解决方案

http://wordpress.org/extend/plugins/hyperdb/

这是一个 Wordpress 插件,它可以

  • 读写服务器(复制)
  • 可配置的读写优先级
  • 本地和远程数据中心
  • 专用和公共网络
  • 不同数据库/主机上的不同表
  • 智能写后主读取
  • 故障主机故障转移
  • 用于分析的高级统计信息

该插件将替换 Wordpress 中默认的数据库抽象层。它由 Wordpress 团队开发并积极使用。

只需下载并确保仔细遵循安装说明。

玩得开心!

于 2012-12-14T08:50:01.027 回答
0

首先按照此处的 Amazon 常见问题解答中的说明设置 RDS 只读副本。然后获取这台机器的客户端端点(参见 FAQ 中的下一个问题)。

我不确定较新版本的 Wordpress 是否支持您正在使用的开箱即用功能,但有一种方法可以检查当前用户是否已登录 Wordpress。Wordpress中有一个方法可以检查用户是否登录。如果在建立任何数据库连接之前提前调用此函数,如果遇到登录用户,则可以更改数据库连接。

于 2012-12-14T08:15:29.860 回答