Настройка веб-кластера – виды архитектур на все случаи жизни Александр Сербул Руководитель направления контроля качества интеграции и внедрений 1C-Битрикс О чем будем говорить Когда и кому нужен веб-кластер Виды архитектур веб-решений Поддержка кластеризации в Битрикс Примеры боевых конфигураций Как сделать веб-кластер в Amazon Web Services Когда и кому нужен веб-кластер Веб-кластер – это когда «много серверов» и иногда «много датацентров» Плюсы: Повышается производительность Повышается отказоустойчивость Модное слово, круто звучит Минусы: Сложнее настраивать Сложнее чинить Дороже в эксплуатации Повышенные требования к квалификации сисадмина Когда и кому нужен веб-кластер Клиенты и их лояльность (сайт недоступен – потеряны заказы) Индексация сайта поисковыми роботами Финансовые потери во время рекламных компаний Не бывает «почти круглосуточно» Технические работы должны проходить незаметно для клиентов: Сервисные работы Замена оборудования Обновления системного ПО Обновления приложений Когда и кому нужен веб-кластер … и многие другие Сколько стоит 1 час? Пример: Крупный интернет-магазин с годовым оборотом 1.5 млрд. руб. 210 рабочих дней в году по 10 рабочих часов. Час простоя крупного интернет-проекта может обойтись владельцам в 0,3 - 1 миллион рублей упущенной выручки. Задачи, которые необходимо решить Обеспечение высокой доступности (HA) Отказ компонентов веб-системы не должен негативно отразиться на работе Пользователей с ней. Обеспечение производительности и масштабирования (HP) Увеличение посещаемости проекта не должно сказываться на качестве обслуживания Пользователей. Они не должны ждать, пока сайт «отвиснет». Гарантия восстановления данных Ценные данные Пользователей должны надежно резервироваться и гарантированно восстанавливаться в случае аварии. Даже если в дата-центр попадет ядерная бомба . Как все начинается… Сервер Web server (Apache+PHP) RDBMS(MySQL) Сервер Сервер Rev. proxy server (Nginx) Rev. proxy server (Nginx) Appl. server - Web (Apache+PHP) Appl. server – FastCGI (PHP-FPM) RDBMS(MySQL) RDBMS(MySQL) Как все начинается… PHP-FPM PHP-FPM – более эффективное решение Зачем лишний веб-сервер? Меньший расход памяти форками Быстрее – меньше исп. CPU и системных вызовов nginx <–> apache: tcp/ip – накладные расходы nginx <–> PHP-FPM: unix domain socket – быстрее Лог медленных запросов с бэктрейсом! PHP-FPM – лог медленных запросов Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [10-Apr-2013 15:07:01] [pool www1] pid 17418 Apr 10 15:07:01 domU-12-31-39-01-6C-E1 script_filename = /var/www/html/bitrix/components/bitrix/crm.config.external_sale/ajax.php Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [0x0000000001842aa0] mysql_query() /var/www/html/bitrix/modules/main/classes/mysql/database.php:185 Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [0x000000000183f4f0] Query() /var/www/html/bitrix/modules/crm/classes/general/crm_entity_list_builder.php:376 Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [0x000000000183f1c0] Prepare() /var/www/html/bitrix/modules/crm/classes/general/crm_product.php:225 Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [0x000000000183d0b8] GetList() /var/www/html/bitrix/modules/crm/classes/general/crm_external_sale_import.php:634 Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [0x000000000183c960] SaveOrderDataProducts() /var/www/html/bitrix/modules/crm/classes/general/crm_external_sale_import.php:969 Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [0x000000000183b308] SaveOrderData() /var/www/html/bitrix/modules/crm/classes/general/crm_external_sale_import.php:150 Apr 10 15:07:01 domU-12-31-39-01-6C-E1 [0x000000000183a850] SyncOrderData() /var/www/html/bitrix/components/bitrix/crm.config.external_sale/ajax.php:17 На пути к веб-кластеру Сервер статики Rev. proxy server (Nginx) Стат. файлы Сервер приложений Appl. server (PHP-FPM) Сервер баз данных RDBMS(MySQL) Типичная кластеризация Сервер-балансировщик Rev. proxy server (nginx + http_upstream_module) Серверы баз данных: SLAVE SLAVE SLAVE RDBMS(MySQL) Общие файлы Общие сессии Стат. файлы Серверы приложений Сервер Сервер Appl. server (PHP-FPM) Сервер базы данных: MASTER Диспетчер SQL запросов RDBMS(MySQL) Кластеризация MySQL Аккаунты a-m База данных MySQL 1 База данных MySQL База данных MySQL 1 База данных MySQL База данных MySQL 2 База данных MySQL 2 Аккаунты n-z Вертикальный шардинг Горизонтальный шардинг Кластеризация MySQL: master-master Официально - не поддерживается Зато просто и нужно «уметь правильно готовить» Active База данных MySQL auto_increment_offset = 1 auto_increment_increment = 2 server_id = 1 Passive База данных MySQL auto_increment_offset = 2 auto_increment_increment = 2 server_id = 2 Кластеризация MySQL - Galera MariaDB Galera Cluster (mariadb.org) – 5 марта 2013 - 5.5.29 Stable (GA) Percona XtraDB Cluster (www.percona.com) Galera Replication (codership.com/products/galera_replication) Кластеризация MySQL - Galera RTT в WAN – влияют на скорость commit Сложнее в администрировании Не менее 3-х нод С интересом смотрим на эту перспективную технологию! Теорема Брюера (“CAP”) согласованность данных (англ. consistency) доступность (англ. availability) устойчивость к разделению (англ. partition tolerance) Выбери 2 из 3 Теорема Брюера (“CAP”) - СА СА: Система, во всех узлах которой данные согласованы и обеспечена доступность, жертвует устойчивостью к распаду на секции. Решения на базе ACID. Примеры: кластера БД или LDAP Теорема Брюера (“CAP”) - СР CP: Распределённая система, в каждый момент обеспечивающая целостный результат и способная функционировать в условиях распада, в ущерб доступности может не выдавать отклик. Устойчивость к распаду на секции требует обеспечения дублирования изменений во всех узлах системы. Теорема Брюера (“CAP”) - AP АP: Распределённая система, отказывающаяся от целостности результата. Примеры: веб-кэши, DNS, большинство NoSQLсистем. Обеспечение целесообразного уровня целостности данных: «целостных в конечном итоге» (eventually consistent) или «слабо целостных» (weak consistent). 1С-Битрикс: Веб-кластер «1С-Битрикс: Веб-кластер» - это комбинация технологий: Вертикальный шардинг (вынесение модулей на отдельные серверы MySQL) Репликация MySQL и балансирование запросов между серверами Распределенный кеш данных (memcached) Непрерывность сессий между веб-серверами (хранение сессий в базе данных и memcached) Кластеризация веб-сервера: Синхронизация файлов Балансирование нагрузки между серверами Примеры веб-кластеров Архитектура: «kupibonus.ru» Ubuntu Linux LTS, софт.рейды, база на SSD-дисках, php-fpm (FastCGI), xcache, nagios/munin DNS балансировка Балансировщик 1 Балансировщик 2 Proxy server (nginx) Proxy server (nginx) Стат. файлы Стат. файлы 4 ядра, 8 ГБ Сервер-приложений 1 Сервер-приложений 2 «1С-Битрикс: Бизнес веб-кластер» «1С-Битрикс: Бизнес веб-кластер» csync2 SQL-балансировщик 1С-Битрикс База данных MySQL MASTER 4 ядра, 16 ГБ SQL-балансировщик 1С-Битрикс База данных MySQL SLAVE 1 Сервер бэкапов Примеры веб-кластеров Архитектура: «www.komos.ru» Выделенный сервер 1 Выделенный сервер 2 Балансировщик (nginx, upstream/ip_hash) База данных MySQL MASTER Csync2 SQL-балансировщик 1С-Битрикс Memcached Memcached SQL-балансировщик 1С-Битрикс База данных MySQL SLAVE «1С-Битрикс: Веб-окружение»: PHP5 «1С-Битрикс: Веб-кластер» «1С-Битрикс: Веб-кластер» Intel® Core™ i7-920 Quad-Core, 2 x 750 GB HDD SATA2 (software RAID1), 8 GB DDR3 Proxy (nginx) Proxy (nginx) Примеры веб-кластеров Архитектура: «www.1с-bitrix.ru» Балансировщик (nginx, кэширование статики, SSL-termination) Выделенный сервер 1 Выделенный сервер 2 Proxy (nginx) Proxy (nginx) «1С-Битрикс: Бизнес веб-кластер» «1С-Битрикс: Бизнес веб-кластер» База данных MySQL MASTER Csync2/inotify SQL-балансировщик 1С-Битрикс Memcached SQL-балансировщик 1С-Битрикс Memcached «1С-Битрикс: Веб-окружение»: PHP5, 8 ядер, 7 ГБ, software RAID10, xfs, s3fs. В проекте >200ГБ статики База данных MySQL SLAVE Сервер мониторинга (nagios/munin) CDN/s3 – видео, демо -дистрибутивы Примеры веб-кластеров Примеры веб-кластеров: «Битрикс24» Static Static CDN js, css Elastic Load Balancing Web 1 Web 2 local cache local cache CloudWatch + AutoScaling … mysqld control cache: memcached js, css Elastic Load Balancing Web 2 local cache local cache local cache S3 mysqld master-master replication mysqld master-master replication control cache: memcached mysqld mysqld mysqld control cache: memcached CloudWatch + AutoScaling … local cache mysqld mysqld mysqld mysqld mysqld control cache: memcached management, monitoring, backup Web N mysqld mysqld mysqld control cache: memcached CDN Web 1 master-master replication mysqld Dynamic Web N mysqld mysqld images (clients) images (clients) Dynamic mysqld control cache: memcached Настраиваем репликацию Включаем кластерный кэш Резервируем файлы и каналы Масштабирование базы данных Веб-сервер «1С-Битрикс: Веб-кластер» SQL-балансировщик 1С-Битрикс База данных MySQL MASTER База данных MySQL SLAVE 1 База данных MySQL SLAVE … MySQL replication, mixed-mode База данных MySQL SLAVE N Масштабирование серверов приложений Высокая посещаемость Балансировщик нагрузки Нода 1 «1С-Битрикс: Веб-кластер» Нода 2 «1С-Битрикс: Веб-кластер» База данных MySQL … Нода N «1С-Битрикс: Веб-кластер» Разворачиваемся в облаке Балансировщик Amazon Вирт. сервер 1 Вирт. сервер 2 RDBMS(MySQL) Master Appl. server (Apache+Битрикс) RDBMS(MySQL) Slave Кэш (memcached) Proxy server (Nginx) Кэш (memcached) Proxy server (Nginx) Appl. server (Apache+Битрикс) dили nginx и др. Работаем сразу в двух ДЦ Дата-центр 1 Дата-центр 2 1С-Битрикс: Веб-кластер RDBMS(MySQL) Master RDBMS(MySQL) Slave «Горячий» бэкап S3S3снепшот S3снепшот снепшот Работаем сразу в двух ДЦ «Эластичный» IP, не поменялся Дата-центр 2 Веб-кластер RDBMS(MySQL) Master S3S3снепшот S3снепшот снепшот Multi-master на Битрикс24 в Amazon Web Services SSL - терминация Образ машины (AMI) Балансировщики (ELB) Файлы/Бэкапы/ Снепшоты – S3 Мониторинг (CloudWatch) ДЦ1 ДЦ2 Масштабирование MySQL Группа автомасштабирования (AutoScaling) Memcached Percona XtraDB Master-Master (Active/Passive) Масштабирование PHP Memcached Memcached Memcached Memcached Memcached Спасибо за внимание! Вопросы? Александр Сербул [email protected] AlexSerbul