preventing multi master conflicts with tungsten

45
©Continuent 2012. Preventing con!icts in Multi-master replication with Tungsten Giuseppe Maxia, QA Director, Continuent 1 Sunday, February 03, 13

Upload: giuseppe-maxia

Post on 07-Nov-2014

967 views

Category:

Technology


2 download

DESCRIPTION

Preventing replication conflicts in MySQL multi master deployments with Tungsten Replicator

TRANSCRIPT

Page 1: Preventing multi master conflicts with tungsten

©Continuent 2012.

Preventing con!icts in Multi-master replication

with Tungsten

Giuseppe Maxia, QA Director, Continuent

1

Sunday, February 03, 13

Page 2: Preventing multi master conflicts with tungsten

©Continuent 2012

Introducing Continuent

2

• The leading provider of clustering and replication for open source DBMS

• Our Product: Continuent Tungsten

• Clustering - Commercial-grade HA, performance scaling and data management for MySQL

• Replication - Open source, Flexible, high-performance data movement

Sunday, February 03, 13

Page 3: Preventing multi master conflicts with tungsten

©Continuent 2012.

What is Tungsten Replicator?• Open source drop-in replacement for MySQL replication,

providing:

• Global transaction ID

• Multiple masters

• Multiple sources

• Flexible topologies

• Heterogeneous replication

• Parallel replication

• ... and more

3

Sunday, February 03, 13

Page 4: Preventing multi master conflicts with tungsten

©Continuent 2012

Tungsten Replicator Overview

4

Master

(Transactions + Metadata)

Slave

THL

DBMSLogs

Replicator

(Transactions + Metadata)

THLReplicator

Download transactions via network

Apply using JDBC

Sunday, February 03, 13

Page 5: Preventing multi master conflicts with tungsten

©Continuent 2012

Tungsten Replication Service

5

Extract Filter Apply

StageExtract Filter Apply

StageExtract Filter Apply

Stage

Pipeline

MasterDBMS

TransactionHistory Log

In-MemoryQueue

SlaveDBMS

Sunday, February 03, 13

Page 6: Preventing multi master conflicts with tungsten

©Continuent 2012

Multiple Services Per Replicator

6

NYCReplicator

London

Service nyc

FrankfurtReplicator

Service fra

Replicator

Service nyc

Service fra

Sunday, February 03, 13

Page 7: Preventing multi master conflicts with tungsten

©Continuent 2012

Multi-Master Replication

7

• Updates on 2+ sites (active-active mode)

• Enables geographic distribution of data

• No failover necessary if network fails or site becomes unavailable

• Not all applications can handle multi-master

• Applications must avoid con!icts

• Careful testing required

• Restoration of broken systems may not be easy

Sunday, February 03, 13

Page 8: Preventing multi master conflicts with tungsten

©Continuent 2012

Simple Multi-Master Con!guration

8

NYC FrankfurtReplicator

fra (master)

nyc (slave)

Replicator

fra (slave)

nyc (master)

Database-to-Database

Sunday, February 03, 13

Page 9: Preventing multi master conflicts with tungsten

©Continuent 2012

Three-node Multi-Master Con!guration

9

NYC FrankfurtReplicator

fra (master)

nyc (slave)

Replicator

fra (slave)

nyc (master)

London

fra (slave)

lon (master)

nyc (slave)

lon (slave) lon (slave)

Database-to-Database

Replicator

Sunday, February 03, 13

Page 10: Preventing multi master conflicts with tungsten

©Continuent 2012

multi-node star Con!guration

10

NYC FrankfurtReplicator

fra (master)

Replicator

nyc (master)

London (hub)

fra (slave)

lon (master)

nyc (slave)

lon (slave) lon (slave)

SingaporeReplicator

sin (master)

lon (slave)

Replicator

sin (slave)

Sunday, February 03, 13

Page 11: Preventing multi master conflicts with tungsten

©Continuent 2012

CONFLICTS

11

Sunday, February 03, 13

