+ All Categories
Home > Documents > To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation...

To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation...

Date post: 30-Jul-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
39
Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) Percona Live, 25 th April 2017
Transcript
Page 1: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Autopsy of an automation disaster

Simon J Mudd(Senior Database Engineer)Percona Live, 25th April 2017

Page 2: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

2

To err is humanTo really foul things up requires a computer[1]

(or a script)

[1]: http://quoteinvestigator.com/2010/12/07/foul-computer/

Page 3: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Booking.com● Based in Amsterdam since 1996● Online Hotel/Accommodation/Travel Agent (OTA):

● +1,200,000 properties in 227 countries● +1.200.000 room nights reserved daily● +40 languages (website and customer service)● +15.700 people working in 187 offices worldwide

● Part of the Priceline Group, PCLN on Nasdaq

● And we use MySQL:● Thousands (1000s) of servers, ~90% replicating● >150 masters: ~30 >50 slaves & ~10 >100 slaves

3

Page 4: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Session Summary

1. MySQL replication at Booking.com2. Automation disaster: external eye3. Chain of events: analysis4. Learning / takeaway

4

Page 5: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com● Typical MySQL replication deployment at Booking.com:

+---+| M |+---+

|+------+-- ... --+---------------+-------- ...| | | |

+---+ +---+ +---+ +---+| S1| | S2| | Sn| | M1|+---+ +---+ +---+ +---+

|+-- ... --+| |

+---+ +---+| T1| | Tm|+---+ +---+

5

Page 6: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’● We use and contribute to Orchestrator:

6

Page 7: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’’● Orchestrator allows us to:

● Visualize our replication deployments

● Move slaves for planned maintenance of an intermediate master

● Automatically replace an intermediate master in case of its unexpected failure(thanks to pseudo-GTIDs when we have not deployed GTIDs)

7

Page 8: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’’

8

Page 9: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’’● Orchestrator allows us to:

● Visualize our replication deployments

● Move slaves for planned maintenance of an intermediate master

● Automatically replace an intermediate master in case of its unexpected failure(thanks to pseudo-GTIDs when we have not deployed GTIDs widely though orchestrator handles both types)

● Automatically replace a master in case of a failure (failing over to a slave)

9

Page 10: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’’

10

Page 11: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’’● Orchestrator allows us to:

● Visualize our replication deployments

● Move slaves for planned maintenance of an intermediate master● Automatically replace an intermediate master in case of its unexpected failure

(thanks to pseudo-GTIDs when we have not deployed GTIDs)● Automatically replace a master in case of a failure (failing over to a slave)

● But Orchestrator cannot replace a master alone:● Booking.com uses DNS for master discovery● So Orchestrator calls custom hooks (a script) to repoint DNS (and to do other

magic)

11

Page 12: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’’● We also contribute to Orchestrator

● To allow for better scaling

● To improve integration with our own tooling

● To ensure that it can work on all our systems (MySQL, MariaDB) with GTID or pseudo-GTID

● To ensure it can provide us an HA service

● Shlomi has not stopped improving it and others contribute too

12

Page 13: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

MySQL replication at Booking.com’’● So it can handle this:

13

Page 14: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Our subject database● Simple replication deployment (in two data centers):

DNS (master) +---+points here --> | A |

+---+|+------------------------+| |

Reads +---+ +---+happen here --> | B | | X |

+---+ +---+|

+---+ And reads| Y | <-- happen here+---+

14

Page 15: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split brain: 1st event● A and B (two servers in same data center) fail at the same time:

DNS (master) +\-/+points here --> | A |but accesses +/-\+are now failing

Reads +\-/+ +---+happen here --> | B | | X |but accesses +/-\+ +---+are now failing |

+---+ And reads| Y | <-- happen here+---+

15

(I will cover how/why this happened later.)

Page 16: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split brain: 1st event’● Orchestrator fixes things:

+\-/+| A |+/-\+

Reads +\-/+ +---+ Now, DNS (master)happen here --> | B | | X | <-- points herebut accesses +/-\+ +---+are now failing |

+---+ Reads| Y | <-- happen here+---+

16

Page 17: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split brain: disaster● A few things happen overnight and we wake-up to this:

+\-/+| A |+/-\+

