Top Banner
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 12 1 Новые возможности репликации MySQL 5.6 Konstantin Osipov А также: Luís Soares Sven Sandberg Moscow MySQL User Group
54
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Новые возможности репликации MySQL 5.6

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 121

Новые возможности репликации MySQL 5.6Konstantin Osipov

А также:Luís Soares Sven Sandberg

MoscowMySQL User Group

Page 2: Новые возможности репликации MySQL 5.6

2

Содержание

История репликации в MySQL

Причины введения GTID

Устройство и использование GTID

Практика повышения отказоустойчивости

Page 3: Новые возможности репликации MySQL 5.6

3

Введение

MySQL Master сервер– Изменяет данные

– Логирует изменения (Events) в файл (Binary Log)

MySQL Slave сервер

– Получает изменения с мастера

– Проигрывает изменения на данных slave server'а

Компоненты репликации в MySQL

Page 4: Новые возможности репликации MySQL 5.6

4

Введение

The Binary Log– File based log that records the changes on the master.

– Statement or Row based format (may be intermixed).

– Split into transactional groups.

BEGIN ...Ev1 Ev2 COMMIT

MySQL Replication Components: Binary Log

Binary Log FileBinary Log File

BEGIN ...Ev1 Ev2 COMMIT

Event Layout ona Binary Log File

Page 5: Новые возможности репликации MySQL 5.6

5

ВведениеMySQL Replication Components: Binary Log

Binary Log

Binarylogfiles

Index

Under the Hood

Binary log files: mysql-bin.000001, mysql-bin.000002, …

- данные, events.

Index: mysql-bin.index

- Индекс по бинлогу – для быстрого поиска по

Log coordinate:

- binlog file name + event offset in the file (3.23.15+)

- Global Transaction Identifiers (5.6+)

Page 6: Новые возможности репликации MySQL 5.6

6

Session Dump

Binary log

I/O SQL

Relay log

SlaveMaster

SessionSession

Архитектура репликации в MySQLMySQL Replication Architecture

Masterinfo

Relayloginfo

I/O и SQL Thread Replication Metadata хранится в файлах. В MySQL 5.6 метаданные могут храниться в InnoDB.

Page 7: Новые возможности репликации MySQL 5.6

7

Background

Asynchronous Replication (MySQL 3.23.15+)– Transactions are committed and externalized without interaction with

the replication layer.

– Events are propagated after the commit operation is acknowledged.

– Faster but vulnerable to lost updates on server crashes and inconsistency.

– Built into the server.

Semi-synchronous Replication (MySQL 5.5+)

– Master commits transaction but waits until one slave acknowledges having received and stored the event before replying to the client.

Changes Propagation

Page 8: Новые возможности репликации MySQL 5.6

8

Scaling Out Reads

Введение

Master

Slave

MySQL Replication Use Cases

Master

Slave

Client

SlaveSlave

Writes

Reads

Master

Relay

Slave N

One Master, One Slave

RelaySlave

Page 9: Новые возможности репликации MySQL 5.6

9

GTID: мотивацияMotivation: Seamless Failover

Сервера иногда крэшатся (сбой оборудования, баг, метеорит...) Slave должен быть “повышен” в мастера (promotion) Способ индексации событий в бинлоге является КЛЮЧЕВЫМ!

– MySQL 3.23+: FILENAME+OFFSET

● Локален для сервера, абсолютен

– MySQL 5.6+: TRANSACTION IDENTIFIERS

● Глобальный, логический id, генерируется автоматически

Page 10: Новые возможности репликации MySQL 5.6

10

GTID: внутреннее устройствоGlobal Transaction Identifiers

Generate a global transaction identifier on commit:– server_uuid:number

a61678ba­4889­4279­9e58­45ba840af334:1

– server_uuid identifies the server; globally unique

– number is incremented by 1 for each transaction on this server

Page 11: Новые возможности репликации MySQL 5.6

11

A

(master)

B

(slave)

C

(slave)

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия

Page 12: Новые возможности репликации MySQL 5.6

12

A

(master)

B

(slave)

C

(slave)

Crash!

GTID: автоматический failoverMotivation: Seamless Failover

Enable fail-over if master crashes Пример 1: иерархия

Page 13: Новые возможности репликации MySQL 5.6

13

A

(crashed)

B

C

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия

Page 14: Новые возможности репликации MySQL 5.6

14

