35
Notice: MySQL is a registered trademark of Sun Microsystems, Inc. Сергей Петруня MariaDB Технологии Баз Данных 2016 Эволюция репликации в MySQL и MariaDB

Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

  • Upload
    others

  • View
    55

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc.

Сергей Петруня

MariaDB

Технологии Баз Данных 2016

Эволюция репликации

в MySQL и MariaDB

Page 2: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:302

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

● Master → Slave● Изменения вносятся на

мастере● И становятся видны на

реплике

● Multi-master● Можно писать/читать на

любом узле● Система разрешения или

недопущения конфликтов

M S

M M

Page 3: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:303

Методы репликации

● Логическая - передаются изменения данныx

db1.table1- 'pk-value', 'col1-old-value',123

+ 'pk-value', 'col1-new-value',456

update t1 set col1='col1-new-value' where...

● Физическая - Передаются изменения на диске

fileNNN.dat page NNN- 0xABCD

+0xCDEF

Page 4: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:304

Типы репликации в MySQL & Co

Master→Slave Multi-Master

Логическая

Физическая

MySQL-Репликация

• Statement-based

• Row-based

Galera ClusterPercona XtraDB

Cluster

MySQL Group Replication

InnoDB Cluster

MariaDB

Alibaba's InnoDB PhysicalReplication*

Amazon Aurora *

Page 5: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:305

Типы репликации в MySQL & Co

Master→Slave Multi-Master

Логическая

Физическая

MySQL-Репликация

• Statement-based

• Row-based

Galera ClusterPercona XtraDB

Cluster

MySQL Group Replication

InnoDB Cluster

MariaDB

Alibaba's InnoDB PhysicalReplication*

Amazon Aurora *

Page 6: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:306

Плюсы логической репликации

● mysqlbinlog > file.sql; vim file.sql

● Реплика не обязана быть точной копией мастера

● Другие индексы

● Под/над-множество данных

● --replicate-do-db,--replicate-ignore-db

● Возможность записи на реплике

● Реплика может быть не MySQL/MariaDB-сервером

● Hadoop, Binlog Server, и т. д.

Page 7: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:307

Минусы логической репликации

● Возможность рассинхронизации мастера и реплики

● Называется “Data drift”

● Множество причин

● Производительность

● Мастер: кроме БД, надо еще писать изменения в

binlog (синхронно!)

● Реплика: трудности с параллельным

применением изменений (=> отстает от мастера)

Page 8: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:308

Развитие репликации

● Multi-Source репликация

● Global Transaction ID (GTID)

● Параллельный slave

● ...

Page 9: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:309

Multi-Source репликация

● MariaDB 10.0, MySQL 5.7

● Используется для “сбора” данных

из нескольких источников

● Конфликты не возникают

● Реализации похожи

● Синтаксис разный

● MySQL: Bug #80843:Replication

filters per channel in Multi-Source

Replication

M1 M2

S

M1 M2

S

Page 10: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3010

Global Transaction ID

Репликация без GTID

● Каждая реплика помнит

(binlog_file, position) у своего мастера

● Трудно менять мастера

● box1.(file, position) → box2.( ? , ? )

● Как определить, какая из двух

реплик впереди?

● Отреплицировалась ли транзакция X

на реплику Y?

?

Page 11: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3011

Global Transaction ID

● Каждая транзакция имеет свой идентификатор

● MySQL: server_uuid:number

● MariaDB: domain_id-server_id-number

● Состояние сервера: описание множества транзакций на

этом сервере

● MySQL: server_uid1:1-100,server_uid2:33-45

● MariaDB: 1-1-1234,2-2-2345

● Позволяет

● Легкое переключение между серверами

● Проверить, иммется ли на сервере X транзакция Y

Page 12: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3012

Global Transaction ID

● MySQL 5.6 (февраль 2013)

● Первая реализация

● Много проблем

● Переключиться на GTID можно только одновременно

перезапустив всех участников репликации

● Мастер при запуске сканирует все свои логи

● ...

● MariaDB 10.0 (март 2014)

● Другая концепция GTID, не имеет многих проблем

● MySQL 5.7 (октябрь 2015)

● Многие проблемы исправлены

Page 13: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3013

Параллельная репликация

● Мастер выполняет транзакции

параллельно

● В бинлог пишет последовательно

● На реплике читают транзакции

● И применяют последовательно

● Неэффективное использование CPU

● Реплика отстает от мастера

(slave lag)

AB C

D

A

B

C

D

Page 14: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3014

Идея #1: Независимые изменения

MySQL 5.6 (2013)● Транзакции над разными базами

данных применяются параллельно

MariaDB 10.0 (2014), ● slave_parallel_mode=conservative:● Транзакции из разных domain_id

применяются параллельно

M1 M2

S

● Этого недостаточно

Page 15: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3015

Идея #2: Group commit на мастере

● Group commit with binary log – что это и что оно дает

A B C D

Работа с InnoDB

Готовы к коммиту

Запись в binlog

Коммит в InnoDB

Вместе готовык коммиту.Значит, не конфликтуют

Page 16: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3016

Идея #2: Group commit на мастере

● Мастер помечает в binlog совместно коммитнувшие

транзакции

● На реплике их выполняют параллельно

● Реализации

● MariaDB: 10.0 (март 2014)

--slave-parallel-mode=conservative

● MySQL 5.7 (октябрь 2015)

--slave-parallel-type=logical_clock

Page 17: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3017

Идея #3: агрессивная репликация

● A,B,C,D могут конфликтовать