Page 12: Preventing multi master conflicts with tungsten

©Continuent 2012.

What's a con"ict

• Data modi!ed by several sources (masters)

• Creates one or more :

• data loss (unwanted delete)

• data inconsistency (unwanted update)

• duplicated data (unwanted insert)

• replication break

12

Sunday, February 03, 13

Page 13: Preventing multi master conflicts with tungsten

©Continuent 2012.

Data duplication

13

id name amount1 Joe 1002 Frank 1103 Sue 100

alphabravo

charlie4 Matt 130

4 Matt 140

BREAKS REPLICATION

Sunday, February 03, 13

Page 14: Preventing multi master conflicts with tungsten

©Continuent 2012.

auto_increment o#sets are not a remedy

• A popular recipe

• auto_increment_increment + auto_increment_offset

• They don't prevent con"icts

• They hide duplicates

14

Sunday, February 03, 13

Page 15: Preventing multi master conflicts with tungsten

©Continuent 2012.

Hidden data duplication

15

id name amount1 Joe 1002 Frank 1103 Sue 100

alphao#set 1

bravoo#set 2

charlieo#set 3

13 Matt 130

11 Matt 140

INSERT

INSERT

Sunday, February 03, 13

Page 16: Preventing multi master conflicts with tungsten

©Continuent 2012.

Data inconsistency

16

id name amount1 Joe 1002 Frank 1103 Sue 100

alphabravo

charlie3 Sue 105

3 Sue 108

UPDATE

UPDATE

Sunday, February 03, 13

Page 17: Preventing multi master conflicts with tungsten

©Continuent 2012.

Data loss

17

id name amount1 Joe 1002 Frank 1103 Sue 100

alphabravo

charlierecord #3

3 Sue 108

MAY BREAK REPLICATION

UPDATE

DELETE

Sunday, February 03, 13

Page 18: Preventing multi master conflicts with tungsten

©Continuent 2012

con"ict handling strategies• resolving

• after the fact

• Needs information that is missing in async replication

• avoiding

• requires synchronous replication with 2pc

• preventing

• setting and enforcing a split sources policy

• Transforming and resolving

• all records are converted to INSERTs

• con!icts are resolved within a given time window

18

used by Tungsten

planned forfuture use

Sunday, February 03, 13

Page 19: Preventing multi master conflicts with tungsten

©Continuent 2012.

Tungsten Replicator Filters

19

Sunday, February 03, 13

Page 20: Preventing multi master conflicts with tungsten

Replicator Pipeline Architecture

THL SlaveDBMS

Transaction History Log

MySQLBinlog

ApplyExtract Extract

PipelineTungsten Replicator Process

Stage

ApplyExtractAssign Shard

IDApply

StageStage

filter filter filter

Sunday, February 03, 13

Page 21: Preventing multi master conflicts with tungsten

©Continuent 2012.

Restrict replication to some schemas and tables

21

./tools/tungsten-installer \ --master-slave -a \  ...  --svc-extractor-filters=replicate \  "--property=replicator.filter.replicate.do=test,*.foo" \  ...  --start-and-report

# test="test.*" -> same drawback as binlog-do-db in MySQL# *.foo = table 'foo' in any database# employees.dept_codes,employees.salaries => safest way

Sunday, February 03, 13

Page 22: Preventing multi master conflicts with tungsten

©Continuent 2012.

Multi-master:Con!ict prevention

22

Sunday, February 03, 13

Page 23: Preventing multi master conflicts with tungsten

©Continuent 2012.

Tungsten con"ict preventionin a nutshell

1. de!ne the rules

(which master can update which database)

2. tell Tungsten the rules

3. de!ne the policy

(error, drop, warn, or accept)

4. Let Tungsten enforce your rules

23

Sunday, February 03, 13

Page 24: Preventing multi master conflicts with tungsten

©Continuent 2012.

Tungsten Con"ict prevention facts

• Sharded by database

• De!ned dynamically

• Applied on the slave services

• methods:

• error: make replication fail

• drop: drop silently