A

(crashed)

B

(new master)

C

(slave)

fail-over

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия

Page 15: Новые возможности репликации MySQL 5.6

15

A

(master)

B

(masterand slave)

C

(slave)

GTID: автоматический fail-overMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия Пример 2: цепочка

Page 16: Новые возможности репликации MySQL 5.6

16

A

(master)

B

(masterand slave)

C

(slave)

Crash!

GTID: автоматический failoverMotivation: Seamless Failover

Enable fail-over if master crashes Пример 1: иерархия Пример 2: цепочка

Page 17: Новые возможности репликации MySQL 5.6

17

A B

(crashed)

C

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия Пример 2: цепочка

Page 18: Новые возможности репликации MySQL 5.6

18

A

(new master)

B

(crashed)

C

(slave)

fail-over

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия Пример 2: цепочка

Page 19: Новые возможности репликации MySQL 5.6

19

B C

A D

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия Пример 2: цепочка Пример 3: кольцо

Page 20: Новые возможности репликации MySQL 5.6

20

B C

A DCrash!

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия Пример 2: цепочка Пример 3: кольцо

Page 21: Новые возможности репликации MySQL 5.6

21

B C

A D

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия Пример 2: цепочка Пример 3: кольцо

Page 22: Новые возможности репликации MySQL 5.6

22

B C

A D

fail-over

GTID: автоматический failoverMotivation: Seamless Failover

Процедура failover при выходе из строя мастера Пример 1: иерархия Пример 2: цепочка Пример 3: кольцо

Page 23: Новые возможности репликации MySQL 5.6

23

GTID: автоматический failoverMotivation: Seamless Failover

A

B

C

D

E

F

Enable fail-over if master crashes Пример 1: иерархия Пример 2: цепочка Пример 3: кольцо Пример 4: произвольная

топология

Page 24: Новые возможности репликации MySQL 5.6

24

GTID и binlogGlobal Transaction Identifiers

global transaction identifier создаётся в момент commitа:– server_uuid:number

a61678ba­4889­4279­9e58­45ba840af334:1

– server_uuid identifies the server; globally unique

– number is incremented by 1 for each transaction on this server

Write GTID to binary log

GTID BEGIN ...Ev1 Ev2 COMMIT

Transaction 1

GTID BEGIN ...Ev1 Ev2 COMMIT

Transaction 2

Page 25: Новые возможности репликации MySQL 5.6

25

Global Transaction IdentifiersGlobal Transaction Identifiers

Generate a global transaction identifier on commit:– server_uuid:number

a61678ba­4889­4279­9e58­45ba840af334:1

– server_uuid identifies the server; globally unique

– number is incremented by 1 for each transaction on this server

Write GTID to binary log

Preserve GTID when slave re-executes transaction

Page 26: Новые возможности репликации MySQL 5.6

26

GTID: новый протокол репликацииNew protocol

– Реплика посылает мастеру:диапазон транзакций, которые были выполнены на реплике

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

(slave)

id1,trx1,id2,trx2

(master)

id1,trx1,id2,trx2,id3,trx3

binlog

A 2. id3, trx3, …

1. id1…id2 binlog

B

Page 27: Новые возможности репликации MySQL 5.6

27

GTID: новый протокол репликацииNew protocol used in failover

Пример 1: иерархия

A

(crashed)(master)

Aid1,trx1,id2,trx2,id3,trx3

binlog

(slave)

Cid1,trx1

binlogCrash! (slave)

id1,trx1,id2,trx2 B

binlog

Page 28: Новые возможности репликации MySQL 5.6

28

GTID: новый протокол репликацииNew protocol used in failover

Пример 1: иерархия

(slave)

id1,trx1,id2,trx2 B

binlog

A

(crashed)(master)

Aid1,trx1,id2,trx2,id3,trx3

binlog

(slave)

Cid1,trx1

binlog

Page 29: Новые возможности репликации MySQL 5.6

29

GTID: новый протокол репликацииNew protocol used in failover

Пример 1: иерархия

A

(crashed)(crashed)

Aid1,trx1,id2,trx2,id3,trx3

binlog

Cid1,trx1

binlog

id1,trx1,id2,trx2 B

binlog

Page 30: Новые возможности репликации MySQL 5.6

30

GTID: новый протокол репликацииNew protocol used in failover

Пример 1: иерархия

(new master)

