SlideShare a Scribd company logo
Практический опыт
использования решений
  репликации MySQL
         Александр Чистяков
               bOombate
    http://alexclear.livejournal.com
Докладчик?

•   Разработчик серверных приложений
•   Администратор баз данных
•   Эксплуатационщик
•   Архитектор серверных приложений
•   Просто хороший человек
Аудитория?

•   Разработчики серверных приложений
•   Администраторы баз данных
•   Эксплуатационщики
•   Архитекторы серверных приложений
•   Просто хорошие люди
Цель

• Традиционно СУБД является SPOF
• Время восстановления после сбоя СУБД
  может составлять несколько часов при
  отсутствии как минимум горячего резерва
• Перспектива несколько часов ничего не
  продавать очень не радует топ-менеджеров
MySQL? А имеет ли смысл?

•   Главный open source конкурент - PostgreSQL
•   Надо как-то оценить статистику использования
•   http://www.indeed.com/jobs?q=postgresql&l=CA
•   http://www.indeed.com/jobs?q=mysql&l=CA
•   575 против 5728
•   Кажется, у нас есть победитель
•   Это была не самая корректная метрика, я в курсе
Что мы хотим обеспечить?

• Несколько MySQL-серверов
• Несколько клиентов
• При отказе одного MySQL-сервера клиенты
  работают с другими
• Знакомая задача!
• Имеет несколько традиционных решений
Платформа

•   Хостинг среднего ценового диапазона
•   Подключение к сети 100Мбит
•   Машины в одном датацентре
•   Крайне желательно, чтобы через WAN
    подключение тоже работало
Что такое «репликация»?

• Процесс синхронизации нескольких копий
  данных
• Репликация возможна на нескольких уровнях:
  – Уровень блочного устройства
  – Уровень строк в таблице базы данных
  – Уровень SQL-запросов
Виды репликации

• Синхронная (копии данных на нодах
  гарантированно одинаковые)
• Асинхронная (операция завершается раньше,
  чем о ней узнают все ноды)
• Какая лучше?
• А каковы метрики?
Метрики

•   Простота настройки
•   Простота поддержки
•   Быстродействие
•   Простота восстановления после сбоя
•   Скорость восстановления после сбоя
•   Возможность автоматического восстановления
•   Целостность данных
На уровне блочного устройства

•   MySQL + DRBD + Heartbeat
•   Упомянуто в официальной документации
•   DRBD – сетевой RAID1
•   Может быть как sync, так и async
•   DRBD может быть active-active
    – Но для СУБД это не подходит
На уровне блочного устройства

• Минусы:
  – Для нашей платформы не очень подходит (очень
    медленно)
  – Одна из нод полностью простаивает
  – Heartbeat устарел, и его кодом никто не владеет
• Плюсы:
  – Донастройка MySQL не нужна
Метрики - DRBD

•   Простота настройки
•   Простота поддержки
•   Быстродействие
•   Простота восстановления после сбоя
•   Скорость восстановления после сбоя
•   Возможность автоматического восстановления
•   Целостность данных (sync/async ?)
На уровне базы данных

•   Встроенная в MySQL
•   rubyrep
•   Galera Cluster for MySQL
•   Tungsten Replicator
•   MMM
•   PRM
Встроенная в MySQL

• до версии 5.1 – только statement-based
• 5.1 и выше – row-based
• Плюсы:
  – Может работать между разными версиями сервера
    (между 5.0 и 5.5)
  – Очень проста в настройке
Встроенная в MySQL

• Минусы
  – Информация о состоянии slave записывается в
    обычный файл – может потеряться (со мной такое
    было)
  – При использовании statement-based slave и master
    результаты запросов различаются – INSERT….
    VALUES(NOW(),….)
Встроенная в MySQL

• Можно настроить master-master и даже
  кольцевую репликацию
• auto_increment_increment,
  auto_increment_offset
• log-slave-update=TRUE
• Минус: split brain
• Выход: На разных узлах писать только в
  разные таблицы
Split brain?

