Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток.
Ситуация такова:
есть сервер где работает связка
nginx - php - memcache - mysql
сервер довольно нагруженный в среднем 25 миллионов запросов в сутки.
В часы пик показывает вот такую нагрузку.
142% php-cgi
50% mysqld
но как только в конфиге php я меняю адрес сервера с lacalhost на IP адрес этого же сервера за 4-5 минут работы нагрузка возрастает до
201% php-cgi
187% mysqld
соответственно сервер начинает падать.
Подскажите в чем проблема и как ее можно победить.
Если не хватает каких либо данных о сервере или системе я допишу.
Заранее благодарю за ответ.
Неактивен
unix socket работает быстрее, чем tcp/ip.
Смотрите в сторону увеличения количества машинок или какого-то дополнительного
кэширования. Возможно, можно прикрутить на морду какое-то внешнее кэширование
(например, varnish очень хорошо себя ведет на таких системах). Но, разумеется, для
форума, например, такое не подойдет.
Неактивен
Да сокет работает быстрей
Приобрели второй сервер
Разнесли php на два сервера
Именно для этого и меняем в настройках localhost на IP адрес
Чтоб второй сервер мог достучаться до базы.
И появляется такая проблема даже если запрос идет с php на том же сервере что и mysql
В результате сервера два а толку никакого.
Неактивен
Не понимаю. Оставьте на сервере с базой подключение через localhost,
а на втором сервере сделайте tcp/ip. Тогда нагрузка с php частично
уедет на вторую машинку.
Неактивен
было
webserver <> php <> mysql over socket
+xcache + memcached
стало
два вебсервера. на серверах
1. Веб + пхп + mysql
2. пхп
напервом коннект к mysql сокеты
на втром соотв через tcp
при этом пока нет второго сервака все хорошо
как только кто то начинает коннектится к mysql через tcp - количсетво выполняемых запросов падает в 4 раза (при том что нагрузка на машину с mysql падает сразу колосально)
т.е. пока запросов немного - все хорошо, как только переваливает за определенное количество - плохо
Неактивен
Хм. А как балансируете? И как считаете количество запросов? Может, дело
и не в MySQL вовсе, а Вы просто теряете часть запросов (например, на балан-
сировке), и общий RPS тоже падает?
Эм. Перечитал конфигурацию. На втором сервере php написан без вебсервера —
это опечатка или я не знаю какого-то хитрого способа обработки?
Неактивен
nginx - ip_hash
балансируем запросы к php fcgi бекенду
проблема в том что когда мы поняли что, что то не так то первое в чем засомневались именно в балансировке
и после ряда тестов поняли что "умирание" зависит от способа хождения к MYSQL и стали проверять сценарий просто хождения к mysql через TCP на ЛОКАЛЬНОЙ машине
т.о. мы видим что у нас на nginx 2500 запросов в секунду пока к mysql ходим через сокеты
и максимально 500 когда к mysql через TCP
все лимиты конечно сильно увеличины (somaxconn и прочее)
Неактивен
Вопрос по сети:
А ко второй машинке в fastcgi ходите по TCP/IP? Там все соединения добегают?
Вопросы по базе:
Включены ли persistent connections? Выключен ли обратный резолв? Стоят ли
гранты по IP или по именам?
Неактивен
paulus написал:
Вопрос по сети:
А ко второй машинке в fastcgi ходите по TCP/IP? Там все соединения добегают?
Вопросы по базе:
Включены ли persistent connections? Выключен ли обратный резолв? Стоят ли
гранты по IP или по именам?
По первому вопросу - да, все ок. Это выделенный 1Гбит интерфейс и общий лоад в нем невысок и потерь нет
По второму - обратный резолв выключен и гранты даны по IP.Персистент коннекции насколько я понимаю в mysqli используются по умолчанию (а обратного в конфиге не указано). Хотя все равно возможно дело именно в этом и мы попробуем это завтра когда будет нагрузка, т.к. как уже говорилось, что проблема возникает только под ней, а в силу специфики приложения синтетические тесты провести очень сложно.
Спасибо за хороший совет.
Неактивен
Не заработает — пишите, покопаем дальше, даже интересно
Неактивен