id1,trx1,id2,trx2 B

binlog

A

(crashed)(crashed)

Aid1,trx1,id2,trx2,id3,trx3

binlog

(slave)

id1

id2, trx2,...C

id1,trx1

binlog

Page 31: Новые возможности репликации MySQL 5.6

31

GTID: новый протокол репликацииNew protocol

Пример 1: иерархия Пример 2: кольцо

B

binlog

A

binlog

C

binlog

client client

Page 32: Новые возможности репликации MySQL 5.6

32

GTID: новый протокол репликацииNew protocol

Пример 1: иерархия Пример 2: кольцо

id1,trx1

B

binlog

A

binlog

C

binlog

client client trx1

Page 33: Новые возможности репликации MySQL 5.6

33

GTID: новый протокол репликацииNew protocol

Пример 1: иерархия Пример 2: кольцо

id1,trx1,id2,trx2 B

binlog

id2,trx2

A

binlog

C

binlog

client clienttrx2 trx1

Page 34: Новые возможности репликации MySQL 5.6

34

GTID: новый протокол репликацииNew protocol

Пример 1: иерархия Пример 2: кольцо

id1,trx1,id2,trx2,id3,trx3

B

binlog

id2,trx2

A

binlog

C

binlog

client clienttrx2 trx1, trx3

Page 35: Новые возможности репликации MySQL 5.6

35

GTID: новый протокол репликацииNew protocol

Пример 1: иерархия Пример 2: кольцо

id1,trx1,id2,trx2,id3,trx3

B

binlog

id2,trx2

A

binlog

C

binlog

client clienttrx2 trx1, trx3

Crash!

Page 36: Новые возможности репликации MySQL 5.6

36

GTID: новый протокол репликацииNew protocol

Пример 1: иерархия Пример 2: кольцо

id1,trx1,id2,trx2,id3,trx3

B

binlog

id2,trx2

A

binlog

C

binlog

client clienttrx2 trx1, trx3

Page 37: Новые возможности репликации MySQL 5.6

37

GTID: новый протокол репликацииNew protocol

Пример 1: иерархия Пример 2: кольцо

id1,trx1,id2,trx2,id3,trx3

B

binlog

id2,trx2

A

binlog

C

binlog

client clienttrx2 trx1, trx3

id2

id1,trx1,id3,trx3,...

Page 38: Новые возможности репликации MySQL 5.6

38

GTID: новый синтаксис CHANGE MASTERHow to use: New syntax

A

(crashed)

B

(new master)

C

(slave)

server_C> CHANGE MASTER TO MASTER_HOST = 'server_B',                           MASTER_AUTO_POSITION = 1;

new syntaxfail-over

Page 39: Новые возможности репликации MySQL 5.6

39

GTID: новый синтаксис CHANGE MASTERHow to use: New syntax

A

(new master)

B

(crashed)

C

(slave)

fail-over new syntax

server_C> CHANGE MASTER TO MASTER_HOST = 'server_A',                           MASTER_AUTO_POSITION = 1;

Page 40: Новые возможности репликации MySQL 5.6

40

GTID: мониторингMonitoring: gtid_done

master> CREATE TABLE t1 (a INT);

Page 41: Новые возможности репликации MySQL 5.6

41

GTID: мониторингMonitoring: gtid_done

master> CREATE TABLE t1 (a INT);

master> SELECT @@global.gtid_done;a61678ba­4889­4279­9e58­45ba840af334:1

New variable:gtid_done

Page 42: Новые возможности репликации MySQL 5.6

42

GTID: мониторингMonitoring: gtid_done

master> CREATE TABLE t1 (a INT);

master> SELECT @@global.gtid_done;a61678ba­4889­4279­9e58­45ba840af334:1

master> INSERT INTO t1 VALUES (1);

master> INSERT INTO t1 VALUES (2);

New variable:gtid_done

Page 43: Новые возможности репликации MySQL 5.6

43

GTID: мониторингMonitoring: gtid_done

master> CREATE TABLE t1 (a INT);

master> SELECT @@global.gtid_done;a61678ba­4889­4279­9e58­45ba840af334:1

master> INSERT INTO t1 VALUES (1);

master> INSERT INTO t1 VALUES (2);

master> SELECT @@global.gtid_done;a61678ba­4889­4279­9e58­45ba840af334:1­3

Note: interval

New variable:gtid_done