• Пусть в кластере есть два узла
• Или даже три
• Между узлами нарушается связность, при
  этом оба узла остаются в рабочем состоянии
  и обрабатывают запросы
• Рассинхронизация данных
Метрики - встроенная

•   Простота настройки
•   Простота поддержки
•   Быстродействие
•   Простота восстановления после сбоя
•   Скорость восстановления после сбоя
•   Возможность автоматического восстановления
•   Целостность данных
rubyrep

• Trigger-based
• Ruby-based
• Из-за того, что основана на триггерах,
  изменения структуры базы требуют
  перезапуск репликации
• Несовместима с pt-online-schema-change
• Версии MySQL могут быть разными
Метрики - rubyrep

•   Простота настройки
•   Простота поддержки
•   Быстродействие
•   Простота восстановления после сбоя
•   Скорость восстановления после сбоя
•   Возможность автоматического восстановления
•   Целостность данных
Взаимная совместимость

• Краткий ответ – лучше никогда не пытайтесь
• Однажды я настроил rubyrep между
  серверами со штатной master-slave
  репликацией
• Возникла петля
Galera Cluster for MySQL

• Синхронная репликация
• Производитель заявляет active-active multi-
  master
• Поддержка MySQL 5.1, 5.5
• InnoDB only (MyISAM все равно не нужен)
Galera Cluster - установка

•   MySQL w/wsrep patch .deb/.rpm
•   wsrep provider .deb/.rpm
•   По умолчанию wsrep provider отключен
•   Поменять установки в файле
    /etc/mysql/conf.d/wsrep.cnf
Galera Cluster – настройка 1

•   binlog_format=ROW
•   default-storage-engine=InnoDB
•   innodb_locks_unsafe_for_binlog=1
•   Отключить query_cache
•   innodb_autoinc_lock_mode=2
Galera Cluster – настройка 2

• wsrep_cluster_name
• wsrep_provider
• wsrep_cluster_address – можно устанавливать
  динамически в случае, если state transfer
  method не rsync
• wsrep_retry_autocommit=1
• wsrep_certify_non_PK=1
Galera Cluster – передача состояния

• mysqldump – обычный обмен дампом (очень
  медленно)
• rsync – передача самих файлов DB, гораздо
  быстрее
• В момент передачи состояния от ноды к ноде
  кластер недоступен
Galera Cluster -
           производительность
•   Один и тот же дамп базы ~3 Gb
•   Два узла MySQL, один арбитратор
•   100Мб сеть, сервера в одном ДЦ
•   60 мин – заливка дампа в кластер
•   7 мин – заливка дампа на отдельно стоящий
    сервер
Galera Cluster - балансировка

• Блокировка на уровне строк – можно
  попробовать использовать балансировщик
  уровня TCP
• Мы использовали HAProxy
• Python-based скрипт проверки состояния
  MySQL
Galera Cluster – split brain

• Если узла только два, при нарушении
  связности оба перестанут обрабатывать
  запросы
• Поэтому узла должно быть три (или любое
  нечетное число)
• Арбитратор – приложение, которое участвует
  в обмене данными репликации, но не пишет
  на диск
Galera Cluster - проблемы

• При конкурентных вставках в одну и ту же
  таблицу возможен deadlock (и у нас он
  возникал постоянно)
• Варианты:
  – Переписать бизнес-логику
  – Поменять балансировщик
• (кстати, Python скрипт с предыдущего слайда
  зависал)
Балансировщик уровня
         приложения - yybal
• Написан на python/greenlets
• Не готов для публичного использования
• Перенаправляет запросы с учетом их смысла
  (все запросы на изменение данных идут на
  один и тот же узел)
Galera Cluster – проблемы 2

• ID у суррогатных ключей при вставке
  перескакивал на несколько тысяч
• Разработчик Galera сообщил, что проблема в
  самом MySQL
• Так как от конкурентной вставки уже
  отказались, отключили смещение в
  конфигурационном файле
Galera Cluster – проблемы 3

• Внезапное и необъяснимое увеличение
  потребления CPU
• Разбираться
  было некогда
Метрики - Galera

