MySQL Cluster: HA als StorageEngine - · PDF fileWhat About Hochverfugbarkeit mit MySQL Topic...

Post on 06-Mar-2018

228 views 5 download

Transcript of MySQL Cluster: HA als StorageEngine - · PDF fileWhat About Hochverfugbarkeit mit MySQL Topic...

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 = FEDERATEDCONNECTION’mysql://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: 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: HA als StorageEngine 25. April 2012 18 / 34

MySQL Cluster Making the whole Cluster HA

Begrenztes HA

HA der MySQLd?

Loadbalancer

Connectoren

Pacemaker

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

NDB best used for:

UseCases

Viele kleine Trans.

Key/Value Lookups

HA

Hoher Durchsatz

Telco

Gaming

. . .

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

Memory

Memory Only NDB

Speicheraufteilung

IndexMemory

DataMemory

Hard Limit

UNIQUE/PK Indices

Indices und Data

Pages stick to table

Kein Auslagern

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

Memory

Memory Only NDB

Speicheraufteilung

IndexMemory

DataMemory

Hard Limit

UNIQUE/PK Indices

Indices und Data

Pages stick to table

Kein Auslagern

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

Memory

Memory Only NDB

Speicheraufteilung

IndexMemory

DataMemory

Hard Limit

UNIQUE/PK Indices

Indices und Data

Pages stick to table

Kein Auslagern

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

Memory Fixed Arrays

Frohliches Konfigurieren

IndexMemory PK, UNIQUE

DataMemory Data, (Ordered) Indices,

StringMemory Out of string memory, ...Permanent error: Schema error

MaxNoOfOrderedIndexes Maximale Zahl der Ordered Indices

MaxNoOfAttributes Max. Tabellen, Indices, Columns etc.

MaxNoOfUniqueHashIndexes Max. Unique Indices die nicht PK sind.

MaxNoOfConcurrentOperations Operation Records in TC1KB

ndb config -f: -q Id,MaxNoOfConcurrentOperations

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

Memory Memory hitting Disk

Und was ist mit Disk?

Disk IO!

MySQL Cluster schreibt inDiskCheckpointSpeed DataMemory (alsLCP) mit TimeBetweenLocalCheckpointsAbstand auf die Disk.

Das Redo Log (NoOfFragmentLoges *

FragmentLogFileSize) muss groß genug

sein, um die Anderungen wahrend 2x LCP

zu speichern.

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

Konfiguration

MySQL Cluster: Konfiguration

config.ini

Verwaltet vom mgmd

Definiert Mitglieder

Konfiguriert Teilnehmer

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

Konfiguration

StartUp

host1# ndb_mgmd [--initial] --config-file=/tmp/config.ini

host2# ndbd [--initial] --ndb-connectstring=host1

host3# ndbd [--initial] --ndb-connectstring=host1

host4# mysqld --ndb-connectstring=host1

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

Konfiguration

config.ini

[NDB_MGMD]

HostName = 10.10.10.23

NodeID = 1

[NDBD DEFAULT]

NoOfReplicas = 2

DataDir = /data/cluster

IndexMemory = 20M

DataMemory = 100M

[NDBD]

NodeID = 21

HostName = 10.10.10.21

[NDBD]

NodeID = 22

HostName = 10.10.10.22

[mysqld]

NodeID = 60

HostName = 10.10.10.20

[mysqld]

NodeID = 61

HostName = 10.10.10.24

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

Konfiguration

config.ini

[NDB_MGMD]

HostName = 10.10.10.23

NodeID = 1

[NDBD DEFAULT]

NoOfReplicas = 2

DataDir = /data/cluster

IndexMemory = 20M

DataMemory = 100M

NoOfFragmentLogFiles = 32 # 32 * (16M*4)

TimeBetweenLocalCheckpoints = 20 # 20=4MB,21=8MB,22=16MB

TimeBetweenGlobalCheckpoints = 2000

#ndbmtd: MaxNoOfExecutionThreads

# cores value

# 2 2 -> 1LQH

# 4 4 -> 2LQH

# 8 8 -> 4LQH

# Partitionen= 8*LQH

# Partition = 46.137.488 Rows

[NDBD]

NodeID = 21

HostName = 10.10.10.21

[NDBD]

NodeID = 22

HostName = 10.10.10.22

[mysqld]

NodeID = 60

HostName = 10.10.10.20

[mysqld]

NodeID = 61

HostName = 10.10.10.24

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

Konfiguration

Prozesskonfig in my.cnf

[mysqld]

ndbcluster

ndb-cluster-connection-pool = 1

[mysql_cluster]

ndb-connectstring = 10.10.10.23

[ndb_mgmd]

configdir = /data/cluster

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

Maintenance Rolling Restart

Rolling Restarts/Upgrades

Cluster muss oft restartet werden :(

Service soll HA sein.

auch bei Upgrades!

Solution: Rolling Rolling Rolling . . .

Rolling Restart halt die Datennodes hochverfugbar.

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

Maintenance Rolling Restart

Rolling Restarts/Upgrades

Cluster muss oft restartet werden :(

Service soll HA sein.

auch bei Upgrades!

Solution: Rolling Rolling Rolling . . .

Rolling Restart halt die Datennodes hochverfugbar.

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

Maintenance Rolling Restart

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

Maintenance Rolling Restart

Online Operations

ROLLING RESTART

ADD INDEX

DROP INDEX

ADD COLUMN

BACKUP

ADD/CREATENODEGROUP

REORGANIZEPARTITION

SW-UPGRADE

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

Ignored

Lost

TableSpace

(WAN) Replication

memcached-api

mod ndb

. . .

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

Maintenance

Wofur kann man die Losung gut gebrauchen?

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

Maintenance

Ende Gelande

Morgen Galera Cluster: (fast) alles besser!

Erkan Yanarerkan.yanar@linsenraum.de. . .linsenraum.de/erkuleswww.xing.com/profile/Erkan Yanar

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