Your SlideShare is downloading. ×
0
Практический опытиспользования решений  репликации MySQL         Александр Чистяков               bOombate    http://alexc...
Докладчик?•   Разработчик серверных приложений•   Администратор баз данных•   Эксплуатационщик•   Архитектор серверных при...
Аудитория?•   Разработчики серверных приложений•   Администраторы баз данных•   Эксплуатационщики•   Архитекторы серверных...
Цель• Традиционно СУБД является SPOF• Время восстановления после сбоя СУБД  может составлять несколько часов при  отсутств...
MySQL? А имеет ли смысл?•   Главный open source конкурент - PostgreSQL•   Надо как-то оценить статистику использования•   ...
Что мы хотим обеспечить?• Несколько MySQL-серверов• Несколько клиентов• При отказе одного MySQL-сервера клиенты  работают ...
Платформа•   Хостинг среднего ценового диапазона•   Подключение к сети 100Мбит•   Машины в одном датацентре•   Крайне жела...
Что такое «репликация»?• Процесс синхронизации нескольких копий  данных• Репликация возможна на нескольких уровнях:  – Уро...
Виды репликации• Синхронная (копии данных на нодах  гарантированно одинаковые)• Асинхронная (операция завершается раньше, ...
Метрики•   Простота настройки•   Простота поддержки•   Быстродействие•   Простота восстановления после сбоя•   Скорость во...
На уровне блочного устройства•   MySQL + DRBD + Heartbeat•   Упомянуто в официальной документации•   DRBD – сетевой RAID1•...
На уровне блочного устройства• Минусы:  – Для нашей платформы не очень подходит (очень    медленно)  – Одна из нод полност...
Метрики - DRBD•   Простота настройки•   Простота поддержки•   Быстродействие•   Простота восстановления после сбоя•   Скор...
На уровне базы данных•   Встроенная в MySQL•   rubyrep•   Galera Cluster for MySQL•   Tungsten Replicator•   MMM•   PRM
Встроенная в MySQL• до версии 5.1 – только statement-based• 5.1 и выше – row-based• Плюсы:  – Может работать между разными...
Встроенная в MySQL• Минусы  – Информация о состоянии slave записывается в    обычный файл – может потеряться (со мной тако...
Встроенная в MySQL• Можно настроить master-master и даже  кольцевую репликацию• auto_increment_increment,  auto_increment_...
Split brain?• Пусть в кластере есть два узла• Или даже три• Между узлами нарушается связность, при  этом оба узла остаются...
Метрики - встроенная•   Простота настройки•   Простота поддержки•   Быстродействие•   Простота восстановления после сбоя• ...
rubyrep• Trigger-based• Ruby-based• Из-за того, что основана на триггерах,  изменения структуры базы требуют  перезапуск р...
Метрики - rubyrep•   Простота настройки•   Простота поддержки•   Быстродействие•   Простота восстановления после сбоя•   С...
Взаимная совместимость• Краткий ответ – лучше никогда не пытайтесь• Однажды я настроил rubyrep между  серверами со штатной...
Galera Cluster for MySQL• Синхронная репликация• Производитель заявляет active-active multi-  master• Поддержка MySQL 5.1,...
Galera Cluster - установка•   MySQL w/wsrep patch .deb/.rpm•   wsrep provider .deb/.rpm•   По умолчанию wsrep provider отк...
Galera Cluster – настройка 1•   binlog_format=ROW•   default-storage-engine=InnoDB•   innodb_locks_unsafe_for_binlog=1•   ...
Galera Cluster – настройка 2• wsrep_cluster_name• wsrep_provider• wsrep_cluster_address – можно устанавливать  динамически...
Galera Cluster – передача состояния• mysqldump – обычный обмен дампом (очень  медленно)• rsync – передача самих файлов DB,...
Galera Cluster -           производительность•   Один и тот же дамп базы ~3 Gb•   Два узла MySQL, один арбитратор•   100Мб...
Galera Cluster - балансировка• Блокировка на уровне строк – можно  попробовать использовать балансировщик  уровня TCP• Мы ...
Galera Cluster – split brain• Если узла только два, при нарушении  связности оба перестанут обрабатывать  запросы• Поэтому...
Galera Cluster - проблемы• При конкурентных вставках в одну и ту же  таблицу возможен deadlock (и у нас он  возникал посто...
Балансировщик уровня         приложения - yybal• Написан на python/greenlets• Не готов для публичного использования• Перен...
Galera Cluster – проблемы 2• ID у суррогатных ключей при вставке  перескакивал на несколько тысяч• Разработчик Galera сооб...
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/...
Percona Replication Manager• Позиционируется как замена MMM• Основан на Pacemaker• Pacemaker предоставляет надежный  комму...
PRM - настройка• Как быть с виртуальными IP-адресами, если  машины в разных подсетях?• IPsec туннель, поверх него – GRE ту...
PRM – split brain• PRM очень консервативен и делает выбор  нового мастера только один раз• Логика переключения IP ложится ...
Метрики - PRM•   Простота настройки•   Простота поддержки•   Быстродействие•   Простота восстановления после сбоя•   Скоро...
Планы на будущее• Drizzle – очень большое внимание уделено  репликации:  –   формат Google protobuf  –   replication log –...
Выводы• Репликация MySQL требует жертв• Универсального решения не существует• Galera Cluster – неплохое решение при не  оч...
Вопросы?••••••
Спасибо за внимание!•   С вами был Александр Чистяков•   http://alexclear.livejournal.com•   alexclear@gmail.com•   http:/...
Upcoming SlideShare
Loading in...5
×

Mysql replication DevConf 2012

1,085

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,085
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Mysql replication DevConf 2012"

  1. 1. Практический опытиспользования решений репликации MySQL Александр Чистяков bOombate http://alexclear.livejournal.com
  2. 2. Докладчик?• Разработчик серверных приложений• Администратор баз данных• Эксплуатационщик• Архитектор серверных приложений• Просто хороший человек
  3. 3. Аудитория?• Разработчики серверных приложений• Администраторы баз данных• Эксплуатационщики• Архитекторы серверных приложений• Просто хорошие люди
  4. 4. Цель• Традиционно СУБД является SPOF• Время восстановления после сбоя СУБД может составлять несколько часов при отсутствии как минимум горячего резерва• Перспектива несколько часов ничего не продавать очень не радует топ-менеджеров
  5. 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. 6. Что мы хотим обеспечить?• Несколько MySQL-серверов• Несколько клиентов• При отказе одного MySQL-сервера клиенты работают с другими• Знакомая задача!• Имеет несколько традиционных решений
  7. 7. Платформа• Хостинг среднего ценового диапазона• Подключение к сети 100Мбит• Машины в одном датацентре• Крайне желательно, чтобы через WAN подключение тоже работало
  8. 8. Что такое «репликация»?• Процесс синхронизации нескольких копий данных• Репликация возможна на нескольких уровнях: – Уровень блочного устройства – Уровень строк в таблице базы данных – Уровень SQL-запросов
  9. 9. Виды репликации• Синхронная (копии данных на нодах гарантированно одинаковые)• Асинхронная (операция завершается раньше, чем о ней узнают все ноды)• Какая лучше?• А каковы метрики?
  10. 10. Метрики• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость восстановления после сбоя• Возможность автоматического восстановления• Целостность данных
  11. 11. На уровне блочного устройства• MySQL + DRBD + Heartbeat• Упомянуто в официальной документации• DRBD – сетевой RAID1• Может быть как sync, так и async• DRBD может быть active-active – Но для СУБД это не подходит
  12. 12. На уровне блочного устройства• Минусы: – Для нашей платформы не очень подходит (очень медленно) – Одна из нод полностью простаивает – Heartbeat устарел, и его кодом никто не владеет• Плюсы: – Донастройка MySQL не нужна
  13. 13. Метрики - DRBD• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость восстановления после сбоя• Возможность автоматического восстановления• Целостность данных (sync/async ?)
  14. 14. На уровне базы данных• Встроенная в MySQL• rubyrep• Galera Cluster for MySQL• Tungsten Replicator• MMM• PRM
  15. 15. Встроенная в MySQL• до версии 5.1 – только statement-based• 5.1 и выше – row-based• Плюсы: – Может работать между разными версиями сервера (между 5.0 и 5.5) – Очень проста в настройке
  16. 16. Встроенная в MySQL• Минусы – Информация о состоянии slave записывается в обычный файл – может потеряться (со мной такое было) – При использовании statement-based slave и master результаты запросов различаются – INSERT…. VALUES(NOW(),….)
  17. 17. Встроенная в MySQL• Можно настроить master-master и даже кольцевую репликацию• auto_increment_increment, auto_increment_offset• log-slave-update=TRUE• Минус: split brain• Выход: На разных узлах писать только в разные таблицы
  18. 18. Split brain?• Пусть в кластере есть два узла• Или даже три• Между узлами нарушается связность, при этом оба узла остаются в рабочем состоянии и обрабатывают запросы• Рассинхронизация данных
  19. 19. Метрики - встроенная• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость восстановления после сбоя• Возможность автоматического восстановления• Целостность данных
  20. 20. rubyrep• Trigger-based• Ruby-based• Из-за того, что основана на триггерах, изменения структуры базы требуют перезапуск репликации• Несовместима с pt-online-schema-change• Версии MySQL могут быть разными
  21. 21. Метрики - rubyrep• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость восстановления после сбоя• Возможность автоматического восстановления• Целостность данных
  22. 22. Взаимная совместимость• Краткий ответ – лучше никогда не пытайтесь• Однажды я настроил rubyrep между серверами со штатной master-slave репликацией• Возникла петля
  23. 23. Galera Cluster for MySQL• Синхронная репликация• Производитель заявляет active-active multi- master• Поддержка MySQL 5.1, 5.5• InnoDB only (MyISAM все равно не нужен)
  24. 24. Galera Cluster - установка• MySQL w/wsrep patch .deb/.rpm• wsrep provider .deb/.rpm• По умолчанию wsrep provider отключен• Поменять установки в файле /etc/mysql/conf.d/wsrep.cnf
  25. 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. 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. 27. Galera Cluster – передача состояния• mysqldump – обычный обмен дампом (очень медленно)• rsync – передача самих файлов DB, гораздо быстрее• В момент передачи состояния от ноды к ноде кластер недоступен
  28. 28. Galera Cluster - производительность• Один и тот же дамп базы ~3 Gb• Два узла MySQL, один арбитратор• 100Мб сеть, сервера в одном ДЦ• 60 мин – заливка дампа в кластер• 7 мин – заливка дампа на отдельно стоящий сервер
  29. 29. Galera Cluster - балансировка• Блокировка на уровне строк – можно попробовать использовать балансировщик уровня TCP• Мы использовали HAProxy• Python-based скрипт проверки состояния MySQL
  30. 30. Galera Cluster – split brain• Если узла только два, при нарушении связности оба перестанут обрабатывать запросы• Поэтому узла должно быть три (или любое нечетное число)• Арбитратор – приложение, которое участвует в обмене данными репликации, но не пишет на диск
  31. 31. Galera Cluster - проблемы• При конкурентных вставках в одну и ту же таблицу возможен deadlock (и у нас он возникал постоянно)• Варианты: – Переписать бизнес-логику – Поменять балансировщик• (кстати, Python скрипт с предыдущего слайда зависал)
  32. 32. Балансировщик уровня приложения - yybal• Написан на python/greenlets• Не готов для публичного использования• Перенаправляет запросы с учетом их смысла (все запросы на изменение данных идут на один и тот же узел)
  33. 33. Galera Cluster – проблемы 2• ID у суррогатных ключей при вставке перескакивал на несколько тысяч• Разработчик Galera сообщил, что проблема в самом MySQL• Так как от конкурентной вставки уже отказались, отключили смещение в конфигурационном файле
  34. 34. Galera Cluster – проблемы 3• Внезапное и необъяснимое увеличение потребления CPU• Разбираться было некогда
  35. 35. Метрики - Galera• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость восстановления после сбоя• Возможность автоматического восстановления• Целостность данных
  36. 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. 37. Percona Replication Manager• Позиционируется как замена MMM• Основан на Pacemaker• Pacemaker предоставляет надежный коммуникационный канал и занимается арбитражем• Pacemaker оперирует виртуальными IP- адресами
  38. 38. PRM - настройка• Как быть с виртуальными IP-адресами, если машины в разных подсетях?• IPsec туннель, поверх него – GRE туннель с разрешенным multicast• Quagga с включенным OSPF• Виртуальные адреса на алиасе локального интерфейса (lo)
  39. 39. PRM – split brain• PRM очень консервативен и делает выбор нового мастера только один раз• Логика переключения IP ложится на Pacemaker• Документация pacemaker• Welcome to Vietnam! (ключевые слово: STONITH device)
  40. 40. Метрики - PRM• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость восстановления после сбоя• Возможность автоматического восстановления• Целостность данных (semisync?)
  41. 41. Планы на будущее• Drizzle – очень большое внимание уделено репликации: – формат Google protobuf – replication log – таблица InnoDB – Один slave для нескольких master – Replication state записывается транзакционно• Semisync plugins для MySQL 5.5
  42. 42. Выводы• Репликация MySQL требует жертв• Универсального решения не существует• Galera Cluster – неплохое решение при не очень большой нагрузке (Alexa rank in RU < 500)• Следите за сообществом
  43. 43. Вопросы?••••••
  44. 44. Спасибо за внимание!• С вами был Александр Чистяков• http://alexclear.livejournal.com• alexclear@gmail.com• http://github.com/alexclear
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×