•   Простота настройки
•   Простота поддержки
•   Быстродействие
•   Простота восстановления после сбоя
•   Скорость восстановления после сбоя
•   Возможность автоматического восстановления
•   Целостность данных
MMM

• MMM – Multi-Master Replication Manager
• http://www.google.ru/#q=MMM+MySQL+proble
  ms
• http://www.xaprb.com/blog/2011/05/04/what
  s-wrong-with-mmm/
Percona Replication Manager

• Позиционируется как замена MMM
• Основан на Pacemaker
• Pacemaker предоставляет надежный
  коммуникационный канал и занимается
  арбитражем
• Pacemaker оперирует виртуальными IP-
  адресами
PRM - настройка

• Как быть с виртуальными IP-адресами, если
  машины в разных подсетях?
• IPsec туннель, поверх него – GRE туннель с
  разрешенным multicast
• Quagga с включенным OSPF
• Виртуальные адреса на алиасе локального
  интерфейса (lo)
PRM – split brain

• PRM очень консервативен и делает выбор
  нового мастера только один раз
• Логика переключения IP ложится на
  Pacemaker
• Документация pacemaker
• Welcome to Vietnam! (ключевые слово:
  STONITH device)
Метрики - PRM

•   Простота настройки
•   Простота поддержки
•   Быстродействие
•   Простота восстановления после сбоя
•   Скорость восстановления после сбоя
•   Возможность автоматического восстановления
•   Целостность данных (semisync?)
Планы на будущее

• Drizzle – очень большое внимание уделено
  репликации:
  –   формат Google protobuf
  –   replication log – таблица InnoDB
  –   Один slave для нескольких master
  –   Replication state записывается транзакционно
• Semisync plugins для MySQL 5.5
Выводы

• Репликация MySQL требует жертв
• Универсального решения не существует
• Galera Cluster – неплохое решение при не
  очень большой нагрузке (Alexa rank in RU <
  500)
• Следите за сообществом
Вопросы?
•
•
•
•
•
•
Спасибо за внимание!
•   С вами был Александр Чистяков
•   http://alexclear.livejournal.com
•   alexclear@gmail.com
•   http://github.com/alexclear

More Related Content

PPTX
Практический опыт использования некоторых современных решений репликации MySQL
PPTX
Hosting for forbes.ru_
PDF
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PDF
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Практический опыт использования некоторых современных решений репликации MySQL
Hosting for forbes.ru_
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...

What's hot (20)

PPTX
Тестируем производительность распределённых систем, Александр Киров (Parallels)
PPTX
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PPTX
обзор архитектуры и подсистем деплоя и мониторинга
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
PDF
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PPTX
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
PPTX
Модификации KVM для работы в кластере, Андрей Шетухин
PDF
Javascript-фреймворки:
 должен остаться только один
PPTX
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PPSX
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
PDF
Балансировка нагрузки и отказоустойчивость в Одноклассниках
PPTX
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
PPTX
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PPTX
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PPTX
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
обзор архитектуры и подсистем деплоя и мониторинга
Как не положить тысячи серверов с помощью системы централизованного управлени...
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Модификации KVM для работы в кластере, Андрей Шетухин
Javascript-фреймворки:
 должен остаться только один
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Ad

Viewers also liked (6)

PDF
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
PDF
Salt and Ansible - Python-based CM systems
PDF
PDF
Repeatability on DevOps-40 meetup Apr 2014
PDF
Optimization of a big PostgreSQL database
PDF
My talk at Linux Piter 2016
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Salt and Ansible - Python-based CM systems
Repeatability on DevOps-40 meetup Apr 2014
Optimization of a big PostgreSQL database
My talk at Linux Piter 2016
Ad

Similar to Mysql replication DevConf 2012 (20)

