hosting for forbes.ru_

30
Хостинг для Drupal на примере www.forbes.ru Тарас Савчук taras (ухо) 1adm.ru http://www.1adm.ru

Upload: drupalconf

Post on 29-Nov-2014

1.076 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Hosting for forbes.ru_

Хостинг для Drupalна примере www.forbes.ru

Тарас Савчукtaras (ухо) 1adm.ruhttp://www.1adm.ru

Page 2: Hosting for forbes.ru_

Генеральный спонсор и организатор конференции DrupalConf 2011

При поддержке:

Page 3: Hosting for forbes.ru_

Спонсоры

Информационные спонсоры

Сайт конференции

Page 4: Hosting for forbes.ru_

Постановка задачи

Задача (2009-й год)- Drupal 6- прогноз нагрузки 10M хитов в месяц- два сервера под проект (DL360G6)- производительность, масштабируемость, отказоустойчивость

Наследие- 4 сервера (FreeBSD 7/amd64)- web-проекты: - http://www.runewsweek.ru- http://www.ok-magazine.ru- http://www.computerbild.ru- http://www.axelspringer.ru

Page 5: Hosting for forbes.ru_

Текущая ситуация

Средние параметры нагрузки (3 месяца)

Трафик: 3-4 Тб/месяц, 1.5 Мб/c отдачаFront-end: 130 запросов в секунду, 1К активных подключенийMySQL: 1.6 Kqps

Последний пик посещаемости (15-е апреля)

Трафик: отдали 270Гб+, 9Мб/с – упираемся в каналFront-end: 50M+ запросов (включая статику), до 1700 запросов в секунду, до 10К активных подключенийBack-ends: 2.2M+ и 1.5M+ запросовMySQL: до 20 Кqps, 2 Kqps в среднем.

Page 6: Hosting for forbes.ru_

Текущая ситуация

Физические параметры www.forbes.ru

Объем кода + медиафайлов: 16 ГбКоличество файлов (код + медиафайлы): ~ 110КРазмер базы: 3 ГбКол-во записей в базе: 20 М

Page 7: Hosting for forbes.ru_

Принципы построения

1. Хостинг под «стандартные» web-проектынет гигантских объемов медиафайлов и огромных баз

2. Общая площадка, максимальная утилизацияразместить старые проекты, Форбс, будущие проекты

3. Нужно изолировать проекты друг от другабезопасность, разные разработчики/подрядчики, совместимость ПО

4. Shared-nothing, не надеемся на железоне должно быть единой точки отказа

5. Не менять платформу (FreeBSD) без весомых причин

6. KISS, не гнаться за девятками слишком сильноминимум непроверенных технологий

Page 8: Hosting for forbes.ru_

Разделяй и властвуй

1. Front-ends (2 минимум)• балансировка нагрузки между back-ends, failover для back-

ends• кэширование, отдача статики• межсетевой экран• расширяемость, отказоустойчивость

2. Back-ends (2 минимум)• код (PHP/Drupal, но может быть что угодно)• расширяемость, отказоустойчивость, режим активный-

активный• изоляция web-проектов друг от друга

3. Сервера БД (2 минимум)• расширяемость, отказоустойчивость• резервное копирование

4. Сеть• отказоустойчивость

Page 9: Hosting for forbes.ru_

Front-ends

1. Общий IP-адрес (или адреса)• на DNS полагаться не можем• CARP (Common Address Redundancy Protocol) во FreeBSD “

из коробки”• pf - удобно и функционально• идентичные nginx на обоих front-ends

2. Кэширование/балансировка/отдача статики (nginx)• ngx_http_proxy_module• proxy_store – борьба с новыми и меняющимися файлами• ngx_http_upstream (ip_hash, backup, down) – балансировка,

failover• ngx_http_limit_zone_module – ограничение числа

подключений• ngx_http_limit_req_module – ограничение числа запросов• удобные логи (профиль производительности сайта)

3. Альтернативы: Varnish, HAProxy• для Varnish нужен Pressflow/патч для Drupal 6/Drupal 7• Varnish/HAProxy – только proxy/балансировка (пусть и

хорошая)• Varnish – производительность сравнима c Boost• мало опыта

Page 10: Hosting for forbes.ru_

CARP

carp2carp1

ДЦ

#sysctl net.inet.carp.preempt=1

213.145.46.183

10.10.10.1

LAN

Page 11: Hosting for forbes.ru_

CARP

carp2

ДЦ

#sysctl net.inet.carp.preempt=1

213.145.46.183

10.10.10.1

213.145.46.183

10.10.10.1

carp1

LAN

Page 12: Hosting for forbes.ru_

Back-ends: изоляция проектов

1. Почему FreeBSD jails?• лёгкие• «из коробки»• ezjail – просто и удобно

2. Альтернативы: Xen, OpenVZ, etc.• Xen – тяжёлый• OpenVZ, Linux-VServer – патченное ядро, лишний

функционал3. Что такое ezjail?

• никаких зависимостей, только shell• быстрое создание• резервное копирование, восстановление• шаблоны• ограничение ресурсов (cpuset)

Page 13: Hosting for forbes.ru_

Как выглядит ezjail?

Page 14: Hosting for forbes.ru_

Back-ends: общий DocRoot

1. Почему csync^2?• shared-nothing, узлы полностью независимы• прост и эффективен• подходит для репликации между ДЦ• триггеры (одно решение для данных и конфигураций)• работаем с локальной ФС, которую мы «умеем