DNS +---+ +---+points here --> | B | | X |

+---+ +---+|

+---+| Y |+---+

17

Page 18: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split brain: disaster’● And to make things worse, reads are still happening on Y:

+\-/+| A |+/-\+

DNS (master) +---+ +---+points here --> | B | | X |

+---+ +---+|

+---+ Reads| Y | <-- happen here+---+

18

Page 19: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split brain: disaster’’● This is not good:

● When A and B failed, X was promoted as the new master

● Something made DNS point to B (we will see what later)à writes are now happening on B

● But B is outdated: all writes to X (after the failure of A) did not reach B

● So we have data on X that cannot be read on B

● And we have new data on B that is not read on Y

19

+\-/+| A |+/-\+

DNS (master) +---+ +---+points here --> | B | | X |

+---+ +---+|

+---+ Reads| Y | <-- happen here+---+

Page 20: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis● Digging more in the chain of events, we find that:

● After the 1st failure of A, a 2nd failure was detected and Orchestrator promoted B

● So after their failures, A and B came back and formed an isolated replication chain

20

+\-/+| A |+/-\+

+\-/+ +---+ DNS (master)| B | | X | <-- points here+/-\+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 21: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis● Digging more in the chain of events, we find that:

● After the 1st failure of A, a 2nd failure was detected and Orchestrator promoted B

● So after their failures, A and B came back and formed an isolated replication chain

● And something caused a failure of A

21

+---+| A |+---+

|+---+ +---+ DNS (master)| B | | X | <-- points here+---+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 22: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis● Digging more in the chain of events, we find that:

● After the 1st failure of A, a 2nd failure was detected and Orchestrator promoted B

● So after their failures, A and B came back and formed an isolated replication chain

● And something caused a failure of A

● But how did DNS end-up pointing to B ?● The failover to B called the DNS repointing script

● The script stole the DNS entry from Xand pointed it to B

22

+\-/+| A |+/-\+

+---+ +---+ DNS (master)| B | | X | <-- points here+---+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 23: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis● Digging more in the chain of events, we find that:

● After the 1st failure of A, a 2nd failure was detected and Orchestrator promoted B

● So after their failures, A and B came back and formed an isolated replication chain

● And something caused a failure of A

● But how did DNS end-up pointing to B ?● The failover to B called the DNS repointing script

● The script stole the DNS entry from Xand pointed it to B

● But is that all: what made A fail ?

23

+\-/+| A |+/-\+

DNS (master) +---+ +---+points here --> | B | | X |

+---+ +---+|

+---+ Reads| Y | <-- happen here+---+

Page 24: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis’● What made A fail ?

● Once A and B came back up as a new replication chain, they had outdated data

● If B would have come back before A, it could have been re-cloned under X

24

+---+| A |+---+

|+---+ +---+ DNS (master)| B | | X | <-- points here+---+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 25: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis’● What made A fail ?

● Once A and B came back up as a new replication chain, they had outdated data

● If B would have come back before A, it could have been re-cloned under X

● But as A came back before re-cloning, it injected heartbeat and p-GTID into B

25

+\-/+| A |+/-\+

+---+ +---+ DNS (master)| B | | X | <-- points here+---+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 26: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis’● What made A fail ?

● Once A and B came back up as a new replication chain, they had outdated data

● If B would have come back before A, it could have been re-cloned under X

● But as A came back before re-cloning, it injected heartbeat and p-GTID into B

● Then B could have been re-cloned without problems

26

+---+| A |+---+

|+---+ +---+ DNS (master)| B | | X | <-- points here+---+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 27: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis’● What made A fail ?

● Once A and B came back up as a new replication chain, they had outdated data

● If B would have come back before A, it could have been re-cloned under X

● But as A came back before re-cloning, it injected heartbeat and p-GTID into B

● Then B could have been re-cloned without problems

