将 mySQL 服务器与 LAMP 分离并降低性能

将 mySQL 服务器与 LAMP 分离并降低性能

我目前正在为我们的网站使用 LAMP 堆栈(基于 Centos 6.5),我想尝试将 mySQL 与“Web 服务器”分离。

到目前为止,我一直在使用配备四核 CPU 和 8GB RAM 的 DigitalOcean VPS。
昨天,我为单个暂存环境创建了一个新的 DigitalOcean VPS(目前),其规格和功能如下:

  • 2 个 CPU 核心
  • 2GB 内存
  • Centos 6.7
  • 与“Web 服务器”的专用网络(Ping 时间:min/avg/max/mdev = 0.352/0.481/0.662/0.073 ms
  • mySQL 5.6(与当前服务器相同)
  • 相同的 my.cnf 配置,但有两处更改:
    1. 添加:(bind-address=X.X.X.X私网内部IP地址)
    2. 将 innodb_buffer_pool_size 从 2GB 更改为 1GB(因为我们现在的 RAM 更少..)

该网络服务器正在运行 Drupal 站点,并安装了 APCu、opCACHE 和 memcached。

使用 Chrome 检查加载时间时,似乎网站现在的加载速度慢了大约 0.5 - 1.5 秒。不幸的是,NewRelic 证明我是对的(见所附屏幕截图)

在此处输入图片描述

由于这是我第一次配置远程 mySQL 服务器,我想知道我是否遗漏了什么?是否有任何配置或调整可以提高性能?

答案1

我不确定你为什么会感到惊讶,因为你的 MySQL 服务器分配的 RAM 较少,并且将它放在不同的机器上会增加网络接口的负载。

您应该监视您的网络活动以查看它是否会导致任何类型的瓶颈。

根据您的 SQL 查询和 PHP 脚本,可能有方法在查询性能方面更好地优化这些任务,以及改善发送回 PHP 的结果以减少网络负载。

答案2

我将推荐以下几件事:
验证网站是否正在使用 Memcached/APC/opcode 缓存。
我建议使用 Memcached 进行数据库查询缓存。使用以下方法对 Mysql 配置进行一些调整mysqltuner.pl


优化memcached apc配置
基于Debian / Ubuntu操作系统的Memcached配置文件位置:

/etc/memcached.conf

基于 Centos/RHEL 的操作系统中的 Memcached 配置文件:

/etc/sysconfig/memcached

Apc配置可以插入到php.ini中。

遵循这些步骤肯定会提高性能。
并使用 NewRelic APM 来显示有关时间花在哪里的数据。
如果网络是一个问题,我想你对此无能为力。
请告诉我。谢谢

Shahriar

答案3

我设法解决了这个问题,并且我认为我所经历的方法可能会对其他人有所帮助。

  • 使用检查服务器之间的延迟pingmtrtraceroute查明问题是否与延迟有关
  • 检查服务器的负载和可用 RAM,使用top(或htop)和free -m
  • 在两个 mysql 服务器(旧的本地服务器和新的远程服务器)上运行大量查询并比较查询时间,我们也可以使用 mySQL 的分析功能 - 请参阅SHOW PROFILE
  • 假设 mysql 查询时间相似(或至少几乎相似),那么我们可以使用 PHP 代码片段来运行相同的代码,看看瓶颈是否与 PHP 有关 - 我建议使用NewRelic PHP 应用程序分析- 就我而言,这是“启蒙”,因为我最终发现问题甚至与远程 mySQL 无关,但额外的 0.5-1.5 秒是由对第三方服务的额外调用引起的(仅在使用远程数据库时)。
  • 使用mysqltuner.pl(正如@Shahriar Shojib 所建议的),并查看是否存在一些我们必须进行的 mySQL 配置调整(就我而言没有..)
  • 尝试禁用 iptables 或任何其他防火墙
  • 检查网络流量(我使用了iptraf我们的第三方监控服务),但正如@Julie Pelletier 建议的那样,还有其他一些选择

使用远程 mySQL 服务器时可获得额外的性能提升

  • 使用 memcached、APCu 和 Opcode 缓存(尽管在我们的案例中这些都已经安装了 - 但它们是游戏规则的改变者...)

  • 最后但同样重要的一点是 - 使用 SSH 隧道而不是直接连接到 mySQL 服务器(似乎可以节省大约 200 毫秒的整体页面加载时间)

希望阅读这个答案可以为你节省超过 0.5 到 1.5 秒:)

相关内容