● Все равно, пытаемся выполнить их

параллельно

● И пусть победит сильнейший при

конфликте более ранняя транзакция

имеет приоритет

● Более поздняя откатывается и

перезапускается.

● Из состояния “готов” коммитим c учетом

очередности.

AB C

D

A

B

C

D

Page 18: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3018

Идея #3: агрессивная репликация

● Только в MariaDB 10.1 (выпущена октябрь 2015)

● --slave-parallel-mode=optimistic● Если ждали на блокировке на мастере, и т д – не пытаться выполнить параллельно на реплике.

● --slave-parallel-mode=aggressive● Пытаться выполнить все

● Оно действительно работает?

● Нету ли “толкотни” и кучи конфликтов?

● Да, работает. Конфликты редки

● cм “MySQL/MariaDB Parallel Replication: inventory, use-

cases and limitations”, Jean-François Gagné@Booking.com

Page 19: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3019

Time Machine

оно же

Flashback

Page 20: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3020

MariaDB 10.2: Time machine/Flashback

● Row-based binary log:

db1.table1- 'pk-value', 'col1-old-value',123

+ 'pk-value', 'col1-new-value',456

● Идея: проиграть binlog “задом наперед”

insert_row(row) → delete_row(row)

delete_row(row) → insert_row(row)

update_row(old, new) → update_row(new, old)

● Патч к mysqlbinlog.

● Работает, пока нет DDL.

Page 21: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3021

MariaDB 10.2: Time machine/Flashback

Обработка DDL

● Создали? Удалим:

● CREATE TABLE → DROP TABLE

● ALTER TABLE ADD COLUMN → DROP COLUMN

● Удалили?

● Нужна поддержка на сервере

● Общая идея: вместо удаления переименовывать

● Потом можно будет вернуться

● Да, это замедлит сервер.

Page 22: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3022

Multi-master

репликация

Page 23: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3023

Типы репликации в MySQL & Co

Master→Slave Multi-Master

Логическая

Физическая

MySQL-Репликация

• Statement-based

• Row-based

Galera ClusterPercona XtraDB

Cluster

MySQL Group Replication

InnoDB Cluster

MariaDB

Alibaba's InnoDB PhysicalReplication*

Amazon Aurora *

Page 24: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3024

Galera Cluster

● Multi-master репликация для InnoDB

● Логическая репликация

● Не использует систему репликации MySQL

● (использует только форматы данных)

10.1+

Page 25: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3025

Принципы работы Galera

trx1

trx2

...

● Изменения делаются локально

● Отсылаются всем членам кластера на “сертификацию”

● Сертифицируются всеми узлами

● Порядок транзакций● Отсуствие конфликтов

● Фиксируются на всех узлах

● google://“Galera replication demystified”

Page 26: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3026

Свойства Galera

● Multi-Master!

● Синхронная репликация

● Для работы необходим кворум

● Ограничения на транзакционную изоляцию между

узлами

● Serializable не поддерживается

● Поддерживается Repeatable Read?

● См http://tinyurl.com/nncmz3x

● Ограничения на размер транзакций, и тд.

Page 27: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3027

MySQL Group Replication

● Очень похоже на Galera

● Реализация от Oracle

● Статус: Бета, плагин к MySQL 5.7

● InnoDB Cluster =

● MySQL Group replication

● + MySQL Router (для направления запросов и failover)

● + MySQL Shell (для управления кластером)

Page 28: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3028

Физическая

репликация

Page 29: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3029

Типы репликации в MySQL & Co

Master→Slave Multi-Master

Логическая

Физическая

MySQL-Репликация

• Statement-based

• Row-based

Galera ClusterPercona XtraDB

Cluster

MySQL Group Replication

InnoDB Cluster

MariaDB

Alibaba's InnoDB PhysicalReplication*

Amazon Aurora *

Page 30: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3030

Проблема слейва при физической репликации

1.ibd 2.ibdДиск

Buffer poolInnoDB

SQL

RAM

1.ibd 2.ibd

✘ ✘

Buffer poolInnoDB

SQL

RAM

Page 31: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3031

Физическая репликция

Традиционное решение

● Отсутствует

● Можно воспользоваться

DRBD (Distributed

Replicated Block Device)

● Пока работает мастер, реплика не может

работать *вообще*

● При смерти мастера запускается реплика

Page 32: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3032

Alibaba's physical InnoDB replication

● Доклад на Percona Live: http://tinyurl.com/gunnfuu

● Не выложено в open source

● Утверждают, что

● Реплика доступна для чтения

● Не бывает рассинхронизации (data drift)

● Отставание репликации меньше

● На мастере делается меньше IO

● ...

Page 33: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3033

Amazon Aurora

● Основана на технологиях Amazon для дисковых

устройств

● Доступна только как сервис в AWS

● Реплики доступны для чтения

● Marco Tusa @ Percona

проводил бенчмарки и

сравнение с Galera

Page 34: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3034

Выводы

● Репликация в MySQL и MariaDB развивается

● Логическая Master->Slave

● Параллельная

● GTID

● Multi-Source

● Мulti-Master

● Galera (→ MariaDB, → Percona)

● MySQL Group Replication

● Появляется и физическая

● Amazon Aurora, Alibaba?

Page 35: Эволюция Репликации в MySQL и MariaDB · Multi-Source репликация MariaDB 10.0, MySQL 5.7 Используется для “сбора” данных

Notice: MySQL is a registered trademark of Sun Microsystems, Inc. 19:07:3035

Спасибо за внимание!