Geert Vanderkelen MySQL Cluster
Geert Vanderkelen MySQL Cluster
Geert Vanderkelen
MySQL Senior Support Engineer
Sun Microsystems
httpd
mysqld
CREATE TABLE `php_session` (
`id` CHAR(32) PRIMARY KEY,
`data` TEXT,
`expires` DATETIME,
) ENGINE=MyISAM
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Quick Intro: Scaling Out
MySQL
httpd httpd
loadbalancer
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Quick Intro: Adding Cluster
ndbd ndbd
httpd httpd
mysqld mysqld
loadbalancer
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Quick Intro: Adding Cluster
ndbd ndbd
loadbalancer
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Quick Intro: Using NDB API
ndbd ndbd
httpd httpd
ndbapi ndbapi
loadbalancer
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
What Is MySQL Cluster?
• Distributed, in-memory storage
> On disk is possible
• High Availability
> Shared-nothing architecture
> Hot backup
> Online upgrade
• Transactional
• ACID
> Two-phase commit
> Local and Global checkpointing
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
What Is MySQL Cluster? (2)
• Performance
> in-memory == fast
> high network latency == slow
• Scalable
> max. 48 data nodes
> 255 total nodes
• NDB Storage Engine
> ALTER TABLE t ENGINE=ndbcluster
• Geographical replication
> Using Row-Based MySQL Replication
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
MySQL Cluster Components
PHP Glassfish Connector/* NDB API
SQL Nodes
(mysqld)
NDB API
Management
(ndb_mgmd)
Data Nodes
(ndbd)
ndbd 1 ndbd 2
Node Group 1
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Data Distribution: 2 Data Nodes
employees
1 Jan 500
2 Geert 400 F1
3 Michel 500
4 Jeanne 900
5 Greet 100
6 Michelle 400 F2
7 Jackie 100
8 Samuel 500
ndbd 1 ndbd 2
Node Group 1
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Data Distribution: 2 Data Nodes
employees
1 Jan 500
2 Geert 400 F1
3 Michel 500
4 Jeanne 900
5 Greet 100
6 Michelle 400 F2
7 Jackie 100
8 Samuel 500
F1 F2
ndbd 1 ndbd 2
Node Group 1
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Data Distribution: 2 Data Nodes
employees
1 Jan 500
2 Geert 400 F1
3 Michel 500
4 Jeanne 900
5 Greet 100
6 Michelle 400 F2
7 Jackie 100
8 Samuel 500
F1 F2
ndbd 1 ndbd 2
F2 F1
Node Group 1
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Data Distribution: 2 Data Nodes
employees
1 Jan 500
2 Geert 400 F1
3 Michel 500
4 Jeanne 900
5 Greet 100
6 Michelle 400 F2
7 Jackie 100
8 Samuel 500
F1 F2
ndbd 1 ndbd 2
F2 F1
Fx - primary replica
Fx - secondary replica Node Group 1
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Data Distribution: 4 Data Nodes
employees
1 Jan 500
2 Geert 400
3 Michel 500
4 Jeanne 900
5 Greet 100
6 Michelle 400
7 Jackie 100
8 Samuel 500
F1 F3
ndbd 1 ndbd 2 ndbd 3 ndbd 4
F1 F3 F2 F4
ndbd 1 ndbd 2 ndbd 3 ndbd 4
F1 F3 F2 F4
ndbd 1 ndbd 2 ndbd 3 ndbd 4
F3 F1 F4 F2
Node Group 1 Node Group 2
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Data Distribution: 4 Data Nodes
employees
1 Jan 500
2 Geert 400 F1
3 Michel 500
4 Jeanne 900 F2
5 Greet 100
F3
6 Michelle 400
7 Jackie 100 F4
8 Samuel 500
Host A Host B
F1 F3 F2 F4
NG 1 ndbd 1 ndbd 2 ndbd 1 ndbd 2 ndbd 3 ndbd 4
F3 F1 F4 F2
NG 2 ndbd 3 ndbd 4
Node Group 1 Node Group 2
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Failure Handling
[ndbd default]
PHP GlassFish Connector/*
NoOfReplicas = 2
DataMemory = 400M
IndexMemory = 32M
DataDir = /var/lib/mysqlcluster/
[ndb_mgmd]
DataDir = /var/lib/mysqlcluster/ SQL Nodes
HostName = 192.168.0.42 (mysqld)
ndb_mgmd
[ndbd]
HostName = 192.168.0.40
[ndbd]
HostName = 192.168.0.41
Data Nodes
[mysqld] (ndbd)
HostName = 192.168.0.42
[mysqld]
[api]
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Failure Handling: SQL Node
• Apps handle failover PHP Glassfish Connector/*
• Transactions aborted
> Need retry
SQL Nodes
(mysqld)
ndb_mgmd
Data Nodes
(ndbd)
• Transactions aborted
> Need retry
SQL Nodes
(mysqld)
ndb_mgmd
Data Nodes
(ndbd)
Data Nodes
(ndbd)
Data Nodes
(ndbd)
• Logging stops
• Needed for node restart
SQL Nodes
(mysqld)
ndb_mgmd
Data Nodes
(ndbd)
• Logging stops
• Needed for node restart
SQL Nodes
(mysqld)
ndb_mgmd
Data Nodes
(ndbd)
binlog
NDB API
binlog
binlog relaylog
NDB API
binlog relaylog
binlog relaylog
Channel 1
NDB API
binlog relaylog
binlog relaylog
Channel 1
NDB API
binlog relaylog
binlog relaylog
Channel 1
Channel 2
NDB API
binlog relaylog
Get Data
NDB API
Lookup Cluster 3
Cluster 1 Cluster 2
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Usage: Sharding And Scaling
Get Data
NDB API
Lookup Cluster 3
Cluster 1 Cluster 2
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Usage: Sharding And Scaling
Get Data
NDB API
Lookup Cluster 3
Cluster 1 Cluster 2
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
Usage: Sharding And Scaling
Get Data
NDB API
Lookup Cluster 3
Cluster 1 Cluster 2
Copyright © 2009 Sun Microsystems, Inc.
Wednesday, April 29, 2009
MySQL Cluster v7.0
• Different development cycle
> Everything still GPL
> MySQL 5.1 binaries lacks Cluster
• Different versioning
> MySQL Cluster v7.0 is GA!
> latest: mysql-5.1.32-ndb-7.0.5
• Manual & change log
> http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster.html
> http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-news.html
Geert Vanderkelen
[email protected]
[email protected]