massively distributed backups at facebook scale - shlomo priymak, facebook - devopsdays tel aviv...

62

Upload: devopsdays-tel-aviv

Post on 14-Apr-2017

549 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015
Page 2: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Massively Distributed Backupat Facebook Scale

Shlomo Priymak ([email protected], @shlomoid)Production Engineering Manager, MySQL Infrastructure

Page 3: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

MySQL at Facebook

Page 4: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Sharding

fbid is 64bit integermap(fbid) = shard id

Page 5: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

{ "id": "101231234567123", "name": "Shlomo Priymak" }

graph API Examplegraph.facebook.com/me

Page 6: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

serverinstance

shard #4

shard #3

shard #2

shard #1

Page 7: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

serverinstance

shard #4

shard #3

shard #2

shard #1

serverinstance

shard #4

shard #3

shard #2

shard #1

serverinstance

shard #4

shard #3

shard #2

shard #1

Master

Slaves

Replica Set

Page 8: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Prineville, Oregon

Altoona, Iowa

Forest City, North Carolina

Ashburn, Virginia

Luleå, Sweden

Page 9: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

100

Page 10: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

1000+

Page 11: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015
Page 12: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015
Page 13: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Backup Fundamentals

Page 14: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• `mysqldump` • --single-transaction • Logical Read Ahead

Full Dumps

Page 15: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Logical vs. Physical

Logical Physical

External Tools Yes No

Size Small Large

Single Table Restore Easy Difficult

Debug Corruption Easy Difficult

Compressibility Excellent Meh

Backup / Restore Duration Long Short

Page 16: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup

Page 17: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup

0

2

4

6

8

% of space taken by differential backups

Day 1 Day 2 Day 3 Day 40

25

50

75

100

Relative backup space usage

Day 1 Day 2 Day 3 Day 4

Full Backup Differential Backup

Page 18: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup Generation

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Santa Clara`), (400, ‘Los Angeles’), [...] );

INSERT INTO t1 VALUES ( );

INSERT INTO t1 VALUES ( );

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Oakland`), (3, ‘Menlo Park’), [...] );

No Change

Inserted Rows

CREATE TABLE t (id int, city char(50); /* ORDERING KEY : (id) */

Full Backup (old) Full Backup (new)

Deleted Rows

Page 19: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup Generation

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Santa Clara`), (400, ‘Los Angeles’), [...] );

INSERT INTO t1 VALUES ( (2, ‘Santa Clara’), );

INSERT INTO t1 VALUES ( (2, ‘OakLand’), );

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Oakland`), (3, ‘Menlo Park’), [...] );

Row Updated

Inserted RowsDeleted Rows

Full Backup (old) Full Backup (new)

CREATE TABLE t (id int, city char(50); /* ORDERING KEY : (id) */

Page 20: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup Generation

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Santa Clara`), (400, ‘Los Angeles’), [...] );

INSERT INTO t1 VALUES ( (2, ‘Santa Clara’), );

INSERT INTO t1 VALUES ( (2, ‘OakLand’), (3, ‘Menlo Park’), );

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Oakland`), (3, ‘Menlo Park’), [...] ); Row Deleted

Inserted RowsDeleted Rows

Full Backup (old) Full Backup (new)

CREATE TABLE t (id int, city char(50); /* ORDERING KEY : (id) */

Page 21: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup Generation

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Santa Clara`), (400, ‘Los Angeles’), [...] );

INSERT INTO t1 VALUES ( (2, ‘Santa Clara’), (400, ‘Los Angeles’), );

INSERT INTO t1 VALUES ( (2, ‘OakLand’), (3, ‘Menlo Park’), );

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Oakland`), (3, ‘Menlo Park’), [...] ); Row Inserted

Inserted RowsDeleted Rows

Full Backup (old) Full Backup (new)

CREATE TABLE t (id int, city char(50); /* ORDERING KEY : (id) */

Page 22: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Final Output

INSERT INTO t1 VALUES ( (2, ‘Santa Clara’), (400, ‘Los Angeles’), );

INSERT INTO t1 VALUES ( (2, ‘OakLand’), (3, ‘Menlo Park’), );

Inserted RowsDeleted Rows

Page 23: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Restoring Diff Backup

INSERT INTO t1 VALUES ( (2, ‘Santa Clara’), (400, ‘Los Angeles’), );

Inserted Rows

INSERT INTO t1 VALUES ( (2, ‘OakLand’), (3, ‘Menlo Park’), );

Deleted Rows

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Oakland`), (3, ‘Menlo Park’), [...] );

Full Backup (old)

3-Way Merge

INSERT INTO t VALUES (1, ‘San Fransisco’), (2, ‘Santa Clara`), (400, ‘Los Angeles’), [...] );

Full Backup (new)

Page 24: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Point in time recovery • Global Transaction IDs

Binary Logs

Page 25: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Continuous Restore

Page 26: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Everything, Every Day • Streaming Binary Logs • Multiple stages

• HDFS • Offsite

