SlideShare a Scribd company logo
Практический опыт
использования некоторых
 современных решений
   репликации MySQL
      Александр Чистяков
            bOombate
     twitter.com/noatbaksap
Докладчик
•   Разработчик серверных приложений
•   Администратор БД
•   Эксплуатационщик
•   Архитектор серверных приложений
•   Просто хороший человек
Аудитория
• Разработчики серверных
  приложений
• Администраторы БД
• Эксплуатационщики
• Архитекторы серверных приложений
• Просто хорошие люди
Disclaimer
• Все утверждения, приведенные в
  этом докладе – ложь
• Если даже и не ложь, лучше их еще
  раз проверить в своем окружении
• Вполне возможно, я что-либо не
  учел или не знал
• Либо у вас другая инфраструктура
Цель
• Традиционно СУБД является SPOF
• Время восстановления после сбоя
  СУБД может составлять несколько
  часов при отсутствии как минимум
  горячего резерва
• Так нам слона не продать
MySQL? А имеет ли смысл?
• Главный open source конкурент – PostgreSQL
• Надо как-то оценить статистику
  использования
• http://www.indeed.com/jobs?q=postgresql&l=C
  A
• http://www.indeed.com/jobs?q=mysql&l=CA
• 518 против 5158
• Кажется, у нас есть победитель
Что мы хотим обеспечить?
• Несколько MySQL-серверов
• Несколько клиентов
• При отказе одного MySQL-сервера
  клиенты работают с другим
• Знакомая задача!
• Несколько традиционных решений
Платформа
• Хостинг среднего ценового
  диапазона
• Подключение к сети 100Мбит
• Машины в одном датацентре
• Крайне желательно, чтобы через
  WAN подключение тоже работало
Что такое «репликация»?
• Процесс синхронизации нескольких
  копий данных
• Репликация возможна на нескольких
  уровнях:
  уровень блочного устройства
  уровень строк в таблицах DB
  уровень 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
• Из-за того, что основана на
  триггерах, изменения структуры
  базы требуют перезапуск
  репликации
• Версии 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+MyS
  QL+problems
• http://www.xaprb.com/blog/2011/05/
  04/whats-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)
• Следите за сообществом
Спасибо за внимание
    Александр Чистяков
          bOombate
    alexclear@gmail.com
 livejournal.com/alexclear
    github.com/alexclear
  slideshare.net/alexclear
Пожалуйста, поставьте
 оценку моему докладу.

Ваше мнение очень важно.

        Спасибо!

More Related Content

PPTX
Mysql replication DevConf 2012
PPTX
Тестируем производительность распределённых систем, Александр Киров (Parallels)
PPTX
VMUG Moscow 2014 Проблемы с дисками?
PPTX
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
PDF
Облако в Badoo год спустя
PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
PPTX
ESXi 5.x CPU scheduler
PPTX
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Mysql replication DevConf 2012
Тестируем производительность распределённых систем, Александр Киров (Parallels)
VMUG Moscow 2014 Проблемы с дисками?
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Облако в Badoo год спустя
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
ESXi 5.x CPU scheduler
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...

What's hot (19)

PPTX
Модификации KVM для работы в кластере, Андрей Шетухин
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PPT
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PDF
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PPTX
Практический опыт применения виртуализации для web-систем
PDF
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
PDF
Devconf2013 new-features-in-mysql-and-mariadb
PDF
MySQL 101
PDF
"Новые возможности MySQL 5.7"
PDF
presentation_r00t_conf
PPTX
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
PDF
PDF
Prometheus мониторинг микросервисных приложений / Виталий Левченко
PDF
My talk at Highload++ 2015
PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Модификации KVM для работы в кластере, Андрей Шетухин
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Практический опыт применения виртуализации для web-систем
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Devconf2013 new-features-in-mysql-and-mariadb
MySQL 101
"Новые возможности MySQL 5.7"
presentation_r00t_conf
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
2014.12.23 Александр Андреев, Parallels
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Prometheus мониторинг микросервисных приложений / Виталий Левченко
My talk at Highload++ 2015
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ad

Similar to Практический опыт использования некоторых современных решений репликации MySQL (20)

PPTX
Hosting for forbes.ru_
PDF
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
PPTX
Опыт эксплуатации большого проекта на Ruby
PDF
High load2007 scaling-web-applications-rus
PPTX
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
PDF
История небольшого успеха с PostgreSQL – Владимир Бородин
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
PPTX
Daemons In Web on #devrus
PDF
Zero Downtime PHP Deployment with Envoyer And Forge
PDF
Введение в отладку производительности MySQL приложений
PPTX
Оптимизация производительности нагруженных веб-систем на Java
PDF
Как делать backup MySQL
PDF
Как мы готовим MySQL
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PDF
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PPTX
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
Hosting for forbes.ru_
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Опыт эксплуатации большого проекта на Ruby
High load2007 scaling-web-applications-rus
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
История небольшого успеха с PostgreSQL – Владимир Бородин
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Daemons In Web on #devrus
Zero Downtime PHP Deployment with Envoyer And Forge
Введение в отладку производительности MySQL приложений
Оптимизация производительности нагруженных веб-систем на Java
Как делать backup MySQL
Как мы готовим MySQL
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
Обзор перспективных баз данных для highload / Юрий Насретдинов
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
Ad

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

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