• warn: drop with warning

24

Sunday, February 03, 13

Page 25: Preventing multi master conflicts with tungsten

©Continuent 2012.

Tungsten con"ict prevention applicability

• unknown shards

• The schema being updated is not planned

• actions: accept, drop, warn, error

• unwanted shards

• the schema is updated from the wrong master

• actions: accept, drop, warn, error

• whitelisted shards

• can be updated by any master

25

Sunday, February 03, 13

Page 26: Preventing multi master conflicts with tungsten

©Continuent 2012.

Con"ict prevention directives

--svc-extractor-filters=shardfilter

replicator.filter.shardfilter.unknownShardPolicy=error

replicator.filter.shardfilter.unwantedShardPolicy=error

replicator.filter.shardfilter.enforceHomes=false

replicator.filter.shardfilter.allowWhitelisted=false

26

Sunday, February 03, 13

Page 27: Preventing multi master conflicts with tungsten

©Continuent 2012.

con"ict prevention in a star topology

27

Host1master: alphadatabase: employees

Host2master: bravodatabase: buildings

Host3master: charlie (hub)database: vehicles

Host2master: bravodatabase: vehicles

Host2master: bravodatabase: vehiclesA

B

CB

A

C

C

alpha updates employees

✔Sunday, February 03, 13

Page 28: Preventing multi master conflicts with tungsten

©Continuent 2012.

con"ict prevention in a star topology

28

Host1master: alphadatabase: employees

Host2master: bravodatabase: buildings

Host3master: charlie (hub)database: vehicles

Host2master: bravodatabase: vehicles

Host2master: bravodatabase: vehiclesA

B

CB

A

C

C

alpha updates vehicles

Sunday, February 03, 13

Page 29: Preventing multi master conflicts with tungsten

©Continuent 2012.

con"ict prevention in a all-masters topology

29

Host1master: alphadatabase: employees

Host2master: bravodatabase: buildings

Host3master: charlie (hub)database: vehicles

Host2master: bravodatabase: vehicles

Host2master: bravodatabase: vehiclesA

B

CB

A

C

C

A

B

alpha updates employees

✔✔

Sunday, February 03, 13

Page 30: Preventing multi master conflicts with tungsten

©Continuent 2012.

con"ict prevention in a all-masters topology

30

Host1master: alphadatabase: employees

Host2master: bravodatabase: buildings

Host3master: charlie (hub)database: vehicles

Host2master: bravodatabase: vehicles

Host2master: bravodatabase: vehiclesA

B

CB

A

C

C

A

B

charlie updates vehicles

✔✔

Sunday, February 03, 13

Page 31: Preventing multi master conflicts with tungsten

©Continuent 2012.

con"ict prevention in a all-masters topology

31

Host1master: alphadatabase: employees

Host2master: bravodatabase: buildings

Host3master: charlie (hub)database: vehicles

Host2master: bravodatabase: vehicles

Host2master: bravodatabase: vehiclesA

B

CB

A

C

C

A

B

alpha updates buildings

✗✗

Sunday, February 03, 13

Page 32: Preventing multi master conflicts with tungsten

©Continuent 2012.

con"ict prevention in a all-masters topology

32

Host1master: alphadatabase: employees

Host2master: bravodatabase: buildings

Host3master: charlie (hub)database: vehicles

Host2master: bravodatabase: vehicles

Host2master: bravodatabase: vehiclesA

B

CB

A

C

C

A

B

charlie updates employees

✗✗

Sunday, February 03, 13

Page 33: Preventing multi master conflicts with tungsten

©Continuent 2012.

setting con"ict prevention rules

trepctl -host host1 -service charlie \ shard -insert < shards.map

cat shards.mapshard_id master criticalpersonnel alpha falsebuildings bravo falsevehicles charlie falsetest whitelisted false

# charlie is slave service in host 1

33

Sunday, February 03, 13

Page 34: Preventing multi master conflicts with tungsten

©Continuent 2012.

setting con"ict prevention rules