● But A was re-cloned instead (human error #1)

27

+---+| A |+---+

+\-/+ +---+ DNS (master)| B | | X | <-- points here+/-\+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 28: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split-brain: analysis’● What made A fail ?

● Once A and B came back up as a new replication chain, they had outdated data

● If B would have come back before A, it could have been re-cloned under X

● But as A came back before re-cloning, it injected heartbeat and p-GTID into B

● Then B could have been re-cloned without problems

● But A was re-cloned instead (human error #1)

● Why did Orchestrator not fail over right away ?● B was promoted hours after A was brought down…

● Because A was downed time only for 4 hours(human error #2) 28

+\-/+| A |+/-\+

+---+ +---+ DNS (master)| B | | X | <-- points here+---+ +---+

|+---+ Reads| Y | <-- happen here+---+

Page 29: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Orchestrator anti-flapping● Orchestrator has a failover throttling/acknowledgment mechanism[1]:

● Automated recovery will happen● for an instance in a cluster that has not recently been recovered

● unless such recent recoveries were acknowledged.

● In our case:● the anti-flap timeout had expired

● The downtime timeout had expired

● maybe Orchestrator should not have failed over the second time

[1]: https://github.com/github/orchestrator/blob/master/docs/topology-recovery.md#blocking-acknowledgments-anti-flapping

Page 30: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Split brain: summary● So in summary, this disaster was caused by:

1. A fancy failure: 2 servers failing in the same data center at the same time

2. A probably too short a timeout for recent failover

3. Edge-case recovery: both servers forming a new replication topology

4. Re-cloning of the wrong server (A instead of B)

5. Too short downtime for the re-cloning

6. DNS repointing script not defensive enough

30

Page 31: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Fancy failure: more details● Why did A and B fail at the same time ?

● Deployment error: the two servers in the same rack/failure domain ?

● And/or very unlucky ?

● Very unlucky because…

10 to 20 servers failed that day in the same data center

Because human operations and sensitive hardware

31

DNS (master) +\-/+points here ---> | A |but now accesses +/-\+are failing

+\-/+ +---+| B | | X |+/-\+ +---+

|+---+| Y |+---+

Page 32: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

How to fix such situation ?● Fixing non-intersecting data on B and X is hard.

● Some solutions are:● Kill B or X (and lose data)

● Replay writes from B on X (manually or with replication)

● But AUTO_INCREMENTs are in the way:

● up to i used on A before 1st failover

● i-n to j1 used on X after recovery

● i to j2 used on B after 2nd failover

32

+\-/+| A |+/-\+

DNS (master) +---+ +---+points here --> | B | | X |

+---+ +---+|

+---+ Reads| Y | <-- happen here+---+

Page 33: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Takeaway● Twisted situations happen

● Automation is not simple:● code automation scripts defensively

● Handling unexpected failures is really hard

● Need to understand interactions between different tools in great detail

● Human interaction of infrequent events can be problematic

● Downtime more than less or only turn off downtime state once the system is working

Page 34: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Takeaway● More testing of failure scenarios though this will never be complete

● Shutdown slaves first

● Use something other than autoinc columns for PK● monotonically increasing UUID[1] [2] ?

● We actually have an autoinc service but were not using it.

[1]: https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/[2]: http://mysql.rjweb.org/doc.php/uuid

Page 35: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Improvements in Orchestrator● Orchestrator mainly did what it was supposed to do

● Automation around orchestrator had unintended affects

● Should Orchestrator be changed ?● It depends…

● Not easy to define what should be changed

● Not everyone wants the same thing (for legitimate reasons)

● Suggestions welcome for describing problems seen or suggesting solutionshttps://github.com/github/orchestrator/issues

● In any case orchestrator is being changed and is getting better

35

Page 36: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Links● Booking.com

● Blog: https://blog.booking.com/

● Careers: https://workingatbooking.com/

● Orchestrator● On Github: https://github.com/github/orchestrator/

● Myself:● Blog: http://blog.wl0.org/● https://www.linkedin.com/in/simon-j-mudd-397bb01/

36

Page 37: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Oh, and Booking.com is hiring!● Almost any role:

● MySQL Engineer / DBA● System Administrator● System Engineer● Site Reliability Engineer● Developer● Designer● Technical Team Lead● Product Owner● Data Scientist● And many more…

● https://workingatbooking.com/

37

Page 38: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Questions?

Page 39: To err is human To really foul things up requires a ... · 4/25/2017  · Autopsy of an automation disaster Simon J Mudd (Senior Database Engineer) PerconaLive, 25thApril 2017

Thanks

Simon J [email protected]


Recommended