готовить»2. Альтернативы: DRBD, GFS(2), OCFS(2), GlusterFS,

etc…• DRBD – только primary-secondary• DRBD + GFS/OCFS2 (primary-primary) – сложно• нет боевого опыта, сложность, пугают потенциальные

проблемы производительности, совместимость

Page 15: Hosting for forbes.ru_

Схема работы csync^2

fs-1-14 (jail)

web1

fs-2-14 (jail)

web2

carp1 carp2

- одностороння синхронизация

- двусторонняя синхронизация

Page 16: Hosting for forbes.ru_

Что такое csync^2?

• Асинхронная синхронизация :)• Обнаружение и разрешение конфликтов• Репликация удалений• Сложные конфигурации: исключения, группы

хостов, slave-режим• librsync• локальная БД (sqlite)• «проталкивает» изменения• SSL + pre-shared-keys• резервное копирование• триггеры

Page 17: Hosting for forbes.ru_

Производительность csync^2

• 10 минут на полную синхронизацию 40K+ файлов общим размером 500Мб

• 13 секунд на проверку, что все синхронно• 22 секунды на синхронизацию новых 1400

файлов объемом 13Мб• 8 секунд на проверку, что все синхронно

Page 18: Hosting for forbes.ru_

Back-ends: web-сервер

• Apache – совместимость• ПО, поставляемое в виде модулей Apache• модули Drupal, «заточенные» на Apache (Boost)• Apache + Boost с одной машины загружают гигабит

• Можем использовать любой web-сервер и набор ПО

Page 19: Hosting for forbes.ru_

MySQL

• Postgresql – богат, но много «но», поэтому MySQL

• Отказоустойчивость для MySQL• родная репликация (master-slave)• MySQL + DRBD• MySQL Cluster• master-master с родной репликацией (circular

replication)• MMM (Multi-Master Replication Manager for MySQL)• Galera – синхронная репликация (на тот момент beta)

• Масштабируемость• родная репликация (master-slave)• часть запросов на slave (MySQL Proxy, Pressflow)

Page 20: Hosting for forbes.ru_

MySQL

db1-drupal

db1

db2-drupal

db2

- Направление репликации

- MySQL in jail (master)

db1-bitrix db2-bitrix

- MySQL in jail (slave)

db-drupal-rw (IP))

db-bitrix-rw (IP))

- Подключения к БД

Page 21: Hosting for forbes.ru_

Сеть

• LACP (Link Aggregation Control Protocol)• просто, но не реализовано• не нужны коммутаторы при схеме из 2-х

серверов

Page 22: Hosting for forbes.ru_

Резюме по архитектуре

• 2 front-ends (активный-пассивный), 2 back-ends (активный-активный), 2 MySQL (перекрестная репликация master-slave)

• FreeBSD 7• pf – межсетевой экран, подсчет трафика• CARP – общий IP, failover• Nginx – балансировка, кэширование• Jails – легковесная виртуализация (все в jail-ах)• csync^2 – синхронизация Document Root,

конфигов• MySQL – стандартная master-slave репликация• LACP – отказоустойчивость сети (не

реализовано)

Page 23: Hosting for forbes.ru_

Текущие задачи

• Резервное копирование (mysqldump, снапшоты)• Мониторинг (Zabbix), внешний (http) и

внутренний• Разработка (git, redmine, jails, нет migraine)• Оптимизация производительности

• MySQL slow log, mysqldumpslow/mk-query-digest• смотрим на back-ends из nginx• Xdebug• Instrumentation.php от Percona (TODO)

• Обновление ПО/модернизация железа

Page 24: Hosting for forbes.ru_

Профиль производительности

• Логи nginx в .csv (в т.ч. $upstream_response_time) импортируем в MySQL и получаем полезные агрегированные данные• самые медленные страницы (в среднем)• самые медленные страницы (суммарно)• отчет по кодам ответа back-ends• сравнение производительности back-ends• профиль производительности (универсально, имеет

смысл автоматизировать и пользоваться ежедневно)• помогает понять, где оптимизировать

Page 25: Hosting for forbes.ru_

Профиль производительности

0 0.5 1 1.5 2 2.5 3 3.50

20

40

60

80

100

120

81.66

93.9999 99.9

Время обработки запроса, секунды

% з

апро

сов

Page 26: Hosting for forbes.ru_

Instrumentation от Percona

• Инструментарий для экспорта полезных счетчиков в переменные Apache

• Комментарии к запросам MySQL, после чего mk-query-digest

• Переменные -> лог Apache -> SQL -> отчеты• Xdebug тяжелый, нет возможности

агрегировать данные, не подходит для поиска редких проблем

• Можно ловить проблемы mysql, memcache, чего угодно

• Требуется интеграция в код (в хороший код интегрировать просто)

Page 27: Hosting for forbes.ru_

Планы и проблемы

• Boost и csync^2– решить проблему или использовать альтернативное решение

• Instrumentation от Percona для поиска редких проблем

• Pressflow, часть запросов на slave• Второй ДЦ• Автоматизировать failover для MySQL (MMM или

самостоятельно)• Избавиться или свести к минимуму кэширование

Drupal в MySQL• LACP

Page 28: Hosting for forbes.ru_

Спасибо за внимание!

Тарас Савчукtaras (ухо) 1adm.ruhttp://www.1adm.ru

Page 29: Hosting for forbes.ru_

Генеральный спонсор и организатор конференции DrupalConf 2011

При поддержке:

Page 30: Hosting for forbes.ru_

Спонсоры

Информационные спонсоры

Сайт конференции