Отделение сервера 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 изменениями:
- Добавлено:
bind-address=X.X.X.X
(внутренний IP-адрес частной сети) - Изменено 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