MySQL Cluster: HA als StorageEngine - ??What About Hochverfugbarkeit mit MySQL Topic Wir wollen...

download MySQL Cluster: HA als StorageEngine - ??What About Hochverfugbarkeit mit MySQL Topic Wir wollen Hochverf ugbarkeit Daten Service Und wie erreichen? Erkan Yanar ( ) MySQL Cluster: HA

of 52

  • date post

    06-Mar-2018
  • Category

    Documents

  • view

    225
  • download

    5

Embed Size (px)

Transcript of MySQL Cluster: HA als StorageEngine - ??What About Hochverfugbarkeit mit MySQL Topic Wir wollen...

  • MySQL Cluster: HA als StorageEngine

    Erkan Yanar

    linsenraum.de

    25. April 2012

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 1 / 34

  • What About

    Hochverfugbarkeit mit MySQL

    Topic

    Wir wollen Hochverfugbarkeit

    Daten

    Service

    Und wie erreichen?

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 2 / 34

  • Datenredundanz/Verfugbarkeit Replication

    Losungsmoglichkeiten:

    HA auf Basis von Replikation

    Replikation

    Datenredundanz

    Slave read only(Scaleout)

    HA

    Daten redundant?

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 3 / 34

  • Datenredundanz/Verfugbarkeit Replication

    Losungsmoglichkeiten:

    HA auf Basis von Replikation

    Replikation

    Datenredundanz

    Slave read only(Scaleout)

    HA

    Daten redundant?

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 3 / 34

  • Datenredundanz/Verfugbarkeit Replication

    Losungsmoglichkeiten:

    HA auf Basis von Replikation

    Replikation

    Datenredundanz

    Slave read only(Scaleout)

    HA

    Daten redundant?

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 3 / 34

  • Datenredundanz/Verfugbarkeit Replication

    Losungsmoglichkeiten:

    HA auf Basis von Replikation

    Replikation

    Datenredundanz

    Slave read only(Scaleout)

    HA

    Daten redundant?

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 3 / 34

  • Datenredundanz/Verfugbarkeit Replication

    Sicherheit semisync vs. Performance async

    Failover

    Daten

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 4 / 34

  • Datenredundanz/Verfugbarkeit Blocklevel

    Blocklevel

    2 Nodes Limit

    Nur ein Rechner

    Failover

    Daten

    Recoverydowntime

    Keine Skalierung

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 5 / 34

  • Datenredundanz/Verfugbarkeit Blocklevel

    Blocklevel

    2 Nodes Limit

    Nur ein Rechner

    Failover

    Daten

    Recoverydowntime

    Keine Skalierung

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 5 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Modulares MySQL

    Storage Engine

    Authentication

    INFORMATION SCHEMA

    General

    Replication

    Audit

    . . .

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 6 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Modulares MySQL

    Storage Engine

    Authentication

    INFORMATION SCHEMA

    General

    Replication

    Audit

    . . .

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 6 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Local Storage Engine

    CREATE TABLE tablename (...) ENGINE=...

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 7 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Storage Engines

    CREATE TABLE tablename (...) ENGINE=...

    Local Storage

    INNODB/XtraDB

    MYISAM

    Aria

    PBXT

    OQGraph

    . . .

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 8 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Weite Welt

    CREATE TABLE tablename (...) ENGINE=...

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 9 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Network Storage

    FedratedX

    SpiderSE

    NDB (Network Database)

    CREATE TABLE tbl a(col a int,col b int,PRIMARY KEY(col a))ENGINE = FEDERATEDCONNECTIONmysql://ich:auch@10.10.10.24/db/tbl a;

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 10 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Network Storage

    FedratedX

    SpiderSE

    NDB (Network Database)

    CREATE TABLE tbl a( col a int, col b int, PRIMARY KEY(col a))ENGINE = SPIDERCONNECTION table tbl a, user ich, password auch PARTITION BY RANGE( col a ) (PARTITION p1 VALUES LESS THAN (1000) COMMENT host 192.168.178.25,PARTITION p2 VALUES LESS THAN (2000) COMMENT host 192.168.178.26,PARTITION p3 VALUES LESS THAN (MAXVALUE) COMMENT host 192.168.178.27 );

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 10 / 34

  • Datenredundanz/Verfugbarkeit StorageEngines

    Network Storage

    FedratedX

    SpiderSE

    NDB (Network Database)

    CREATE TABLE imha ( . . . ) ENGINE=NDB;

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 10 / 34

  • MySQL Cluster

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 11 / 34

  • MySQL Cluster

    Network Storage

    Speicher Engine

    Shared Nothing

    HA: 99,999%

    ACID

    READ COMMITTED

    Row Locking

    Two Phase Commit

    Keine FK

    Key/Value Applikation!

    ALTER TABLE . . . ENGINE=NDB

    Hash-Partitionierung/Sharding

    Durchsatz, Parallelitat

    Scaleout

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 12 / 34

  • MySQL Cluster Komponenten

    Komponenten

    ndb(mt)d

    mgmd

    MySQL/API

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 13 / 34

  • MySQL Cluster Komponenten

    Komponenten

    ndb(mt)d

    mgmd

    MySQL/API

    Datenknoten

    Partitionierung/Redundanz

    2-Phase-Commit

    Failover

    max. 48 Nodes

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 13 / 34

  • MySQL Cluster Komponenten

    Komponenten

    ndb(mt)d

    mgmd

    MySQL/API

    Managementdeamon/knoten:

    Konfiguration

    Logging

    Arbitrator

    Managementinterface

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 13 / 34

  • MySQL Cluster Komponenten

    Komponenten

    ndb(mt)d

    mgmd

    MySQL/API

    API

    Kommunikation via ndb-api

    ENGINE=NDB

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 13 / 34

  • MySQL Cluster NoOfReplicas

    Implementing HA

    ndb(mt)d

    NoOfReplicas

    Primary lead

    Failover

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 14 / 34

  • MySQL Cluster 2PC

    Impelenting HA: 2PC

    Datenkonsitenz a la 2PC

    TransactionCoordinator

    Prepare

    Commit

    Latenz

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 15 / 34

  • MySQL Cluster 2PC

    Impelenting HA: 2PC

    100.000 Inserts:

    InnoDB 0m7.911s

    NDB 1m47.806s

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 15 / 34

  • MySQL Cluster Changing Data

    INSERT/UPDATE

    Changing Data

    Parallel Inserts

    Parallel Updates

    Multi Data-Nodes

    Multi Api-Nodes!

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 16 / 34

  • MySQL Cluster SELECTs

    SELECT

    NDB SELECTs

    Key Lookups

    Nested Loop Join

    Push-Down-Join (SPJ)

    Parallel Scans

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 17 / 34

  • MySQL Cluster SELECTs

    a SELECT id2 FROM a WHERE id=@a; 100.000 x uniform

    b SELECT COUNT(*) FROM a JOIN b using (id);

    c SELECT COUNT(*) FROM a JOIN b using (id) where a.id=100; 100.000x

    d SELECT COUNT(id2) FROM a JOIN b using (id2) where a.id=1000;

    Query InnoDB 5.5.20 ndb 7.1.0 ndb 7.2.5

    a 8.526s 29.290s 29.290s

    b 0.130s 16.290s 0.750sc 8.131s 40.285s 44.043sd 34.844s 560.717s 559.317s

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 18 / 34

  • MySQL Cluster SELECTs

    a SELECT id2 FROM a WHERE id=@a; 100.000 x uniform

    b SELECT COUNT(*) FROM a JOIN b using (id);

    c SELECT COUNT(*) FROM a JOIN b using (id) where a.id=100; 100.000x

    d SELECT COUNT(id2) FROM a JOIN b using (id2) where a.id=1000;

    Query InnoDB 5.5.20 ndb 7.1.0 ndb 7.2.5

    a 8.526s 29.290s 29.290sb 0.130s 16.290s SPJ 0.750s

    c 8.131s 40.285s 44.043sd 34.844s 560.717s 559.317s

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 18 / 34

  • MySQL Cluster SELECTs

    a SELECT id2 FROM a WHERE id=@a; 100.000 x uniform

    b SELECT COUNT(*) FROM a JOIN b using (id);

    c SELECT COUNT(*) FROM a JOIN b using (id) where a.id=100; 100.000x

    d SELECT COUNT(id2) FROM a JOIN b using (id2) where a.id=1000;

    Query InnoDB 5.5.20 ndb 7.1.0 ndb 7.2.5

    a 8.526s 29.290s 29.290sb 0.130s 16.290s 0.750sc 8.131s 40.285s 44.043s

    d 34.844s 560.717s 559.317s

    Erkan Yanar (linsenraum.de) MySQL Cluster: HA als StorageEngine 25. April 2012 18 / 34

  • MySQL Cluster SELECTs

    a SELECT id2 FROM a WHERE id=@a; 100.000 x uniform

    b SELECT COUNT(*) FROM a JOIN b using (id);

    c SELECT COUNT(*) FROM a JOIN b using (id) where a.id=100; 100.000x

    d SELECT COUNT(id2) FROM a JOIN b using (id2) where a.id=1000;

    Query InnoDB 5.5.20 ndb 7.1.0 ndb 7.2.5

    a 8.526s 29.290s 29.290sb 0.130s 16.290s 0.750sc 8.131s 40.285s 44.043sd 34.844s 560.717s 559.317s

    Erkan Yanar (linsenraum.de) MySQL Cluster: