MySQL Cluster: Difference between revisions

Content deleted Content added
m Updated date of most recent release, added 7.6 release, added details of 8.0 release
Update latest release
 
(39 intermediate revisions by 17 users not shown)
Line 3:
{{Use American English|date=January 2019}}
{{primary sources|date=December 2012}}
 
{{Infobox software
| name = MySQL Cluster
Line 8 ⟶ 9:
| developer = [[Oracle Corporation|Oracle]]
| released = November 2004
| latest release version = 8.04.6
| latest release date = {{Start date and age|20212025|0507|1123}} <ref>{{Cite web|url=https://dev.mysql.com/doc/relnotes/mysql-cluster/8.04/en/|title=MySQL NDB Cluster 8.04 Release Notes|website=mysql.com}}</ref>
| operating system = [[Cross-platform]]{{which?|date=January 2019}}
| language = English
| genre = [[Relational database management system|RDBMS]]
| license = [[GNU General Public License]] (version 2, with [[GPL linking exception|linking exception]]) or commercial [[EULA]]
| website = <ref>[http://{{URL|www.mysql.com/products/cluster/ Cluster CGE]. MySQL. Retrieved on 2013-09-18.</ref>}}
}}
 
'''MySQL Cluster''' , also known as MySQL Ndb Cluster is a technology providing [[Shared nothing architecture|shared-nothing]] clustering and auto-sharding for the [[MySQL]] [[database management system]]. It is designed to provide high availability and high throughput with low latency, while allowing for near linear scalability.<ref>{{cite web|last=Oracle Corporation|title=MySQL Cluster Benchmarks: Oracle and Intel Achieve 1 Billion Writes per Minute|url=http://www.mysql.com/why-mysql/white-papers/mysql-cluster-benchmarks-1-billion-writes-per-minute/|work=mysql.com|accessdate=24 June 2013}}</ref> MySQL Cluster is implemented through the [[NDB Cluster|NDB]] or NDBCLUSTER storage engine for MySQL ("NDB" stands for '''N'''etwork '''D'''ata'''b'''ase).
 
==Architecture==
MySQL Cluster is designed around a distributed, multi-master [[ACID]] compliant architecture with no [[single point of failure]]. MySQL Cluster uses automatic [[sharding]] (partitioning) to scale out read and write operations on commodity hardware and can be accessed via SQL and Non-SQL (NoSQL) [[API]]s.
 
===Replication===
Internally MySQL Cluster uses [[synchronous replication]] through a [[two-phase commit]] mechanism in order to guarantee that data is written to multiple nodes upon committing the data. (This is in contrast to what is usually referred to as "MySQL Replication", which is {{linktext|asynchronous}}.) Two copies (known as ''replicas'') of the data are required to guarantee availability. MySQL Cluster automatically creates “node groups” from the number of replicas and data nodes specified by the user. Updates are synchronously replicated between members of the node group to protect against data loss and support fast failover between nodes. Cluster replication differs from "MySQL Replication", which is instead {{linktext|asynchronous}}.
 
It is also possible to replicate asynchronously between clusters; this is sometimes referred to as "MySQL Cluster Replication" or "geographical replication". This is typically used to replicate clusters between data centers for [[IT disaster recovery]] or to reduce the effects of network latency by locating data physically closer to a set of users. Unlike standard MySQL replication, MySQL Cluster's geographic replication uses [[optimistic concurrency control]] and the concept of Epochs to provide a mechanism for conflict detection and resolution,<ref>[http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-replication-conflict-resolution.html MySQL :: MySQL 5.6 Reference Manual :: 17.6.11 MySQL Cluster Replication Conflict Resolution]. Dev.mysql.com. Retrieved on 2013-09-18.</ref> enabling active/active clustering between data centers.
 
Starting with MySQL Cluster 7.2, support for synchronous replication between data centers was supported with the Multi-Site Clustering feature.<ref>[https://blogs.oracle.com/MySQL/entry/synchronously_replicating_databases_across_data Synchronously Replicating Databases Across Data Centers – Are you Insane? (Oracle's MySQL Blog)]. Blogs.oracle.com (2011-10-03). Retrieved on 2013-09-18.</ref>
Line 60 ⟶ 62:
===MySQL Cluster Manager===
Part of the commercial MySQL Cluster CGE, MySQL Cluster Manager is a tool designed to simplify the creation and administration of the MySQL Cluster CGE database by automating common management tasks, including on-line scaling, upgrades, backup/restore and reconfiguration. MySQL Cluster Manager also monitors and automatically recovers MySQL Server application nodes and management nodes, as well as the MySQL Cluster data nodes.
 
===MySQL Ndb Operator===
The open source [https://github.com/mysql/mysql-ndb-operator MySQL Ndb Operator] simplifies the deployment and operation of MySQL Cluster on a [[Kubernetes]] cluster. Ndb Operator deploys containerized MySQL Cluster Data, Management and SQL nodes in a number of StatefulSets with data stored in Persistent Volumes.
Kubernetes mechanisms extend the high availability features of MySQL Cluster, for example automatically restoring HA redundancy after hardware failures by migrating pods to new hardware.
Operating MySQL Cluster on Kubernetes allows a full stack of cloud native software to be operated in the same way on private or public clouds.
 
===NDB Cluster===
'''NDB Cluster''' is the distributed [[database]] system underlying MySQL Cluster. It can be used independently of a [[MySQL]] Server with users accessing the Cluster via the NDB API (C++). "NDB" stands for '''N'''etwork '''D'''ata'''b'''ase.
 
From the MySQL Server perspective the NDB Cluster is a [[Database engine|Storage engine]] for storing [[Table (database)|tables]] of [[Record (database)|rows]].
 
From the NDB Cluster perspective, a MySQL Server [[Instance (computer science)|instance]] is an [[Application programming interface|API]] process connected to the Cluster. NDB Cluster can concurrently support access from other types of API processes including Memcached, JavaScript/Node.JS, Java, JPA and HTTP/REST. All API processes can operate on the same tables and data stored in the NDB Cluster.
 
MySQL Cluster uses the [[MySQL]] Server to provide the following capabilities on top of Ndb Cluster:
 
* [[SQL]] parsing / optimising / execution capability
** Connectors to applications via [[JDBC]], [[ODBC]] etc.
* Cross-table [[Join (SQL)|join]] mechanism
* User authentication and authorisation
* Asynchronous data replication to other systems
 
All API processes including the MySQL Server use the NDBAPI<ref name="NdbApiDocs">[http://dev.mysql.com/doc/ndbapi/en/index.html] The MySQL Cluster API Developer Guide</ref> [[C++]] client library to connect to the NDB Cluster and perform operations.
 
==Implementation==
Line 70 ⟶ 94:
 
== Versions ==
From the 8.0 release onwards, MySQL Cluster is based directly on the corresponding 8.0 releases of the MySQL Server. Previously, MySQL Cluster version numbers were decoupled from those of MySQL Server - for example MySQL Cluster 7.6 was based on/contained the server component from MySQL 5.7.
 
Higher versions of MySQL Cluster include all of the features of lower versions, plus some new features.
Currently available versions:
* MySQL Cluster 79.2X basedInnovation onRelease MySQL 5.5series
* MySQL Cluster 78.4 LTS based on MySQL 58.64 LTS release
:Add support for TLS on cluster internal connections
* MySQL Cluster 78.30 based on MySQL 58.60
:Increase in max row size to 30kB, Support for up to 144 data nodes, Improved distributed filtering and joining, Support for parallel outer joins and semi joins, Improved schema and ACL handling, Online column rename, Simplified configuration, Multithreaded parallel backup and restore, Disk data performance improvements, Enhanced support for 3 and 4 replica configurations, Support for multi socket mesh networking, Support for restore transformations, Improved Blob write performance, Backup encryption, Support for IPv6, Threading autoconfiguration, Improved recovery performance, Improved query multithreading. <ref>{{Cite web|url=https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-what-is-new.html|title=MySQL :: MySQL 8.0 Reference Manual :: 22.1.4 What is New in NDB Cluster|website=dev.mysql.com}}</ref>
* MySQL Cluster 7.06 based on MySQL 5.1.C7
:Improved restart and recovery times, reduced disk space usage, improved join performance, new import tool, shared memory communication, improved topology awareness for cloud.<ref>[https://blogs.oracle.com/mysql/mysql-cluster-76-is-now-generally-available MySQL Cluster 7.6 is now Generally Available], Oracle's MySQL Blog, 1 June 2018</ref>
 
Older versions (no longer in development):
* NdbMySQL includedCluster in8.1 based on MySQL 58.1.X sourceInnovation treerelease
* MySQL Cluster 68.2 based on MySQL 58.1.A2 Innovation release
* MySQL Cluster 68.3 based on MySQL 58.1.B3 Innovation release
:First 'telco' or 'carrier grade edition' release. Supports 255 nodes, online table alter, replication latency and throughput enhancements etc.
* MySQL Cluster 6.3 based on MySQL 5.1.B
:Includes compressed backup + LCP, circular replication support, conflict detection/resolution, table optimization etc.
* MySQL Cluster 7.0 based on MySQL 5.1.C
:Includes multi-threaded data nodes (ndbmtd), Transactional DDL, Windows support.
* MySQL Cluster 7.1 based on MySQL 5.1.D
:Includes ClusterJ and ClusterJPA connectors
Currently available versions:
* MySQL Cluster 7.2 based on MySQL 5.5
:Includes Adaptive Query Localization (pushes JOIN operations down to the data nodes), Memcached API, simplified Active/Active Geographic replication, multi-site clustering, data node scalability enhancements, consolidated user privileges.<ref>[http://dev.mysql.com/tech-resources/articles/mysql-cluster-7.2-ga.html New features of MySQL Cluster 7.2], MySQL Developer Zone</ref>
* MySQL Cluster 7.3 based on MySQL 5.6
:Includes support for [[foreign key]] constraints, [[Node.js]] / [[JavaScript]] API and an auto-installer.<ref>[http://www.clusterdb.com/mysql-cluster/mysql-cluster-7-3-is-now-ga/ MySQL Cluster 7.3 is now Generally Available – an overview], MySQL Cluster 7.3 Summary</ref>
* MySQL Cluster 7.4 based on MySQL 5.6
:Includes enhanced conflict detection and resolution, improved node restart times, new Event API.<ref>[http://dev.mysql.com/tech-resources/articles/mysql-cluster-7.4.html MySQL Cluster 7.4 GA: 200 Million QPS, Active-Active Geographic Replication and more], MySQL Cluster 7.4 Summary</ref>
* MySQL Cluster 7.5 based on MySQL 5.7
:Includes support for bigger datasets(more than 128TB per node), improved read scalability through read optimized tables, improved SQL support.<ref>[https://blogs.oracle.com/MySQL/entry/mysql_cluster_7_5_is MySQL Cluster 7.5 Is Now GA!], Oracle's MySQL Blog, 18 October 2016</ref>
* MySQL Cluster 7.64 based on MySQL 5.76
:Includes enhanced conflict detection and resolution, improved node restart times, new Event API.<ref>[http://dev.mysql.com/tech-resources/articles/mysql-cluster-7.4.html MySQL Cluster 7.4 GA: 200 Million QPS, Active-Active Geographic Replication and more], MySQL Cluster 7.4 Summary</ref>
:Improved restart and recovery times, reduced disk space usage, improved join performance, new import tool, shared memory communication, improved topology awareness for cloud.<ref>[https://blogs.oracle.com/mysql/mysql-cluster-76-is-now-generally-available</ref>
* MySQL Cluster 87.03 based on MySQL 85.06
:Includes support for [[foreign key]] constraints, [[Node.js]] / [[JavaScript]] API and an auto-installer.<ref>[http://www.clusterdb.com/mysql-cluster/mysql-cluster-7-3-is-now-ga/ MySQL Cluster 7.3 is now Generally Available – an overview], MySQL Cluster 7.3 Summary</ref>
:Increase in max row size to 30kB, Support for up to 144 data nodes, Improved distributed filtering and joining, Support for parallel outer joins and semi joins, Improved schema and ACL handling, Online column rename, Simplified configuration, Multithreaded parallel backup and restore, Disk data performance improvements, Enhanced support for 3 and 4 replica configurations, Support for multi socket mesh networking, Support for restore transformations, Improved Blob write performance, Backup encryption, Support for IPv6, Threading autoconfiguration, Improved recovery performance, Improved query multithreading. <ref>{{Cite web|url=https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-what-is-new.html|title=MySQL :: MySQL 8.0 Reference Manual :: 22.1.4 What is New in NDB Cluster|website=dev.mysql.com}}</ref>
* MySQL Cluster 7.2 based on MySQL 5.5
:Includes Adaptive Query Localization (pushes JOIN operations down to the data nodes), Memcached API, simplified Active/Active Geographic replication, multi-site clustering, data node scalability enhancements, consolidated user privileges.<ref>[http://dev.mysql.com/tech-resources/articles/mysql-cluster-7.2-ga.html New features of MySQL Cluster 7.2], MySQL Developer Zone</ref>
* MySQL Cluster 7.1 based on MySQL 5.1.D
:Includes ClusterJ and ClusterJPA connectors
* MySQL Cluster 7.0 based on MySQL 5.1.C
:Includes multi-threaded data nodes (ndbmtd), Transactional DDL, Windows support.
* MySQL Cluster 6.3 based on MySQL 5.1.B
:Includes compressed backup + LCP, circular replication support, conflict detection/resolution, table optimization etc.
* MySQL Cluster 6.2 based on MySQL 5.1.A
:First 'telco' or 'carrier grade edition' release. Supports 255 nodes, online table alter, replication latency and throughput enhancements etc.
* Ndb included in MySQL 5.1.X source tree
 
==Requirements==
Line 120 ⟶ 150:
 
MySQL Cluster based on the NDB storage engine has since been integrated into the [[MySQL]] product, with its first release being in MySQL 4.1.
 
==Books==
MySQL Cluster 7.5 inside and out.<ref>{{cite web|author=Mikael Ronström|url=https://www.bod.se/bokshop/mysql-cluster-7-5-inside-and-out-mikael-ronstroem-9789176998144"|title=MySQL Cluster 7.5 inside and out|publisher=bod.se|date=2018-02-12|accessdate=2022-08-01}}</ref> Book written by Mikael Ronström, the founder of the NDB technology.
 
Pro MySQL NDB Cluster.<ref>{{cite book|author=Jesper Wisborg Krogh, Mikiya Okuno|url=https://link.springer.com/book/10.1007/978-1-4842-2982-8|title=Pro MySQL NDB Cluster|publisher=apress.com|date=2017|doi=10.1007/978-1-4842-2982-8 |isbn=978-1-4842-2981-1 |s2cid=10326666 |accessdate=2022-08-01}}</ref> Book written by Jesper Wisborg Krogh and Mikiya Okuno, support engineers of MySQL.
 
==Support==
Line 125 ⟶ 160:
 
== See also ==
* Galera Cluster,<ref>[[https://galeracluster.com/products/ Galera Cluster]],</ref> a generic synchronous multi-master replication library for transactional databases, for MySQL and MariaDB. [https://mariadb.com/kb/en/galera-cluster/[MariaDB]].
* [[Percona Server for MySQL]] XtraDB Cluster, also is a combination of Galera replication library and MySQL supporting multi master.
* RonDB,<ref>{{cite web|title=RonDB Announcement|url=https://www.logicalclocks.com/blog/comparing-rondb-on-aws-azure-and-gcp-using-sysbench|accessdate=2022-08-01}}</ref> a fork of MySQL Cluster maintained by Hopsworks.
 
== References ==
Line 134 ⟶ 170:
 
=== MySQL ===
{{Z148}}<!-- {{No more links}}
 
Please be cautious adding more external links.
Line 155 ⟶ 191:
*[http://www.mysql.com/products/cluster/faq.html MySQL Cluster FAQ]
*[https://www.youtube.com/watch?v=nYiIwgjcRWI MySQL Cluster Auto-Installer Tutorial]
*[http://www.clusterdb.com MySQL Cluster Blog]
*[http://www.mysql.com/products/cluster/start.html#getting_started Getting Started with MySQL Cluster]
*[http://www.mysql.com/why-mysql/white-papers/#en-22-28 MySQL Cluster Whitepapers and Guides]