База данных MySQL

реклама
Настройка веб-кластера – виды
архитектур на все случаи жизни
Александр Сербул
Руководитель направления контроля качества
интеграции и внедрений 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
Спасибо за внимание!
Вопросы?
Александр Сербул
serbul@1c-bitrix.ru
AlexSerbul
Скачать