SlideShare uma empresa Scribd logo
1 de 46
Как устроена 
MySQL репликация 
Андрей Аксёнов, Sphinx 
v.1.1
Зачем/кому этот доклад? 
• Уходите, если вы знаете, как это всё устроено и 
работает внутри 
– Ключевые слова = PSE, binary log, relay log, SBR, RBR, 
mixed, master, slave, log position, log filters, Tungsten, Galera, 
GTID, … 
• Оставайтесь, если хочется чуток усилить понимание 
– Понимание устройства = настройка и починка с открытыми 
глазами, например
Чего щаз НЕ будет?
Вот такого: 
• мастер: 
[mysqld], log-bin=binlog, server-id=1, остановить 
запись, SHOW MASTER STATUS 
• слейв: 
[mysqld], server-id=2 
CHANGE MASTER TO …_HOST/USER/PASS=…, 
MASTER_LOG_FILE=‘binlog.000001’, 
MASTER_LOG_POS=1234; 
START SLAVE;
I don’t know, but I’ve been told 
• Ну, т.е. не будет конкретных SQL statements и прочих 
code snippets, совсем ;) 
• Думаю, таких обучалок полно в интернетах 
• Уверен, синтаксис есть в документации 
• Я же хочу слегка объяснить, как это работает внутри, 
что это за master_log_file, _pos и всё такое
Как оно бывает 
“вообще”?
Что такое т.н. репликация? 
• Репликация = копирование изменений (changes, 
writes, transactions…) между копиями БД 
• Бывает разных видов, чем может отличаться? 
– Степень синхронизации (sync, async, semisync) 
– Количество серверов записи (M/S, M/M) 
– Формат изменений (SBR, RBR, mixed) 
– Теоретически, модель передачи изменений (push, pull) 
• Fun fact, помогает скейлить чтение
Про синхронизацию 
• Разные гарантии наличия и доступности 
• Sync commit = local commit + remote commit 
– Новые данные и скопированы и доступны (другим 
операциям) на N разных серверах 
• Async commit = local commit 
– Никаких (!) дополнительных гарантий 
• Semi-sync commit = local commit + remote receive-ack 
– Доступны на 1 сервере, но скопированы уже в N
Про сервера (для) записи 
• Master-slave, изменения принимает 1 сервер 
• Master-master, изменения принимают N серверов 
– Внезапно конфликты, “сверка часов”, все эти дела 
– При этом не обязан помогать write bandwidth! 
• Master-slave + routing, фактически 1 сервер, но для 
приложения их как бы N 
• Читать можно со всех N точек всегда
Про формат изменений 
• Можно передавать сами запросы 
– UPDATE table SET x=123 WHERE id=456 
– SBR, statement based replication 
• Можно передавать измененные строчки 
– {“id”:456, “x”:123} (есс-но в бинарном формате) 
– RBR, row based replication 
• И так и эдак плохо! Можно смешивать, mixed
Про модель распространения 
• Push-based = кто чего изменил, тот и рассылает 
• Pull-based = кто хочет обновлений, тот их и качает 
• Вроде (вроде) push-based в мире СУБД таки даже 
бывает, но нечасто
Как сделано в 
MySQL?
Что такое т.н. MySQL? 
• MySQL = общий логический слой 
– сеть, оптимизатор, кеши, бинлог, репликация… 
• Конкретный физический слой = т.н. PSE 
– Включая сразу встроенные InnoDB, MyISAM и т.п. 
– Транзакционные WAL, если есть, живут там 
• А вот репликация = именно MySQL 
– т.е. не зависит и не требует ничего от движка 
– т.е. можно менять движок на лету, например
Что с репликацией-то? 
• Строго master-slave, pull-based 
• 4.1 = async, SBR 
• 5.1 = +RBR, +mixed 
• 5.6 = +semi-sync, +slave, +GTID 
• Говорят, божественный NDB cluster = sync, master-master, 
99.(9)% доступность и т.п., но есть нюанс...
Чем занимается master 
• Принимает запросы-изменения, как обычно 
• Фиксирует транзакции, как обычно 
• Вдобавок, пишет binary logs (тупо файлы) 
• Вдобавок, умеет рассылать их по сетке 
• И… всё
Чем занимается slave 
• Изменения на слейв лучше бы не слать… 
– Ну, если вы не хотите всё красиво сломать!!! 
• Slave I/O thread качает удаленные binary logs в 
локальные relay logs 
• Slave SQL thread проигрывает relay logs 
• Отслеживает позиции “там” и “здесь”, кладет их в 
master/relay log info
Самурай без меча 
• INSERT INTO mytest VALUES (123,’hello’) 
• Приложение-писатель 
=> таблица на мастере mysqld 
=> приложение-читатель
Самурай с мечом 
• INSERT INTO mytest VALUES (123,’hello’) 
• Приложение-писатель 
=> таблица на мастере mysqld 
=> binary log на мастере 
=> relay log на слейве 
=> таблица на слейве mysqld 
=> приложение-читатель
Что пишется в binary log? 
• Зависит от настроек SBR/RBR/mixed 
• Представь себя базой данных!!! 
• UPDATE users SET x=123 WHERE id=456 
– Плюс-минус пофигу 
• UPDATE users SET bonus=bonus+100 
– Запрос = 32 байта, пользователей = ууу, ааа 
– Надо писать текст запроса, SBR, statement based
Что пишется в binary log? 
• UPDATE users SET disabled=1 WHERE last_login < 
UNIX_TIMESTAMP(NOW())-100*86400 
– Для краткости надо бы сам запрос, но…
Что пишется в binary log? 
• UPDATE users SET disabled=1 WHERE last_login < 
UNIX_TIMESTAMP(NOW())-100*86400 
– Время никогда не синхронно! 
– Опа, реплика разошлась с мастером! 
– Опа, надо бы строчки, а не запрос 
– И вот мы изобрели RBR, row based replication 
• А ещё бывает uuid(), found_rows(), rand(), разные UDF, 
триггер на апдейт auto_increment поля, …
Чем хорошо/плохо? 
• SBR 
– Хорошо: меньше данных, как мелкий бонус audit trail 
– Плохо: недетерминизм (rand()/now()), перевычисление 
сложных запросов на всех слейвах 
• RBR 
– Хорошо: детерминизм, реплицировать можно всё 
– Плохо: куча данных в логе, не отличить границы stmt 
• Mixed пытается комибинировать хорошее
Random Fun Facts
В случайном порядке 
• Мастер многопоточен, а слейв нет 
• Состояние слейва => имя и позиция в файле мастера 
– Ну, если нету GTID
В случайном порядке 
• Мастер многопоточен, а слейв нет 
• Состояние слейва => имя и позиция в файле мастера 
– Ну, если нету GTID 
• RBR по умолчанию => полные before/after row image
В случайном порядке 
• Мастер многопоточен, а слейв нет 
• Состояние слейва => имя и позиция в файле мастера 
– Ну, если нету GTID 
• RBR по умолчанию => полные before/after row image 
– Ахеренно для внешних читалок!!! 
– Настраиваемо в 5.6, binlog_row_image (но по дефолту full, а 
не какие-нибудь minimal или noblob)
Как болеет Гондурас?
В случайном порядке 
• У слейва протух лог, или слетела позиция, или... 
• Слейв разошелся с мастером 
• Слейв лагает и не может догнать мастера 
• Слейв НЕ лагает, но кто-то жахнул DROP TABLE 
• Мастер забил логами весь 10 PB облачный диск 
• Мастер забил логами весь 10 Gbps интерфейс 
• Мастер сдох и надо уже что-то решать
Что делать-то! 
• Традиционно не верим дефолтам 
• Придется, ну, настраивать 
• Лучше сразу, чем потом разбирать фарш
Что делать, если… 
• У слейва протух лог, или слетела позиция, или... 
• Слейв разошелся с мастером 
– Смотреть данные, восстанавливать позиции рукой, ооой 
– SHOW BINARY LOGS, SHOW BINLOG EVENTS 
– Очевидно, эта часть жизни куда проще с GTID
Что делать, если… 
• Слейв лагает и не может догнать мастера 
– Если разово, попереналивать данные, позиции рукой… ;) 
– Если хронически, сервер толще 
– Или, внезапно, “конкуренция”! Tungsten Replicator – 
многопоточный, экспорт в другие системы, итп
Что делать, если… 
• Слейв НЕ лагает, но кто-то жахнул DROP TABLE 
– А что, вы думали, реплика == бэкап? Тюю! 
– Надо было 5.6 delayed replication или pt-slave-delay 
– Теоретически (теоретически), логи “от сотворения мира” 
можно проиграть до нужной точки (практически на самую 
нужную таблицу их нет)
Что делать, если… 
• Мастер забил логами весь 10 PB облачный диск 
• Мастер забил логами весь 10 Gbps интерфейс 
– Молитва и пост! 
– В смысле фильтрация на обоих сторонах 
– {binlog|replicate}_{do|ignore}_db 
– Внезапно жопа! USE A; UPDATE B.table SET x=1; 
– Молитва и пост 
Что делать, если… 
• Мастер сдох и надо уже что-то решать 
– Эммм, ну в общем автопилота нету, всё ручками 
– Скрипты на bash!!! 
• Ужасно хочется master-master!!! 
– Обещают отсутствие SPOF, отсутствие slave lag, и т.д. 
– Galera, оно же Percona/MariaDB Cluster 
– Помни про min latency, conflict resolution итп
Еще фокусы
Что плохо, то и хорошо!!! 
• Репликация то в MySQL есть… 
• …кластерных проверок, автоматизации нету 
• Плохо, что выборы мастера и прочее вручную 
• Хорошо, что можно вручную же лепить всякое
Фокус 1, master/master/knee 
• Пусть сервер A будет слейвом для B 
• Пусть сервер B будет слейвом для A 
• Если всё взорвется, нам не отвечать!!! 
• Бонусные очки за длинный circlejerk 
– A => B => C => D => … => A
Фокус 2, catch-all slave 
• Слейв может читать с нескольких мастеров 
• Например, тащим часть таблиц под аналитику 
• Например, сервер со всеми-всеми бэкапами 
• NB, никакой защиты от конфликтов, автопроверок 
• 1 таблица, 2 мастера = I enjoy геморрой
Фокус 3, подменяем всякое 
• Репликация живет на логическом уровне 
• Можно интересно чудить! 
• innoDB => MyISAM для поиска (true story) 
• innoDB => archive для компактного бэкапа 
• Креативное изменение схемы через репликацию 
• Параноидальный апгрейд версии через репликацию
Итого
“Итоги подведём, упи** папу..” 
• Репликация в целом – бывает вот такая 
– Типа мы узнали (надеюсь) ряд новых, интересных, длинных 
и применимых к любой распределенной (!) системе 
терминов 
• Репликация в MySQL – устроена вот так 
– Типа мы узнали (надеюсь) чуток подробностей, и теперь не 
так страшно нырять в это дело 
• Типичные беды/фокусы – вот такие
Итого – репликация 
это несложно* 
* Исключая малограмотных и хипстер-программистов.
Вопросы? 
Для стеснительных: 
shodan@sphinxsearch.com

