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

Содержание

Слайд 2

Докладчик?

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

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

Слайд 3

Аудитория?

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

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

Слайд 4

Цель

Традиционно СУБД является SPOF
Время восстановления после сбоя СУБД может составлять несколько часов

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

Слайд 5

MySQL? А имеет ли смысл?

Главный open source конкурент - PostgreSQL
Надо как-то оценить

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-сервера клиенты работают с

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

Слайд 7

Платформа

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

Платформа Хостинг среднего ценового диапазона Подключение к сети 100Мбит Машины в одном
через WAN подключение тоже работало

Слайд 8

Что такое «репликация»?

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

Что такое «репликация»? Процесс синхронизации нескольких копий данных Репликация возможна на нескольких
устройства
Уровень строк в таблице базы данных
Уровень SQL-запросов

Слайд 9

Виды репликации

Синхронная (копии данных на нодах гарантированно одинаковые)
Асинхронная (операция завершается раньше,

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

Слайд 10

Метрики

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

Метрики Простота настройки Простота поддержки Быстродействие Простота восстановления после сбоя Скорость восстановления

Слайд 11

На уровне блочного устройства

MySQL + DRBD + Heartbeat
Упомянуто в официальной документации
DRBD –

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

Слайд 12

На уровне блочного устройства

Минусы:
Для нашей платформы не очень подходит (очень медленно)
Одна из

На уровне блочного устройства Минусы: Для нашей платформы не очень подходит (очень
нод полностью простаивает
Heartbeat устарел, и его кодом никто не владеет
Плюсы:
Донастройка MySQL не нужна

Слайд 13

Метрики - DRBD

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

Метрики - DRBD Простота настройки Простота поддержки Быстродействие Простота восстановления после сбоя
восстановления
Целостность данных (sync/async ?)

Слайд 14

На уровне базы данных

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

На уровне базы данных Встроенная в MySQL rubyrep Galera Cluster for MySQL Tungsten Replicator MMM PRM

Слайд 15

Встроенная в MySQL

до версии 5.1 – только statement-based
5.1 и выше – row-based
Плюсы:
Может

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

Слайд 16

Встроенная в MySQL

Минусы
Информация о состоянии slave записывается в обычный файл – может

Встроенная в 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
Выход:

Встроенная в MySQL Можно настроить master-master и даже кольцевую репликацию auto_increment_increment, auto_increment_offset
На разных узлах писать только в разные таблицы

Слайд 18

Split brain?

Пусть в кластере есть два узла
Или даже три
Между узлами нарушается связность,

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

Слайд 19

Метрики - встроенная

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

Метрики - встроенная Простота настройки Простота поддержки Быстродействие Простота восстановления после сбоя
восстановления
Целостность данных

Слайд 20

rubyrep

Trigger-based
Ruby-based
Из-за того, что основана на триггерах, изменения структуры базы требуют перезапуск репликации
Несовместима

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

Слайд 21

Метрики - rubyrep

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

Метрики - rubyrep Простота настройки Простота поддержки Быстродействие Простота восстановления после сбоя
восстановления
Целостность данных

Слайд 22

Взаимная совместимость

Краткий ответ – лучше никогда не пытайтесь
Однажды я настроил rubyrep между

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

Слайд 23

Galera Cluster for MySQL

Синхронная репликация
Производитель заявляет active-active multi-master
Поддержка MySQL 5.1, 5.5
InnoDB only

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

Слайд 24

Galera Cluster - установка

MySQL w/wsrep patch .deb/.rpm
wsrep provider .deb/.rpm
По умолчанию wsrep provider

Galera Cluster - установка MySQL w/wsrep patch .deb/.rpm wsrep provider .deb/.rpm По
отключен
Поменять установки в файле /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

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 – можно устанавливать динамически в случае, если

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 –

Galera Cluster – передача состояния mysqldump – обычный обмен дампом (очень медленно)
передача самих файлов DB, гораздо быстрее
В момент передачи состояния от ноды к ноде кластер недоступен

Слайд 28

Galera Cluster - производительность

Один и тот же дамп базы ~3 Gb
Два узла

Galera Cluster - производительность Один и тот же дамп базы ~3 Gb
MySQL, один арбитратор
100Мб сеть, сервера в одном ДЦ
60 мин – заливка дампа в кластер
7 мин – заливка дампа на отдельно стоящий сервер

Слайд 29

Galera Cluster - балансировка

Блокировка на уровне строк – можно попробовать использовать балансировщик

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

Слайд 30

Galera Cluster – split brain

Если узла только два, при нарушении связности оба

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

Слайд 31

Galera Cluster - проблемы

При конкурентных вставках в одну и ту же таблицу

Galera Cluster - проблемы При конкурентных вставках в одну и ту же
возможен deadlock (и у нас он возникал постоянно)
Варианты:
Переписать бизнес-логику
Поменять балансировщик
(кстати, Python скрипт с предыдущего слайда зависал)

Слайд 32

Балансировщик уровня приложения - yybal

Написан на python/greenlets
Не готов для публичного использования
Перенаправляет запросы

Балансировщик уровня приложения - yybal Написан на python/greenlets Не готов для публичного
с учетом их смысла (все запросы на изменение данных идут на один и тот же узел)

Слайд 33

Galera Cluster – проблемы 2

ID у суррогатных ключей при вставке перескакивал на

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

Слайд 34

Galera Cluster – проблемы 3

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

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

Слайд 35

Метрики - Galera

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

Метрики - Galera Простота настройки Простота поддержки Быстродействие Простота восстановления после сбоя
восстановления
Целостность данных

Слайд 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/

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

Percona Replication Manager

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

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

Слайд 38

PRM - настройка

Как быть с виртуальными IP-адресами, если машины в разных подсетях?
IPsec

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

Слайд 39

PRM – split brain

PRM очень консервативен и делает выбор нового мастера только

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

Слайд 40

Метрики - PRM

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

Метрики - PRM Простота настройки Простота поддержки Быстродействие Простота восстановления после сбоя
восстановления
Целостность данных (semisync?)

Слайд 41

Планы на будущее

Drizzle – очень большое внимание уделено репликации:
формат Google protobuf
replication log

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

Слайд 42

Выводы

Репликация MySQL требует жертв
Универсального решения не существует
Galera Cluster – неплохое решение при

Выводы Репликация MySQL требует жертв Универсального решения не существует Galera Cluster –
не очень большой нагрузке (Alexa rank in RU < 500)
Следите за сообществом

Слайд 43

Вопросы?


Вопросы?
Имя файла: Практический-опыт-использования-решений-репликации-MySQL.pptx
Количество просмотров: 115
Количество скачиваний: 0