首页 > 代码库 > MySQL学习笔记02MySQL集群相关概念
MySQL学习笔记02MySQL集群相关概念
1.1.1. MySQL集群基本框架
本文所介绍的MySQL集群指基于NDBCluster的MySQL 集群。 一个MySQL集群包含一个或多个Management Node、Data Node和SQL Node。
管理节点Management Node:用于对集群本身的管理,运行ndb_mgmd服务。应当首先启动管理节点,再启动其它节点。
数据节点Data Node:用于存储集群的数据,运行ndbmtd或ndbd服务。数据节点支持复制。
SQL节点SQL Node:用于对外提供SQL查询服务,运行mysqld服务,其中的数据表使用ndbcluster存储引擎。
NDBCluster:NDBCluster是MySQL提供的一种基于内存的存储引擎,提供了高可用和数据持久化的特性。 MySQL还提供了其它的存储引擎,包括MyISAM和InnoDB以及Memory等几种。
MySQL集群的节点之间的关系可以使用下图描述。
1.1.2. 节点分组、数据分区以及复制
(1)MySQL Cluster的数据表在数据节点中的分布方式:
MySQL Cluster中的数据节点可以成一个或多个节点组(Node Group)。而一个数据表可以分成一个或多个分区(Partition)。每个分区的数据存在在一个节点组中的多个节点中,这些节点中的分区互为复制(Replicas)。
下图展示了一个数据表分为4个分区P1,P2,P3,P4时各个分区在4个节点N1,N2,N3,N4组成的2个节点组G1,G2中的分布情况。P1和P2分布于G1中,P3和P4分布于G2中。任何一个分区至少同时存储于2个节点中。
(2)这种基于节点分组和数据分区的分布方式的优点:
在任何数据节点的单点失败时,该节点所存储的数据在其它节点还存在至少一份复制品。从而避免了单点故障造成集群失效。
1.1.3. NDBCluster和InnoDB的比较
NDBCluster和InnoDB这两种存储引擎的比较结果见下表:
本表数据来源于MySQL集群官方文档https://dev.mysql.com/doc/index-cluster.html。
特性 |
InnoDB |
NDBCluster |
MySQL server版本 |
5.7 |
5.7 |
InnoDB版本 |
5.7.20 |
5.7.20 |
NDBCluster版本 |
N/A |
7.5.8/7.6.4 |
数据量 |
64TB |
128TB |
事务隔离级别 |
所有级别 |
READ COMMITTED |
MVCC |
支持 |
不支持 |
数据压缩 |
支持 |
不支持 |
大的数据行(>14KB) |
VARBINARY,VARCHAR, BLOB,TEXT |
BLOB,TEXT |
复制 |
MySQL Replication: 异步复制、半同步复制 |
集群内部:自动同步复制; 集群之间:异步复制(MySQL Replication)。 |
读操作横向扩展(scale out) |
MySQL Replication |
集群内部:自动分区; 集群之间:复制。 |
写操作横向扩展(scaleout) |
不支持。 应用程序级别的分区 |
支持。 集群内部:自动分区。 |
高可用(HA) |
InnoDB cluster |
NDBCluter 99.999% |
节点失效恢复和故障转移 |
MySQL 分组复制 |
NDBCluster体系结构提供支持 |
节点失效恢复时间 |
>=30秒 |
<=1秒 |
实时性能 |
N/A |
支持 |
并发写 |
支持 |
最多48个并发写 |
复制冲突检测和解决 |
支持 |
支持 |
哈希索引 |
不支持 |
支持 |
在线添加节点 |
MySQL分组复制添加读写节点 |
添加任何节点 |
1.1.4. NDBCluster的限制
使用NDBCluster存储引擎时存在以下的限制:
(1)不支持临时数据表。
(2)不能为TEXT和BLOG类型的列建立索引。
(3)不支持FULLTEXT全文索引。
(4)使用哈希索引时不应该有NULL,否则导致全表扫描。
(5)不支持前缀索引。
(6)位(BIT)列不能作为主键。
(7)AUTO_INCREMENT列只能用于主键。
(8)外键限制:被引用的外键字段如果不是主键,则必须有UNIQUE索引。
(9)ON UPDATE CASCADE:当主表中的字段为主表的主键时,不被支持。
(10)事务隔离级别:仅支持READ COMMITTED隔离级别。
MySQL学习笔记02MySQL集群相关概念