Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Практический опытиспользования решенийрепликации MySQLАлександр ЧистяковbOombatehttp://alexclear.livejournal.com
Докладчик?• Разработчик серверных приложений• Администратор баз данных• Эксплуатационщик• Архитектор серверных приложений•...
Аудитория?• Разработчики серверных приложений• Администраторы баз данных• Эксплуатационщики• Архитекторы серверных приложе...
Цель• Традиционно СУБД является SPOF• Время восстановления после сбоя СУБДможет составлять несколько часов приотсутствии к...
MySQL? А имеет ли смысл?• Главный open source конкурент - PostgreSQL• Надо как-то оценить статистику использования• http:/...
Что мы хотим обеспечить?• Несколько 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_offs...
Split brain?• Пусть в кластере есть два узла• Или даже три• Между узлами нарушается связность, приэтом оба узла остаются в...
Метрики - встроенная• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость...
rubyrep• Trigger-based• Ruby-based• Из-за того, что основана на триггерах,изменения структуры базы требуютперезапуск репли...
Метрики - rubyrep• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость во...
Взаимная совместимость• Краткий ответ – лучше никогда не пытайтесь• Однажды я настроил rubyrep междусерверами со штатной m...
Galera Cluster for MySQL• Синхронная репликация• Производитель заявляет active-active multi-master• Поддержка MySQL 5.1, 5...
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+problems• http://www.xaprb.com/blog/2011/05...
Percona Replication Manager• Позиционируется как замена MMM• Основан на Pacemaker• Pacemaker предоставляет надежныйкоммуни...
PRM - настройка• Как быть с виртуальными IP-адресами, еслимашины в разных подсетях?• IPsec туннель, поверх него – GRE тунн...
PRM – split brain• PRM очень консервативен и делает выборнового мастера только один раз• Логика переключения IP ложится на...
Метрики - PRM• Простота настройки• Простота поддержки• Быстродействие• Простота восстановления после сбоя• Скорость восста...
Планы на будущее• Drizzle – очень большое внимание уделенорепликации:– формат Google protobuf– replication log – таблица I...
Выводы• Репликация MySQL требует жертв• Универсального решения не существует• Galera Cluster – неплохое решение при неочен...
Вопросы?••••••
Спасибо за внимание!• С вами был Александр Чистяков• http://alexclear.livejournal.com• alexclear@gmail.com• http://github....
Upcoming SlideShare
Loading in …5
×

Практический опыт использования решений репликации MySQL

1,076 views

Published on

  • Login to see the comments

Практический опыт использования решений репликации MySQL

  1. 1. Практический опытиспользования решенийрепликации MySQLАлександр ЧистяковbOombatehttp://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 transfermethod не 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+problems• http://www.xaprb.com/blog/2011/05/04/whats-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

×