trepctl -host host2 -service charlie \ shard -insert < shards.map

cat shards.mapshard_id master criticalpersonnel alpha falsebuildings bravo falsevehicles charlie falsetest whitelisted false

# charlie is slave service in host 2

34

Sunday, February 03, 13

Page 35: Preventing multi master conflicts with tungsten

©Continuent 2012.

setting con"ict prevention rules

trepctl -host host3 -service alpha \ shard -insert < shards.maptrepctl -host host3 -service bravo \ shard -insert < shards.map

cat shards.mapshard_id master criticalpersonnel alpha falsebuildings bravo falsevehicles charlie falsetest whitelisted false

# alpha and bravo are slave services in host 3

35

Sunday, February 03, 13

Page 36: Preventing multi master conflicts with tungsten

©Continuent 2012.

Con"ict prevention demo

36

• reminder

• Server #1 can update "employees"

• Server #2 can update "buildings"

• Server #3 can update "vehicles"

Sunday, February 03, 13

Page 37: Preventing multi master conflicts with tungsten

©Continuent 2012.

Sample correct operation (1)

mysql #1> create table employees.names( ... )

# all servers receive the table# all servers keep working well

37

Sunday, February 03, 13

Page 38: Preventing multi master conflicts with tungsten

©Continuent 2012.

Sample correct operation (2)

mysql #2> create table buildings.homes( ... )

# all servers receive the table# all servers keep working well

38

Sunday, February 03, 13

Page 39: Preventing multi master conflicts with tungsten

©Continuent 2012.

Sample incorrect operation (1)

mysql #2> create table employees.nicknames( ... )

# Only server #2 receives the table# slave service in hub gets an error# slave service in #1 does not receive anything

39

Sunday, February 03, 13

Page 40: Preventing multi master conflicts with tungsten

©Continuent 2012.

sample incorrect operation (2)

#3 $ trepct services | simple_services alpha [slave]seqno: 7 - latency: 0.136 - ONLINE

bravo [slave]seqno: -1 - latency: -1.000 - OFFLINE:ERROR

charlie [master]seqno: 66 - latency: 0.440 - ONLINE

40

Sunday, February 03, 13

Page 41: Preventing multi master conflicts with tungsten

©Continuent 2012.

sample incorrect operation (3)

#3 $ trepct -service bravo statusNAME VALUE---- -----appliedLastEventId : NONEappliedLastSeqno : -1appliedLatency : -1.0(...)offlineRequests : NONEpendingError : Stage task failed: q-to-dbmspendingErrorCode : NONEpendingErrorEventId : mysql-bin.000002:0000000000001241;0pendingErrorSeqno : 7pendingExceptionMessage: Rejected event from wrong shard: seqno=7 shard ID=employees shard master=alpha service=bravo(...)

41

Sunday, February 03, 13

Page 42: Preventing multi master conflicts with tungsten

©Continuent 2012.

Fixing the issue

mysql #1> drop table if exists employees.nicknames;mysql #1> create table if exists employees.nicknames ( ... ) ;

#3 $ trepct -service bravo online -skip-seqno 7

# all servers receive the new table

42

Sunday, February 03, 13

Page 43: Preventing multi master conflicts with tungsten

©Continuent 2012.

Sample whitelisted operation

mysql #2> create table test.hope4best( ... )

mysql #1> insert into test.hope4best values ( ... )

# REMEMBER: 'test' was explicitly whitelisted# All servers get the new table and records# But there is no protection against conflicts

43

Sunday, February 03, 13

Page 44: Preventing multi master conflicts with tungsten

©Continuent 2012.

We are hiring !

http://continuent.com/about/careers

44

Parting thoughts

Sunday, February 03, 13

Page 45: Preventing multi master conflicts with tungsten

©Continuent 2012 45

Continuent Website:http://www.continuent.com

Tungsten Replicator 2.0:http://tungsten-replicator.org

blog: http://datacharmer.blogspot.comtwitter: @datacharmer

Sunday, February 03, 13