high availability в жизни обычного разработчика

21
High Availability в жизни обычного разработчика Александр Алфимов для Sumy PHP User Group.

Upload: sumy-php-user-group

Post on 17-Feb-2017

358 views

Category:

Software


1 download

TRANSCRIPT

High Availability в жизни обычного разработчика

Александр Алфимов для Sumy PHP User Group.

100,000,000 запросов в день- 80% -- статические файлы (CSS, JS, PNG/JPEG, MP4)

- 20% -- динамические данные (результат работы CMS)

Несколько физических серверов

- 1 сервер для редакторов

- 2 кеш-сервера

- 2 сервера баз данных

- 2 сервера приложений

Кеш-сервер. Varnish и nginx.

- nginx отдаёт все статические файлы (стили, скрипты, изображения, видео)

- Запросы динамических данных отправляем на Varnish, который запущен на этом же сервере

- Weighted round robin балансировка для серверов приложений в Varnish

- Disk cache работает достаточно хорошо в Varnish

- Используем разные cache ID для мобильной и основной версии. Туда же можно добавить идентификатор пользователя

Пример настроек для nginx

Пример настроек Varnish

Пример настроек Varnish

Пример настроек Varnish

Статистика с одного из кеш-серверов

Информация о кеш-сервере

Сервер приложения. Drupal 7, Nginx и PHP-FPM.

- Drupal 7 в качестве CMS

- autoslave модуль для распределения запросов между MySQL master и slave

- contexts модуль для управления HTTP-заголовками (Expires и т.д.)

- Кеширование на уровне Drupal:

- Memcached как кеш-сервер

- Sessions, views, blocks в memcached

- nginx как веб-сервер

- PHP-FPM для исполнения PHP-кода

- APC или другой модуль для кеширования op code

Пример настроек PHP-FPM

Информация о сервере приложений

Сервер баз данных. Percona MySQL.- Master-slave репликация для горизонтального масштабирования read-

only серверов

- Master-master репликация в случае write-heavy приложения

- Percona XtraDB Cluster как более современная альтернатива - How To

- Аккуратная настройка InnoDB переменных для индексов и буферов - Percona Tools

- tmpfs раздел (до 20% от доступного объема ОЗУ) для tmpdir

Статистика с одного из серверов БД

Сервер для редакторов. Nginx, PHP-FPM и Percona MySQL.

- Работаем только с master-сервером

- Отключаем autoslave

- Следим для настройками memcache bins

Синхронизация данных

- rsync в случае односторонней синхронизации (быстро и просто)

- NFS+keepalived или GlusterFS для shared file system (медленно)

Поиск

- Apache Solr для англоязычных сайтов

- Поддерживает master-slave репликацию для горизонтального масштабирования

- Sphinx для русскоязычных

- MySQL Fulltext Index в случае, если нужен поиск средствами СУБД

Мониторинг

- Newrelic

- Есть модули для сбора статистики MySQL, nginx и varnish

- atop, iotop для ручного сбора и анализа данных по нагрузке

- mytop как альтернатива show processlist

- InnoDB Status

Часто встречающиеся проблемы

- сервер приложений не отвечает при высокой нагрузке даже по SSH

- Ограничить количество процессов PHP в настройках PHP-FPM, проверить системные логи на предмет out of memory process kills

- Проверить количество процессов PHP, посмотреть соответствие использования CPU на сервере БД и сервере приложений

- сервер баз данных работает очень медленно

- mytop, show processlist, slow queries log

- Explain для популярных запросов

- Query cache не всегда хорошо

- Writing to file, file sort в статусе запроса

- Too many open files на кеш-сервере

- Increase ulimits

Спасибо за внимание :-)

И да, мы ищем таланты :-)[email protected]