MySQL Cluster - Computer Architecture Group
MySQL Cluster - Computer Architecture Group
MySQL Cluster - Computer Architecture Group
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>MySQL</strong> <strong>Cluster</strong><br />
Vortrag im Rahmen des Seminars<br />
„Ausgewählte Themen in Hardwareentwurf und Optik“<br />
15.12.2008 Philipp Bachmann 1
1) Einführung<br />
2) System-Architektur<br />
3) Hohe Verfügbarkeit<br />
4) Performance<br />
5) Fazit<br />
Inhalt<br />
15.12.2008 Philipp Bachmann 2
Motivation<br />
DB oft zentraler Bestandteil eines Software-Systems<br />
Verfügbarkeit der Daten wichtig<br />
z.B. bedeutet Ausfall bei Onlineshop:<br />
Imageschaden/Verärgerte Kunden<br />
Umsatzeinbußen<br />
Beispiel Neckermann: Session-Daten des Online-Shops<br />
500.000 Anfragen pro Tag<br />
<strong>MySQL</strong> <strong>Cluster</strong> erfüllt Anforderungen:<br />
Hohe Performance und Ausfallsicherheit bei<br />
geringen Kosten<br />
15.12.2008 Philipp Bachmann 3
Von <strong>MySQL</strong> ...<br />
Relationale Datenbank<br />
Daten in Tabellen gespeichert<br />
Spalten/Attribute - ArtikelNr, ArtikelBez,<br />
Zeilen/Datensätze – ein Artikel<br />
Abfragesprache: Structured Query Language (SQL)<br />
SELECT * FROM tblArtikel WHERE ArtikelNr = 5<br />
Verknüpfung von Tabellen über gemeinsame Attribute<br />
SELECT * FROM Bestellung AS b INNER JOIN tblArtikel AS<br />
a WHERE a.ArtikelNr = b.ArtikelNr AND b.BestellNr = 42<br />
Primary Key: Eindeutige Identifizierung eines Datensatzes<br />
Client/Server Architektur<br />
ArtikelNr ArtikelBez<br />
…<br />
1 Auto …<br />
2 Wein ...<br />
5 DVD ...<br />
6 Buch ...<br />
15.12.2008 Philipp Bachmann 4
… und Transaktionen ...<br />
Transaktion: Gruppe von SQL Anweisungen die als atomar<br />
angesehen werden<br />
Beispiel: Bestellung eines Artikels<br />
START TRANSACTION<br />
SELECT Anzahl FROM tblLager WHERE ArtikelNr = 5<br />
UPDATE tblLager SET Anzahl = Anzahl – 1 WHERE AritkelNr = 5<br />
COMMIT<br />
ACID-Transaktionen<br />
Atomicity – ganz oder gar nicht<br />
Consistency – der Daten vor und nach Transaktion<br />
Isolation – keine gegenseitige Beeinflussung<br />
Durability – erfolgreiche Transaktion ist dauerhaft<br />
15.12.2008 Philipp Bachmann 5
Client<br />
PHP Skript<br />
Java Client<br />
<strong>MySQL</strong> Console<br />
… über Storage Engines ...<br />
SQL Query<br />
<strong>MySQL</strong> Server<br />
Tabellen in Storage Engines gespeichert<br />
MyISAM: disk based, schnell, keine Transaktionen<br />
Memory: memory based, sehr schnell<br />
InnoDB: disk based, ACID Unterstützung, mehr<br />
Overhead<br />
Abstraktionsschicht<br />
Parse Optimize<br />
MyISAM<br />
InnoDB<br />
15.12.2008 Philipp Bachmann 6<br />
Memory<br />
Retrieve/<br />
Store<br />
NDB<br />
<strong>MySQL</strong> Database<br />
Management Level<br />
Storage Engine<br />
Level
… zu <strong>MySQL</strong> <strong>Cluster</strong><br />
NDB (Network Database)<br />
Storage Engine von <strong>MySQL</strong> <strong>Cluster</strong><br />
Einfache Migration<br />
Gleiche Client-Anwendungen nutzbar<br />
SQL: ALTER TABLE tblArtikel ENGINE=NDB<br />
Achtung bei Performance + besonderen Features<br />
MyISAM<br />
<strong>MySQL</strong> Server<br />
InnoDB<br />
Memory<br />
NDB<br />
<strong>MySQL</strong> <strong>Cluster</strong><br />
???<br />
15.12.2008 Philipp Bachmann 7
<strong>MySQL</strong> <strong>Cluster</strong> - Features<br />
99,999% Verfügbarkeit<br />
Kein Single Point of Failure durch eine verteilte,<br />
fehlertolerante Architektur<br />
Automatischer, schneller Failover<br />
Kosteneffizient<br />
OpenSource, commodity off-the-shelf<br />
Hohe Performance<br />
In-memory Datenbank, Parallelisierung<br />
Skalierbar je nach benötigten Ressourcen<br />
15.12.2008 Philipp Bachmann 8
1) Einführung<br />
2) System-Architektur<br />
3) Hohe Verfügbarkeit<br />
4) Performance<br />
5) Fazit<br />
Inhalt<br />
15.12.2008 Philipp Bachmann 9
Allgemeines zur Architektur<br />
3 Knotentypen<br />
Data Node: Speichert<br />
und repliziert Daten<br />
Application Node:<br />
Verarbeitet Daten<br />
Management Node<br />
Shared Nothing Architektur<br />
Transporter: TCP/IP, SCI,<br />
Shared Memory<br />
<strong>MySQL</strong> <strong>Cluster</strong><br />
NDB API<br />
NDB Storage Engine<br />
15.12.2008 Philipp Bachmann 10
Management Node<br />
Nodes beziehen <strong>Cluster</strong>-Konfiguration vom MGM Node<br />
Nur beim Starten/Rekonfigurieren von Nodes benötigt<br />
Kein schneller Rechner nötig<br />
Arbiterfunktion im Fehlerfall<br />
Backup-MGM Nodes möglich<br />
Administration des <strong>Cluster</strong>s über MGM-Konsole<br />
show status<br />
shutdown<br />
Config<br />
Config<br />
15.12.2008 Philipp Bachmann 11
Data Node<br />
Speichert Datensätze in<br />
a) RAM<br />
b) RAM + HDD (mit Page Cache)<br />
Partitioning: Zeilen einer Tabelle auf Data Nodes verteilen<br />
per Hash-Funktion: MD5(Primary Key)<br />
Transaction Coordinator (TC)<br />
Tabellen<br />
Bearbeitet eine Transaktion eines SQL Nodes<br />
Wickelt COMMIT und ROLLBACK ab<br />
Data Req.<br />
Data<br />
Local Query Handler: Bearbeitet Anfragen von TCs<br />
Checkpoints zum Speichern der Daten auf HDD<br />
Verarbeitung<br />
der Daten<br />
15.12.2008 Philipp Bachmann 12
Transaction Coordinator<br />
Erste Anfrage einer Transaktion bestimmt Position des TC<br />
Bei Zugriff über Primary Key<br />
Application Node berechnet MD5(Primary Key)<br />
Abbildungsfunktion liefert Data Node mit Daten<br />
TC auf diesem platziert<br />
Ansonsten: Round Robin Verfahren<br />
START TRANSACTION<br />
SELECT * FROM tblArtikel WHERE AritkelNr=23<br />
…<br />
COMMIT<br />
MD5(23) → Data Node 2<br />
Transaction<br />
Coordinator<br />
ArtikelNr …<br />
6 ...<br />
17 ...<br />
ArtikelNr<br />
…<br />
23 ...<br />
29 ...<br />
15.12.2008 Philipp Bachmann 13
Application Node<br />
Normaler <strong>MySQL</strong> Server<br />
Standard SQL Interface<br />
Interner Zugriff auf NDB<br />
Storage Engine über NDB API<br />
Alternative: Zugriff über NDB API<br />
NDB Storage Engine<br />
Für C++ (NDB API) und Java (NDB/J) vorhanden<br />
Mehr als 3 mal so schnell, jedoch kein SQL<br />
Kombination sinnvoll<br />
Java<br />
Applikation<br />
SQL<br />
<strong>MySQL</strong><br />
Server<br />
NDB API<br />
<strong>MySQL</strong> Server: Auswertungen und Wartung<br />
NDB API: Performance-kritische Anfragen<br />
NDB API<br />
Load Balancing (extern) bei mehreren Application Nodes<br />
Java<br />
Applikation<br />
NDB API<br />
15.12.2008 Philipp Bachmann 14
PHP<br />
Skript<br />
1<br />
Transaction<br />
Coordinator<br />
Auto, Buch, DVD, Wein<br />
SELECT ArtikelBez<br />
FROM tblArtikel<br />
ORDER BY ArtikelBez<br />
Beispielanfrage<br />
Auswahl nach<br />
Round Robin<br />
5<br />
3<br />
6<br />
2<br />
Auto, Wein,<br />
DVD, Buch<br />
DVD, Buch<br />
tblArtikel: tblArtikel:<br />
<strong>MySQL</strong> <strong>Cluster</strong><br />
ArtikelNr ArtikelBez …<br />
ArtikelNr ArtikelBez …<br />
1 Auto …<br />
5 DVD ...<br />
2 Wein ...<br />
6 Buch ...<br />
15.12.2008 Philipp Bachmann 15<br />
4<br />
Local<br />
Query<br />
Handler
1) Einführung<br />
2) System-Architektur<br />
3) Hohe Verfügbarkeit<br />
4) Performance<br />
5) Fazit<br />
Inhalt<br />
15.12.2008 Philipp Bachmann 16
Ziel: 99.999% Verfügbarkeit<br />
Hohe Verfügbarkeit<br />
Problem: Ausfall von Knoten oder Netzwerkverbindungen<br />
Strategie<br />
Fehlerfall erkennen<br />
Betrieb aufrecht erhalten<br />
Bedingung: Kopie der Daten vorhanden<br />
a) Innerhalb des <strong>Cluster</strong>s<br />
b) In anderem Ersatz-<strong>Cluster</strong><br />
Normalbetrieb wiederherstellen<br />
15.12.2008 Philipp Bachmann 17
Synchronous Replication<br />
Replik auf andere Data Nodes des <strong>Cluster</strong><br />
Synchronous: Warte bis Daten auf anderen Data Node<br />
kopiert wurden<br />
Sehr kurze Failover Time: < 1s<br />
Erhöhte Response Zeit bei Anfragen<br />
Two Phase Commit Protocol (Update und Commit)<br />
0 bis 4 Repliken wählbar<br />
Node <strong>Group</strong>: Satz von Data Nodes, die alle die gleichen<br />
Daten speichern<br />
15.12.2008 Philipp Bachmann 18
tblArtikel<br />
Auto<br />
Buch<br />
PC<br />
Mixer<br />
Synchronous Replication<br />
NumOfReplicas = 2<br />
Node <strong>Group</strong> 1<br />
tblArtikel<br />
Auto<br />
Buch<br />
PC<br />
Mixer<br />
Primäre Replik Sekundäre Replik<br />
tblArtikel<br />
DVD<br />
Wein<br />
Node <strong>Group</strong> 2<br />
tblArtikel<br />
DVD<br />
Wein<br />
15.12.2008 Philipp Bachmann 19
tblArtikel<br />
Auto<br />
Buch<br />
PC<br />
Mixer<br />
Transaction<br />
Coordinator<br />
Update :<br />
Commit:<br />
Synchronous Replication<br />
NumOfReplicas = 2<br />
Node <strong>Group</strong> 1<br />
tblArtikel<br />
Auto<br />
Buch<br />
PC<br />
Mixer<br />
2<br />
Primäre Replik Sekundäre Replik<br />
5<br />
tblArtikel<br />
DVD<br />
Wein<br />
CD<br />
Node <strong>Group</strong> 2<br />
tblArtikel<br />
DVD<br />
Wein<br />
CD<br />
6<br />
Local Query<br />
....<br />
1<br />
Handlers<br />
INSERT INTO tblArtikel (ArtikelNr, AritkelBez, ...) VALUES (7, 'CD', …)<br />
COMMIT<br />
15.12.2008 Philipp Bachmann 20<br />
3<br />
4
tblArtikel<br />
Auto<br />
Buch<br />
PC<br />
Mixer<br />
Transaction<br />
Coordinator<br />
Update :<br />
Commit:<br />
Synchronous Replication<br />
NumOfReplicas = 2<br />
Node <strong>Group</strong> 1<br />
tblArtikel<br />
Auto<br />
Buch<br />
PC<br />
Mixer<br />
4<br />
2a<br />
Primäre Replik Sekundäre Replik<br />
3a<br />
tblArtikel<br />
DVD<br />
Wein<br />
CD<br />
Node <strong>Group</strong> 2<br />
tblArtikel<br />
DVD<br />
Wein<br />
CD<br />
....<br />
1<br />
INSERT INTO tblArtikel (ArtikelNr, AritkelBez, ...) VALUES (7, 'CD', …)<br />
COMMIT<br />
15.12.2008 Philipp Bachmann 21<br />
2b<br />
3b
Row-based Replication<br />
Repliziere Daten von einem <strong>MySQL</strong> Server/<strong>Cluster</strong> zu<br />
einem anderem <strong>MySQL</strong> Server/<strong>Cluster</strong><br />
Anwendungen<br />
Hohe Verfügbarkeit<br />
<strong>MySQL</strong> <strong>Cluster</strong> → <strong>MySQL</strong> <strong>Cluster</strong><br />
Für Wartungs- und Auswertungsarbeiten<br />
Testumgebung<br />
Geographische Replikation<br />
Entferntes Rechenzentrum<br />
Read/Write Scalability<br />
15.12.2008 Philipp Bachmann 22
Row-based Replication<br />
Row-based: Änderungen in einzelnen Zeilen werden<br />
repliziert<br />
Master/Slave Architektur<br />
Hierarchien möglich<br />
Asychronous: Keine Garantie, dass Slave schon<br />
Änderungen des Masters übernommen hat (z.B. Lag)<br />
Mehrere Replication Channel<br />
NDB binlog injector thread<br />
Läuft auf dem Replication Master (<strong>MySQL</strong> Server)<br />
Empfängt alle Änderungen von der NDB Storage-<br />
Engine und erzeugt binlog<br />
15.12.2008 Philipp Bachmann 23
Quelle: [1]<br />
Row-based Replication<br />
15.12.2008 Philipp Bachmann 24
Verbindungsprobleme<br />
Fehlerdetektion<br />
Bemerkt von anderen Knoten<br />
Heartbeat Protocol: Hohe Auslastung, Speicherprobleme<br />
Anordnung der Data Nodes als Ring<br />
3 fehlende Heartbeats<br />
=> Node ausgefallen<br />
Andere Knoten werden über<br />
Ausfall informiert<br />
15.12.2008 Philipp Bachmann 25
Network Partition Protocol<br />
Prüft ob Netzwerk in 2 Teile aufgespaltet wurde<br />
Ziel: Dateninkonsistenz vermeiden bei Split-Brain Szenario<br />
Teilnetz wird als <strong>Cluster</strong> angesehen falls:<br />
Mehr als Hälfte der Data Nodes im Teilnetz<br />
Bei genau der Hälfte entscheidet Arbiter<br />
NumOfReplicas = 3<br />
Node <strong>Group</strong> 1<br />
Node <strong>Group</strong> 2<br />
15.12.2008 Philipp Bachmann 26
Fehlerszenarien<br />
MGM Node: Bei Bedarf neu starten<br />
Application Node<br />
Data Node<br />
Applikation nutzt anderen Application Node<br />
Fehlerhafter Knoten verbindet sich neu zum <strong>Cluster</strong><br />
Anfragen gehen an anderen Data Node der Node<br />
<strong>Group</strong> (Replika vorhanden)<br />
Laufende Transaktionen des Data Nodes werden<br />
abgebrochen und Applikation startet sie erneut<br />
Ausgefallener Knoten bezieht seine Partition von<br />
anderem Knoten der Node<strong>Group</strong><br />
15.12.2008 Philipp Bachmann 27
1) Einführung<br />
2) System-Architektur<br />
3) Hohe Verfügbarkeit<br />
4) Performance<br />
5) Fazit<br />
Inhalt<br />
15.12.2008 Philipp Bachmann 28
Performance<br />
Operationen auf einzelnen Datensätzen sehr schnell<br />
z.B: INSERT INTO tblArtikel (51, 'CD', ...)<br />
Batching<br />
Parallele Ausführung<br />
Skaliert mit Anzahl Data und Application Nodes<br />
Latenz durch Replikation und Architektur<br />
Langsamer als andere Storage Engines<br />
SELECT * FROM tblArtikel WHERE ArtikelNr IN<br />
(1,2,3,4,5,6,7,8,9,10)<br />
Spart Latenz und Query Parsing/Optimization<br />
2-3 mal so schnell<br />
15.12.2008 Philipp Bachmann 29
PHP<br />
Skript<br />
1<br />
Transaction<br />
Coordinator<br />
tblArtikel:<br />
Condition Pushdown<br />
CD, DVD<br />
SELECT ArtikelBez<br />
FROM tblArtikel<br />
WHERE TypNr = '42'<br />
Auswahl nach<br />
Round-Robin<br />
5<br />
3<br />
6<br />
2<br />
CD, DVD<br />
DVD<br />
Parallele<br />
Suche<br />
<strong>MySQL</strong> <strong>Cluster</strong><br />
15.12.2008 Philipp Bachmann 30<br />
4<br />
Übernimmt<br />
Verarbeitung<br />
tblArtikel:<br />
ArtikelNr ArtikelBez TypNr …<br />
ArtikelNr ArtikelBez TypNr …<br />
1 Auto 87 …<br />
5 Mixer 2 …<br />
2 CD 42 ...<br />
34 DVD 42 ...
Join<br />
SELECT * FROM tblBestellung AS b INNER JOIN tblArtikel AS a<br />
WHERE a.ArtikelNr = b.ArtikelNr AND b.BestellNr = 42<br />
Join wird im <strong>MySQL</strong> Server berechnet<br />
Komplette Tabelle Artikel benötigt<br />
Erfordert hohe Bandbreite<br />
Extrem langsam<br />
➔ Joins wenn möglich vermeiden<br />
Verknüpfung<br />
der Tabellen<br />
Data Request<br />
tblBestellung<br />
mit Nr = 42 tblArtikel<br />
NDB<br />
STORAGE<br />
ENGINE<br />
tblArtikel<br />
15.12.2008 Philipp Bachmann 31
3 Schichten der Skalierbarkeit<br />
Applikation Applikation Applikation<br />
NDB <strong>Cluster</strong><br />
Applikationsschicht<br />
<strong>MySQL</strong> Schicht<br />
Data Node Schicht<br />
15.12.2008 Philipp Bachmann 32
DBT2 Benchmark<br />
Freie Implementierung des TPC-C Tests<br />
Spezielle Version für <strong>MySQL</strong> <strong>Cluster</strong><br />
Simuliert typische e-Commerce Anwendung<br />
Großhandel mit mehreren Warenlagern und<br />
Verkaufsgebieten<br />
Zufällige Auswahl von 5 Transaktionstypen<br />
New Order, Delivery, Order Status, Payment,<br />
Stock Level<br />
Je 10-20 SQL Anweisungen<br />
Ergebnis: New Order Transactions Per Minute (NOTPM)<br />
15.12.2008 Philipp Bachmann 33
NOTPM<br />
20000<br />
18000<br />
16000<br />
14000<br />
12000<br />
10000<br />
8000<br />
6000<br />
4000<br />
2000<br />
0<br />
Benchmark Results<br />
NoOfReplicas 2 NoOfReplicas 4<br />
+90%<br />
+72%<br />
0 1 2 3 4 5 6<br />
<strong>MySQL</strong> Servers<br />
Avg. Resp. Time: 42 ms<br />
+64%<br />
Avg. Resp. Time: 50ms<br />
4 Data Nodes, 1 MGM Node, 1 Warenlager pro <strong>MySQL</strong> Server, 10 Terminals pro Warenlager<br />
Gigabit Ethernet, AMD Opteron Prozessor 2.2 Ghz, 4 GB RAM<br />
15.12.2008 Philipp Bachmann 34
NOTPM<br />
30000<br />
25000<br />
20000<br />
15000<br />
10000<br />
5000<br />
Benchmark Results<br />
4 <strong>MySQL</strong> Server #<strong>MySQL</strong>=#Data Nodes<br />
+9%<br />
+83%<br />
0<br />
0 1 2 3 4 5 6<br />
Data Nodes<br />
NoOfReplicas 1, 1 MGM Node, 2 Warenlager pro <strong>MySQL</strong> Server, 10 Terminals pro Warenlager<br />
Gigabit Ethernet, AMD Opteron Prozessor 2.2 Ghz, 4 GB RAM<br />
15.12.2008 Philipp Bachmann 35
Fazit<br />
Nicht geeignet für viele typische DB Anwendungen<br />
Komplexe Joins, Latenz<br />
Anpassung an <strong>Cluster</strong>-Architektur nötig<br />
Sehr hohe Verfügbarkeit<br />
Nach Anpassung:<br />
Gute Skalierbarkeit<br />
Gute Performance<br />
Eingesetzt von Neckermann, Nokia, Alcatel-Lucent, Italtel, Toto-Lotto Niedersachsen<br />
15.12.2008 Philipp Bachmann 36
Quellen (1/2)<br />
[1] <strong>MySQL</strong> <strong>Cluster</strong> New Features - Updated for 6.2 and 6.3<br />
http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster63.php<br />
[2] <strong>MySQL</strong> <strong>Cluster</strong>ing<br />
Alex Davies, Harrison Fisk<br />
<strong>MySQL</strong> Press - 2006<br />
[3] High Performance <strong>MySQL</strong>: Optimization, Backups, Replication, and More<br />
Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, and Jeremy Zawodny<br />
O'Reilly Media, Inc. - 2008<br />
[4] <strong>MySQL</strong> 5.1 <strong>Cluster</strong> DBA Certification Study Guide<br />
Jon Stephens, Mike Kruckenberg, Roland Bouman, Stewart Smith, Solomon Chang<br />
Lulu Enterprises - 2007<br />
[5] <strong>MySQL</strong> 5.1 Reference Manual<br />
http://dev.mysql.com/doc/refman/5.1/en/index.html<br />
15.12.2008 Philipp Bachmann 37
Quellen (2/2)<br />
[6] <strong>MySQL</strong> <strong>Cluster</strong> <strong>Architecture</strong> Overview - High Availability Features of <strong>MySQL</strong> <strong>Cluster</strong><br />
http://www.mysql.com/why-mysql/white-papers/cluster-technical.php<br />
[7] <strong>MySQL</strong> <strong>Cluster</strong> Evaluation Guide - Getting the most out of a <strong>MySQL</strong> <strong>Cluster</strong> evaluation<br />
http://www.mysql.com/why-mysql/white-papers/mysql_cluster_eval_guide.php<br />
[8] A Guide to High Availability <strong>Cluster</strong>ing - How <strong>MySQL</strong> Supports 99.999% Availability<br />
http://www.mysql.com/why-mysql/white-papers/cluster.php<br />
[9] Benchmarking Highly Scalable <strong>MySQL</strong> <strong>Cluster</strong>s - Measuring the performance of highly scalable<br />
<strong>MySQL</strong> <strong>Cluster</strong>s on Multi Core Intel Xeon servers with Dolphin Express interconnect<br />
http://www.mysql.com/why-mysql/white-papers/mysql_cge_benchmarks_wp_april2007.php<br />
[10] neckermann.de achieves cost-effective - database scalability with <strong>MySQL</strong> <strong>Cluster</strong><br />
http://www.mysql.com/why-mysql/case-studies/mysql_cs_neckermann.pdf<br />
Alle Onlinequellen zuletzt besucht am 23.11.2008.<br />
15.12.2008 Philipp Bachmann 38
Distribution Awareness<br />
Ziel: Latenz vermeiden<br />
Strategie: Datenlokalität ausnutzen<br />
Beispiel: Bestellungen eines Kunden auf selben Data Node<br />
PRIMARY KEY(BestellNr, KundenNr);<br />
PARTITION BY KEY (KundenNr);<br />
TC wird auf Data Node mit Daten platziert<br />
Keine Kommunikation mit anderen Data Nodes nötig<br />
Bei 4 Data Nodes um 30%, bei ≥ 8 100%-200% schneller<br />
15.12.2008 Philipp Bachmann 39