Page 44: Новые возможности репликации MySQL 5.6

44

GTID: мониторингMonitoring: gtid_done

master> SELECT @@global.gtid_done;a61678ba­4889­4279­9e58­45ba840af334:1­10000

 slave> SELECT @@global.gtid_done;a61678ba­4889­4279­9e58­45ba840af334:1­9999

Page 45: Новые возможности репликации MySQL 5.6

45

GTID: итогиSummary

Purpose: Fail-over (or change topology – crash not required) Basic usage is simple

– CHANGE MASTER TO MASTER_AUTO_POSITION = 1

– Failover has very small admin overhead

Basic monitoring is simple

– SELECT @@global.gtid_done

Page 46: Новые возможности репликации MySQL 5.6

46

Автоматический failoverMySQL Utilities

A collection of Python utilities for managing MySQL databases

MySQL Workbench Plugin

Available under the GPLv2 license

Library to grow solutions for common administrative problems

Download MySQL Workbench from:

– http://www.mysql.com/downloads/workbench/

You can also download the latest development source code иерархия for the MySQL Workbench Utilities from:

– http://launchpad/net/mysql-utilities

Page 47: Новые возможности репликации MySQL 5.6

47

Automatic Fail-OverMySQL Utilities

Easily administer MySQL servers from the command цепочка

– mysqldbcompare – compare databases

– mysqldbcopy – copy databases between servers

– mysqlfailover – Automatic fail-over

– mysqlrpladmin – General replication administration utility

– mysqlrplshow – show a graph of your topology

– mysqlreplicate – setup replication

– mysqlrplcheck – check replication configuration

– ...

Build your own tools on top of the core of the library, e.g., automate timeshare multi-source replication setup or failing-over to a slave

Page 48: Новые возможности репликации MySQL 5.6

48

Check and report health at specific intervals in seconds.

Automatic fail-over.

Automatic Fail-Overmysqlfailover

Page 49: Новые возможности репликации MySQL 5.6

49

General replication administration utility: start, stop, topology health, elect, failover, switchover, gtid.

On-demand failover or switchover.

Automatic Fail-Overmysqlrpladmin

Page 50: Новые возможности репликации MySQL 5.6

50

Enhanced Reliability

--binlog-checksum = CRC32 | NONE– Turns on/off generation of CRCs on the master.

– SET @@global.binlog_checksum

● --master-verify-checksum=0 | 1

– Dump thread and user sessions verify checksums.

– SET @@global.master_verify_checksum

● --slave-sql-verify-checksum=0 | 1

– SQL thread verifies checksums.

– SET @@global.slave_sql_verify_checksums

User Interface for Controlling CRC.

Page 51: Новые возможности репликации MySQL 5.6

51

Self-healing Slaves

Backward compatible: one can still use files if one wants:– --master-info-repository= FILE | TABLE

– --relay-log-info-repository= FILE | TABLE

Tables are located in the mysql schema and are InnoDB by default.– mysql.slave_relay_log_info

– mysql.slave_master_info

Tables engine can be altered, e.g.:

– ALTER TABLE mysql.slave_master_info ENGINE = ...;

Hands-on

Page 52: Новые возможности репликации MySQL 5.6

52

Self-healing Slaves

slave_relay_log_info is updated after each relay log rotation, when the SQL thread is stopped, after a commit or rollback, after a statement executed without transactional context.

– DDLs in mysql are not transactional, thus the table is updated after the event is processed.

– --sync-relay-log-info has no effect on tables.

Hands-on

Page 53: Новые возможности репликации MySQL 5.6

53

Self-healing Slaves

slave_master_info is updated when the relay log is rotated, CHANGE MASTER is executed, on STOP|START SLAVE IO_THREAD and when sync-master-info period has elapsed.

– --sync-master-info = 0

● updates only on the cases mentioned.● together with –relay-log-recovery=1 should provide

sufficient fault-tolerance.

– --sync-master-info = N (N >0)

● comes with a penalty, but table is updated more often.

Hands-on

Page 54: Новые возможности репликации MySQL 5.6

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.54

Summary

MySQL 5.6 is the Foundation for building rock solid highly available services infrastructures.

High Availability features: Global Transaction Identifiers, Crash-safe Slaves, Crash-safe Binary logs.

Flexibility and usability enhancements.

Reduced administration overhead.

MySQL Utilities already provide automatic fail-over capabilities, off-loading the DBA.