PDF
Эволюция репликации в MySQL и MariaDB
PDF
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
PDF
High Availability Solutions with MySQL
PPT
Использование различных СУБД в высоконагруженных проектах
PDF
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
PDF
Что нужно знать о трёх топовых фичах MySQL
PDF
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
PPT
hl++ Rubtsov
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PDF
Облако в Badoo год спустя
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PDF
Эффективная отладка репликации MySQL
PDF
Сильные стороны MySQL для высоконагруженных проектов
PDF
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
ODP
Scaling Web Sites By Sharding And Replication Hl2008 Rus
PPT
1С-Битрикс - Веб-кластер
PPTX
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
PDF
Павел Пушкарев - Базы данных: легковесная реляционная высокопроизводительная ...
ODP
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Эволюция репликации в MySQL и MariaDB
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
High Availability Solutions with MySQL
Использование различных СУБД в высоконагруженных проектах
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
Что нужно знать о трёх топовых фичах MySQL
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
hl++ Rubtsov
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Облако в Badoo год спустя
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Эффективная отладка репликации MySQL
Сильные стороны MySQL для высоконагруженных проектов
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Scaling Web Sites By Sharding And Replication Hl2008 Rus
1С-Битрикс - Веб-кластер
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Павел Пушкарев - Базы данных: легковесная реляционная высокопроизводительная ...
Wonderful World Of Mysql Storage Engines Hl2008 Rus

More from Alex Chistyakov (20)

PDF
My slides from DevOpsDays 2019
PDF
My slides from BMM №3 May 2019
PDF
My slides from DevOps-40 meetup Jun 2019
PDF
My slides from SECR'2018
PDF
My slides from the first SPb SRE community meetup at DataArt
PDF
My slides from CC'2019
PDF
My slides from BMM №4 Nov 2019
PDF
My slides from DevOps-40 meetup Oct 2019
PDF
My slides from DevOps-40 meetup Dec 2019
PDF
Configuration management and Kubernetes
PDF
Ansible and other stuff
PDF
Python performance engineering in 2017
PDF
My talk at SPb SQA sub-meetup of ITGM
PDF
My talk at SECR 2017
PDF
On scaling teams
PDF
MariaDB workshop
PDF
Docker for JS people
PDF
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
PDF
My talk on GitHub open data at ITGM #10
PDF
My talk on DevOps :) at Stachka 2017
My slides from DevOpsDays 2019
My slides from BMM №3 May 2019
My slides from DevOps-40 meetup Jun 2019
My slides from SECR'2018
My slides from the first SPb SRE community meetup at DataArt
My slides from CC'2019
My slides from BMM №4 Nov 2019
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Dec 2019
Configuration management and Kubernetes
Ansible and other stuff
Python performance engineering in 2017
My talk at SPb SQA sub-meetup of ITGM
My talk at SECR 2017
On scaling teams
MariaDB workshop
Docker for JS people
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on GitHub open data at ITGM #10
My talk on DevOps :) at Stachka 2017

Mysql replication DevConf 2012

  • 1. Практический опыт использования решений репликации MySQL Александр Чистяков bOombate http://alexclear.livejournal.com
  • 2. Докладчик? • Разработчик серверных приложений • Администратор баз данных • Эксплуатационщик • Архитектор серверных приложений • Просто хороший человек
  • 3. Аудитория? • Разработчики серверных приложений • Администраторы баз данных • Эксплуатационщики • Архитекторы серверных приложений • Просто хорошие люди
  • 4. Цель • Традиционно СУБД является SPOF • Время восстановления после сбоя СУБД может составлять несколько часов при отсутствии как минимум горячего резерва • Перспектива несколько часов ничего не продавать очень не радует топ-менеджеров
  • 5. MySQL? А имеет ли смысл? • Главный open source конкурент - PostgreSQL • Надо как-то оценить статистику использования • http://www.indeed.com/jobs?q=postgresql&l=CA • http://www.indeed.com/jobs?q=mysql&l=CA • 575 против 5728 • Кажется, у нас есть победитель • Это была не самая корректная метрика, я в курсе
  • 6. Что мы хотим обеспечить? • Несколько MySQL-серверов • Несколько клиентов • При отказе одного MySQL-сервера клиенты работают с другими • Знакомая задача! • Имеет несколько традиционных решений
  • 7. Платформа • Хостинг среднего ценового диапазона • Подключение к сети 100Мбит • Машины в одном датацентре • Крайне желательно, чтобы через WAN подключение тоже работало
  • 8. Что такое «репликация»? • Процесс синхронизации нескольких копий данных • Репликация возможна на нескольких уровнях: – Уровень блочного устройства – Уровень строк в таблице базы данных – Уровень SQL-запросов
  • 9. Виды репликации • Синхронная (копии данных на нодах гарантированно одинаковые) • Асинхронная (операция завершается раньше, чем о ней узнают все ноды) • Какая лучше? • А каковы метрики?
  • 10. Метрики • Простота настройки • Простота поддержки • Быстродействие • Простота восстановления после сбоя • Скорость восстановления после сбоя • Возможность автоматического восстановления • Целостность данных
  • 11. На уровне блочного устройства • MySQL + DRBD + Heartbeat • Упомянуто в официальной документации • DRBD – сетевой RAID1 • Может быть как sync, так и async • DRBD может быть active-active – Но для СУБД это не подходит
  • 12. На уровне блочного устройства • Минусы: – Для нашей платформы не очень подходит (очень медленно) – Одна из нод полностью простаивает – Heartbeat устарел, и его кодом никто не владеет • Плюсы: – Донастройка MySQL не нужна
  • 13. Метрики - DRBD • Простота настройки • Простота поддержки • Быстродействие • Простота восстановления после сбоя • Скорость восстановления после сбоя • Возможность автоматического восстановления • Целостность данных (sync/async ?)
  • 14. На уровне базы данных • Встроенная в MySQL • rubyrep • Galera Cluster for MySQL • Tungsten Replicator • MMM • PRM
  • 15. Встроенная в MySQL • до версии 5.1 – только statement-based • 5.1 и выше – row-based • Плюсы: – Может работать между разными версиями сервера (между 5.0 и 5.5) – Очень проста в настройке
  • 16. Встроенная в MySQL • Минусы – Информация о состоянии slave записывается в обычный файл – может потеряться (со мной такое было) – При использовании statement-based slave и master результаты запросов различаются – INSERT…. VALUES(NOW(),….)
  • 17. Встроенная в MySQL • Можно настроить master-master и даже кольцевую репликацию • auto_increment_increment, auto_increment_offset • log-slave-update=TRUE • Минус: split brain • Выход: На разных узлах писать только в разные таблицы
  • 18. Split brain? • Пусть в кластере есть два узла • Или даже три • Между узлами нарушается связность, при этом оба узла остаются в рабочем состоянии и обрабатывают запросы • Рассинхронизация данных
  • 19. Метрики - встроенная • Простота настройки • Простота поддержки • Быстродействие • Простота восстановления после сбоя • Скорость восстановления после сбоя • Возможность автоматического восстановления • Целостность данных
  • 20. rubyrep • Trigger-based • Ruby-based • Из-за того, что основана на триггерах, изменения структуры базы требуют перезапуск репликации • Несовместима с pt-online-schema-change • Версии MySQL могут быть разными
  • 21. Метрики - rubyrep • Простота настройки • Простота поддержки • Быстродействие • Простота восстановления после сбоя • Скорость восстановления после сбоя • Возможность автоматического восстановления • Целостность данных
  • 22. Взаимная совместимость • Краткий ответ – лучше никогда не пытайтесь • Однажды я настроил rubyrep между серверами со штатной master-slave репликацией • Возникла петля
  • 23. Galera Cluster for MySQL • Синхронная репликация • Производитель заявляет active-active multi- master • Поддержка MySQL 5.1, 5.5 • InnoDB only (MyISAM все равно не нужен)
  • 24. Galera Cluster - установка • MySQL w/wsrep patch .deb/.rpm • wsrep provider .deb/.rpm • По умолчанию wsrep provider отключен • Поменять установки в файле /etc/mysql/conf.d/wsrep.cnf
  • 25. Galera Cluster – настройка 1 • binlog_format=ROW • default-storage-engine=InnoDB • innodb_locks_unsafe_for_binlog=1 • Отключить query_cache • innodb_autoinc_lock_mode=2
  • 26. Galera Cluster – настройка 2 • wsrep_cluster_name • wsrep_provider • wsrep_cluster_address – можно устанавливать динамически в случае, если state transfer method не rsync • wsrep_retry_autocommit=1 • wsrep_certify_non_PK=1
  • 27. Galera Cluster – передача состояния • mysqldump – обычный обмен дампом (очень медленно) • rsync – передача самих файлов DB, гораздо быстрее • В момент передачи состояния от ноды к ноде кластер недоступен
  • 28. Galera Cluster - производительность • Один и тот же дамп базы ~3 Gb • Два узла MySQL, один арбитратор • 100Мб сеть, сервера в одном ДЦ • 60 мин – заливка дампа в кластер • 7 мин – заливка дампа на отдельно стоящий сервер
  • 29. Galera Cluster - балансировка • Блокировка на уровне строк – можно попробовать использовать балансировщик уровня TCP • Мы использовали HAProxy • Python-based скрипт проверки состояния MySQL
  • 30. Galera Cluster – split brain • Если узла только два, при нарушении связности оба перестанут обрабатывать запросы • Поэтому узла должно быть три (или любое нечетное число) • Арбитратор – приложение, которое участвует в обмене данными репликации, но не пишет на диск
  • 31. Galera Cluster - проблемы • При конкурентных вставках в одну и ту же таблицу возможен deadlock (и у нас он возникал постоянно) • Варианты: – Переписать бизнес-логику – Поменять балансировщик • (кстати, Python скрипт с предыдущего слайда зависал)
  • 32. Балансировщик уровня приложения - yybal • Написан на python/greenlets • Не готов для публичного использования • Перенаправляет запросы с учетом их смысла (все запросы на изменение данных идут на один и тот же узел)
  • 33. Galera Cluster – проблемы 2 • ID у суррогатных ключей при вставке перескакивал на несколько тысяч • Разработчик Galera сообщил, что проблема в самом MySQL • Так как от конкурентной вставки уже отказались, отключили смещение в конфигурационном файле
  • 34. Galera Cluster – проблемы 3 • Внезапное и необъяснимое увеличение потребления CPU • Разбираться было некогда
  • 35. Метрики - Galera • Простота настройки • Простота поддержки • Быстродействие • Простота восстановления после сбоя • Скорость восстановления после сбоя • Возможность автоматического восстановления • Целостность данных
  • 36. MMM • MMM – Multi-Master Replication Manager • http://www.google.ru/#q=MMM+MySQL+proble ms • http://www.xaprb.com/blog/2011/05/04/what s-wrong-with-mmm/
  • 37. Percona Replication Manager • Позиционируется как замена MMM • Основан на Pacemaker • Pacemaker предоставляет надежный коммуникационный канал и занимается арбитражем • Pacemaker оперирует виртуальными IP- адресами
  • 38. PRM - настройка • Как быть с виртуальными IP-адресами, если машины в разных подсетях? • IPsec туннель, поверх него – GRE туннель с разрешенным multicast • Quagga с включенным OSPF • Виртуальные адреса на алиасе локального интерфейса (lo)
  • 39. PRM – split brain • PRM очень консервативен и делает выбор нового мастера только один раз • Логика переключения IP ложится на Pacemaker • Документация pacemaker • Welcome to Vietnam! (ключевые слово: STONITH device)
  • 40. Метрики - PRM • Простота настройки • Простота поддержки • Быстродействие • Простота восстановления после сбоя • Скорость восстановления после сбоя • Возможность автоматического восстановления • Целостность данных (semisync?)
  • 41. Планы на будущее • Drizzle – очень большое внимание уделено репликации: – формат Google protobuf – replication log – таблица InnoDB – Один slave для нескольких master – Replication state записывается транзакционно • Semisync plugins для MySQL 5.5
  • 42. Выводы • Репликация MySQL требует жертв • Универсального решения не существует • Galera Cluster – неплохое решение при не очень большой нагрузке (Alexa rank in RU < 500) • Следите за сообществом
  • 44. Спасибо за внимание! • С вами был Александр Чистяков • http://alexclear.livejournal.com • [email protected] • http://github.com/alexclear