Backup ScheduleWhat, When, Where

Page 27: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Backup ScheduleFull, Diff, Diff, Diff, Full, Diff, Diff, Diff, Full, Diff, Diff, Diff…

Full5

Diff6

Diff7

Diff8

Full9

Diff10

Diff11

Diff12

Full1

Diff2

Diff3

Diff4

Page 28: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Backup Traffic

3.5 Tb/sPeak

~0.5 Tb/sTrough

Page 29: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup Stages

1) mysql HDFSFull (new)

2) HDFSFull (new)

Full (old)Diff (new) HDFSDiffer

Page 30: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Too much HDFS I/O • Too much network I/O • Too long

#fail

Page 31: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Backup Stages

1) mysql HDFSFull (new)

2) HDFSFull (new)

Full (old)Diff (new) HDFSDiffer

Page 32: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Differential Streaming

mysql

HDFS

Full (new)

Full (

old)Diff (new)Differ HDFS

Database Server

Page 33: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Prineville, Oregon

Altoona, Iowa

Forest City, North Carolina

Ashburn, Virginia

Luleå, Sweden

Page 34: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

1. Target2. Source

Page 35: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Equalize HDFS cluster usage • Minimize cross-region traffic • Avoid broken replicas • Consistency • Backup at least once!

System Design Goals

Page 36: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Define allocation globally • Hash shards into a 1000 buckets • Allocate buckets to clusters,

proportional to size

Distribution Algorithm

Page 37: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

serverinstance

shard 14

shard 13

shard 12

shard 11

shard 10

shard 9

shard 8

shard 7

shard 6

shard 5

shard 4

shard 3

shard 2

shard 1

Page 38: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

998997 999

4

1000

321

shard 14

shard 13shard 12

shard 11

shard 10

shard 9 shard 8

shard 7 shard 6

shard 5

shard 4

shard 3

shard 2

shard 1

1000 Buckets

Page 39: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

HDFS 2HDFS 1 HDFS 3 HDFS 4 HDFS 5

101 400100 401 600 601 850 851 1000

1 PB 3 PB 2 PB 2.5 PB 1.5 PB

1

100 buckets 300 buckets 200 buckets 250 buckets 150 buckets

Total buckets: 1000Total size: 10 PB (Example)

Page 40: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

HDFS 2HDFS 1 HDFS 3 HDFS 4 HDFS 5

101 400100 401 600 601 850 851 1000

1 PB 3 PB 2 PB 2.5 PB 1.5 PB

Bucket 20Bucket 200

Bucket 500

Bucket 650

Bucket 900Bucket 30

Bucket 400

1

Bucket 700

Bucket 800

Page 41: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Unified Pool

Page 42: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Some are More Equal than Others?

Page 43: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

sorted unsorted

Page 44: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

sorted unsorted

Page 45: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Rebalance / Convergence

Page 46: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

A

CB

1. C2. A3. B

1. C2. A3. B

1. C2. A3. B

Is Alive?

Page 47: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

A

CB

αHDFS

ɣHDFS

Δ(B, α) = 10

Δ(A, α) = 0

Δ(A, ɣ) = 20

Δ(B, ɣ) = 15

Δ(C, ɣ) = 0

HDFS Priority

ɣ 0α 1

Page 48: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

rank(mysql, hdfs) ≡ ( Δ(mysql, hdfs), priority(hdfs), )

Page 49: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

𝕄 ={A, B, C}// MySQL Servers 𝓗 ={α, ɣ}// HDFS Clusters 𝕄×𝓗 ={(m, h): m∈𝕄 ∧ h∈𝓗} return sort(𝕄×𝓗, key=rank(m, h))

Page 50: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Δ priorityA, α 0 1A, ɣ 20 0B, α 10 1B, ɣ 15 0C, α 20 1C, ɣ 0 0

Page 51: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Δ priorityC, ɣ 0 0A, α 0 1B, α 10 1B, ɣ 15 0A, ɣ 20 0C, α 20 1

Page 52: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Pile it Up

A

CB

Page 53: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

War Story: Cluster Turn Up

Page 54: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• New HDFS Cluster • New Datacenter • Slow Ramp-Up

New Region Cluster Turn Up

Page 55: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Network woes • Pulling full backups to create diffs! • Fix: run full when target HDFS changes

New Region Cluster Turn Up

Page 56: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

New Region Cluster Turn Up, cont.

Page 57: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

New Region Cluster Turn Up, cont.

Page 58: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Call From the Engine Room

Page 59: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Emergency meeting • Fix: Turn off a few racks

Divert Power to the Shields!

Page 60: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

The Future!

Page 61: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

• Record previous value by default • Binary Logs + Binary Logs => Diff • Full + Diff => Full • In theory, run full backup only once!

Row Based Binary Logs

Page 62: Massively Distributed Backups at Facebook Scale - Shlomo Priymak, Facebook - DevOpsDays Tel Aviv 2015

Questions!

Shlomo Priymak ([email protected])@shlomoid