Отделение сервера MySQL от LAMP и снижение производительности

В настоящее время я использую стек LAMP (через Centos 6.5) для наших сайтов, и я хочу попробовать отделить mySQL от "веб-сервера".

До сих пор я использовал VPS от DigitalOcean с четырехъядерным процессором и 8 ГБ оперативной памяти.
Вчера я создал новый VPS DigitalOcean для единой промежуточной среды (на данный момент) со следующими спецификациями и утилитами:

  • 2 ядра процессора
  • 2 ГБ ОЗУ
  • Centos 6,7
  • Частная сеть с "веб-сервером" (время пинга: min/avg/max/mdev = 0.352/0.481/0.662/0.073 ms
  • MySQL 5.6 (так же, как это было на текущем сервере)
  • Та же конфигурация my.cnf с 2 изменениями:
    1. Добавлено: bind-address=X.X.X.X (внутренний IP-адрес частной сети)
    2. Изменено innodb_buffer_pool_size с 2 ГБ до 1 ГБ (потому что у нас сейчас меньше оперативной памяти..)

Веб-сервер работает на сайте Drupal, и на нем установлены APCu, opCACHE и memcached.

При проверке времени загрузки с помощью Chrome кажется, что сайт теперь загружается медленнее, примерно на 0,5 - 1,5 с. К сожалению, NewRelic доказывает, что я прав (см. Прикрепленный скриншот)

Поскольку я впервые настраиваю удаленный сервер MySQL, мне интересно, пропустил ли я это? любая конфигурация или регулировка, которая может улучшить производительность?

3 ответа

Решение

Мне удалось решить проблему, и я думаю, что путь, который я прошел, может быть полезным для других.

  • Проверьте задержку между серверами, используя ping, mtr а также traceroute чтобы выяснить, связана ли проблема с задержкой
  • Проверьте загрузку сервера и свободную оперативную память, используя 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 секунд:)

Я не уверен, почему вы будете удивлены, поскольку вашему серверу MySQL выделено меньше оперативной памяти, а размещение его на другом компьютере увеличивает нагрузку на сетевой интерфейс.

Вы должны следить за своей сетевой активностью, чтобы увидеть, не вызывает ли она каких-либо узких мест.

В зависимости от ваших SQL-запросов и PHP-сценариев, возможно, могут быть способы лучше оптимизировать эти задачи с точки зрения производительности запросов, а также улучшить результаты, отправляемые обратно в PHP, чтобы снизить нагрузку на сеть.

Несколько вещей, которые я буду рекомендовать:
Проверьте, использует ли веб-сайт кэширование Memcached/APC/opcode.
Я бы рекомендовал Memcached для кеширования запросов к БД. Сделайте несколько изменений в конфигурации Mysql, используя mysqltuner.pl


Оптимизировать конфигурацию memcached apc
Расположение файла конфигурации Memcached в ОС на основе Debian/Ubuntu:

/etc/memcached.conf

Файл конфигурации Memcached в ОС на базе Centos/RHEL:

/ И т.д. / sysconfig / Memcached

Конфигурация apc может быть вставлена ​​в php.ini.

Выполнение этих шагов обязательно должно повысить производительность.
И используйте NewRelic APM, чтобы раскрыть данные о том, где тратится время.
Если проблема в сети, я думаю, вы ничего не можете с этим поделать.
Дай мне знать.
Спасибо,
Shahriar

Другие вопросы по тегам