Mais conteúdo relacionado

Mais procurados

My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Ontico
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Ontico
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Rubyguest5f907e
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 

Mais procurados (20)

My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Ruby
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 

Semelhante a Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)

Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Ontico
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодAndrew Aksyonoff
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQLBadoo Development
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Ontico
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Unigine Corp.
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
libfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаlibfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаLeonid Yuriev
 
Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL DatabaseAndrey Akulov
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийFuenteovejuna
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Ontico
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 

Semelhante a Как устроена MySQL-репликация, Андрей Аксенов (Sphinx) (20)

Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
High Load
High LoadHigh Load
High Load
 
libfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаlibfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпа
 
Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL Database
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья Космодемьянский
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
MySQL 101
MySQL 101MySQL 101
MySQL 101
 

Mais de Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Mais de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)

  • 1. Как устроена MySQL репликация Андрей Аксёнов, Sphinx v.1.1
  • 2. Зачем/кому этот доклад? • Уходите, если вы знаете, как это всё устроено и работает внутри – Ключевые слова = PSE, binary log, relay log, SBR, RBR, mixed, master, slave, log position, log filters, Tungsten, Galera, GTID, … • Оставайтесь, если хочется чуток усилить понимание – Понимание устройства = настройка и починка с открытыми глазами, например
  • 3. Чего щаз НЕ будет?
  • 4. Вот такого: • мастер: [mysqld], log-bin=binlog, server-id=1, остановить запись, SHOW MASTER STATUS • слейв: [mysqld], server-id=2 CHANGE MASTER TO …_HOST/USER/PASS=…, MASTER_LOG_FILE=‘binlog.000001’, MASTER_LOG_POS=1234; START SLAVE;
  • 5. I don’t know, but I’ve been told • Ну, т.е. не будет конкретных SQL statements и прочих code snippets, совсем ;) • Думаю, таких обучалок полно в интернетах • Уверен, синтаксис есть в документации • Я же хочу слегка объяснить, как это работает внутри, что это за master_log_file, _pos и всё такое
  • 6. Как оно бывает “вообще”?
  • 7. Что такое т.н. репликация? • Репликация = копирование изменений (changes, writes, transactions…) между копиями БД • Бывает разных видов, чем может отличаться? – Степень синхронизации (sync, async, semisync) – Количество серверов записи (M/S, M/M) – Формат изменений (SBR, RBR, mixed) – Теоретически, модель передачи изменений (push, pull) • Fun fact, помогает скейлить чтение
  • 8. Про синхронизацию • Разные гарантии наличия и доступности • Sync commit = local commit + remote commit – Новые данные и скопированы и доступны (другим операциям) на N разных серверах • Async commit = local commit – Никаких (!) дополнительных гарантий • Semi-sync commit = local commit + remote receive-ack – Доступны на 1 сервере, но скопированы уже в N
  • 9. Про сервера (для) записи • Master-slave, изменения принимает 1 сервер • Master-master, изменения принимают N серверов – Внезапно конфликты, “сверка часов”, все эти дела – При этом не обязан помогать write bandwidth! • Master-slave + routing, фактически 1 сервер, но для приложения их как бы N • Читать можно со всех N точек всегда
  • 10. Про формат изменений • Можно передавать сами запросы – UPDATE table SET x=123 WHERE id=456 – SBR, statement based replication • Можно передавать измененные строчки – {“id”:456, “x”:123} (есс-но в бинарном формате) – RBR, row based replication • И так и эдак плохо! Можно смешивать, mixed
  • 11. Про модель распространения • Push-based = кто чего изменил, тот и рассылает • Pull-based = кто хочет обновлений, тот их и качает • Вроде (вроде) push-based в мире СУБД таки даже бывает, но нечасто
  • 13. Что такое т.н. MySQL? • MySQL = общий логический слой – сеть, оптимизатор, кеши, бинлог, репликация… • Конкретный физический слой = т.н. PSE – Включая сразу встроенные InnoDB, MyISAM и т.п. – Транзакционные WAL, если есть, живут там • А вот репликация = именно MySQL – т.е. не зависит и не требует ничего от движка – т.е. можно менять движок на лету, например
  • 14. Что с репликацией-то? • Строго master-slave, pull-based • 4.1 = async, SBR • 5.1 = +RBR, +mixed • 5.6 = +semi-sync, +slave, +GTID • Говорят, божественный NDB cluster = sync, master-master, 99.(9)% доступность и т.п., но есть нюанс...
  • 15. Чем занимается master • Принимает запросы-изменения, как обычно • Фиксирует транзакции, как обычно • Вдобавок, пишет binary logs (тупо файлы) • Вдобавок, умеет рассылать их по сетке • И… всё
  • 16. Чем занимается slave • Изменения на слейв лучше бы не слать… – Ну, если вы не хотите всё красиво сломать!!! • Slave I/O thread качает удаленные binary logs в локальные relay logs • Slave SQL thread проигрывает relay logs • Отслеживает позиции “там” и “здесь”, кладет их в master/relay log info
  • 17. Самурай без меча • INSERT INTO mytest VALUES (123,’hello’) • Приложение-писатель => таблица на мастере mysqld => приложение-читатель
  • 18. Самурай с мечом • INSERT INTO mytest VALUES (123,’hello’) • Приложение-писатель => таблица на мастере mysqld => binary log на мастере => relay log на слейве => таблица на слейве mysqld => приложение-читатель
  • 19. Что пишется в binary log? • Зависит от настроек SBR/RBR/mixed • Представь себя базой данных!!! • UPDATE users SET x=123 WHERE id=456 – Плюс-минус пофигу • UPDATE users SET bonus=bonus+100 – Запрос = 32 байта, пользователей = ууу, ааа – Надо писать текст запроса, SBR, statement based
  • 20. Что пишется в binary log? • UPDATE users SET disabled=1 WHERE last_login < UNIX_TIMESTAMP(NOW())-100*86400 – Для краткости надо бы сам запрос, но…
  • 21.
  • 22. Что пишется в binary log? • UPDATE users SET disabled=1 WHERE last_login < UNIX_TIMESTAMP(NOW())-100*86400 – Время никогда не синхронно! – Опа, реплика разошлась с мастером! – Опа, надо бы строчки, а не запрос – И вот мы изобрели RBR, row based replication • А ещё бывает uuid(), found_rows(), rand(), разные UDF, триггер на апдейт auto_increment поля, …
  • 23. Чем хорошо/плохо? • SBR – Хорошо: меньше данных, как мелкий бонус audit trail – Плохо: недетерминизм (rand()/now()), перевычисление сложных запросов на всех слейвах • RBR – Хорошо: детерминизм, реплицировать можно всё – Плохо: куча данных в логе, не отличить границы stmt • Mixed пытается комибинировать хорошее
  • 25. В случайном порядке • Мастер многопоточен, а слейв нет • Состояние слейва => имя и позиция в файле мастера – Ну, если нету GTID
  • 26.
  • 27. В случайном порядке • Мастер многопоточен, а слейв нет • Состояние слейва => имя и позиция в файле мастера – Ну, если нету GTID • RBR по умолчанию => полные before/after row image
  • 28.
  • 29. В случайном порядке • Мастер многопоточен, а слейв нет • Состояние слейва => имя и позиция в файле мастера – Ну, если нету GTID • RBR по умолчанию => полные before/after row image – Ахеренно для внешних читалок!!! – Настраиваемо в 5.6, binlog_row_image (но по дефолту full, а не какие-нибудь minimal или noblob)
  • 31. В случайном порядке • У слейва протух лог, или слетела позиция, или... • Слейв разошелся с мастером • Слейв лагает и не может догнать мастера • Слейв НЕ лагает, но кто-то жахнул DROP TABLE • Мастер забил логами весь 10 PB облачный диск • Мастер забил логами весь 10 Gbps интерфейс • Мастер сдох и надо уже что-то решать
  • 32. Что делать-то! • Традиционно не верим дефолтам • Придется, ну, настраивать • Лучше сразу, чем потом разбирать фарш
  • 33. Что делать, если… • У слейва протух лог, или слетела позиция, или... • Слейв разошелся с мастером – Смотреть данные, восстанавливать позиции рукой, ооой – SHOW BINARY LOGS, SHOW BINLOG EVENTS – Очевидно, эта часть жизни куда проще с GTID
  • 34. Что делать, если… • Слейв лагает и не может догнать мастера – Если разово, попереналивать данные, позиции рукой… ;) – Если хронически, сервер толще – Или, внезапно, “конкуренция”! Tungsten Replicator – многопоточный, экспорт в другие системы, итп
  • 35. Что делать, если… • Слейв НЕ лагает, но кто-то жахнул DROP TABLE – А что, вы думали, реплика == бэкап? Тюю! – Надо было 5.6 delayed replication или pt-slave-delay – Теоретически (теоретически), логи “от сотворения мира” можно проиграть до нужной точки (практически на самую нужную таблицу их нет)
  • 36. Что делать, если… • Мастер забил логами весь 10 PB облачный диск • Мастер забил логами весь 10 Gbps интерфейс – Молитва и пост! – В смысле фильтрация на обоих сторонах – {binlog|replicate}_{do|ignore}_db – Внезапно жопа! USE A; UPDATE B.table SET x=1; – Молитва и пост 
  • 37. Что делать, если… • Мастер сдох и надо уже что-то решать – Эммм, ну в общем автопилота нету, всё ручками – Скрипты на bash!!! • Ужасно хочется master-master!!! – Обещают отсутствие SPOF, отсутствие slave lag, и т.д. – Galera, оно же Percona/MariaDB Cluster – Помни про min latency, conflict resolution итп
  • 39. Что плохо, то и хорошо!!! • Репликация то в MySQL есть… • …кластерных проверок, автоматизации нету • Плохо, что выборы мастера и прочее вручную • Хорошо, что можно вручную же лепить всякое
  • 40. Фокус 1, master/master/knee • Пусть сервер A будет слейвом для B • Пусть сервер B будет слейвом для A • Если всё взорвется, нам не отвечать!!! • Бонусные очки за длинный circlejerk – A => B => C => D => … => A
  • 41. Фокус 2, catch-all slave • Слейв может читать с нескольких мастеров • Например, тащим часть таблиц под аналитику • Например, сервер со всеми-всеми бэкапами • NB, никакой защиты от конфликтов, автопроверок • 1 таблица, 2 мастера = I enjoy геморрой
  • 42. Фокус 3, подменяем всякое • Репликация живет на логическом уровне • Можно интересно чудить! • innoDB => MyISAM для поиска (true story) • innoDB => archive для компактного бэкапа • Креативное изменение схемы через репликацию • Параноидальный апгрейд версии через репликацию
  • 44. “Итоги подведём, упи** папу..” • Репликация в целом – бывает вот такая – Типа мы узнали (надеюсь) ряд новых, интересных, длинных и применимых к любой распределенной (!) системе терминов • Репликация в MySQL – устроена вот так – Типа мы узнали (надеюсь) чуток подробностей, и теперь не так страшно нырять в это дело • Типичные беды/фокусы – вот такие
  • 45. Итого – репликация это несложно* * Исключая малограмотных и хипстер-программистов.