最近翻译了好几篇关于NDB的文章,相信有很多人会有疑问,NDB Cluster究竟是个什么东西?它是一款新产品吗?它和InnoDB Cluster有什么不同?它是MySQL吗?它怎么使用?在这篇文章里,我将为大家介绍一下MySQL NDB Cluster是什么?它的架构和特征,以及它的适用场景。
MySQL NDB Cluster并不是一款新产品,它的最新版本8.0最近刚刚发布。追溯历史你会发现它最初的开发是由爱立信完成的,是的你没有看错,就是那个电信行业的爱立信,当初的名字叫做“Ericsson Network Database”。看到这里你大概会猜到这是一款什么样的产品了。它最初的目标对象是用来管理电信行业的数据,通过id进行关联的简单数据。最初的NDB是使用C++ API来访问数据的,MySQL将其收购以后,将其与SQL进行整合,现在的NDB既可以使用SQL,也可以C++ API 以及Java、memcached、Node.js等各种API进行访问。
MySQL NDB Cluster与MySQL Server(人们普遍认知的MySQL)是完全不同的产品,它使用非共享架构,通过多台服务器构建成集群,实现多点读写的关系型数据库。它具有在线维护功能,并且排除单一故障,具有非常高的可用性。此外,它的主要数据保存在内存中,可以高速处理大量的事务,是面向实时性应用程序的一款数据库产品。
MySQL NDB Cluster架构
MySQL NDB Cluster由三种节点构成,SQL节点、数据节点及管理节点。
上图是由4个数据节点、2个SQL节点及2个管理节点组成的NDB集群
数据节点ndbmtd:负责管理数据、索引,控制事务处理。
SQL节点mysqld:应用程序和数据节点的SQL接口,用户认证,赋予权限等。
管理节点ndb_mgmd:启动停止集群、配置集群、备份,仲裁等。
数据节点:NDB Cluster的核心功能,用于保存数据、索引,控制事务。插入的数据按照主键的哈希值分散到不同的节点组里面保存(每个节点组保存部分数据),另外每个节点组内,数据会复制到不同的数据节点上以实现冗余。上图中节点组1保存了数据分片1和2两部分数据,节点组2里面保存了数据分片3和4两部分数据,每个节点组里面由2个数据节点构成,即使是每个节点组里面有一个节点发生故障,集群也能够持续运行。
SQL节点:相当于增加了NDB存储引擎的MySQL服务器,数据节点作为NDB存储引擎使用,如果使用其它的MySQL存储引擎,例如InnoDB,MyISAM等,数据将会保存在SQL节点上。应用程序通过SQL节点访问数据节点,使用方法与通常的MySQL一样,SQL节点会自动找到正确的数据节点将数据找回。
管理节点:管理节点用于配置集群和各个节点,各个节点需要连接管理节点,取得配置信息后加入集群。此外管理节点还充当仲裁者角色,以防止发生网络分区后出现脑裂现象。
NDB Cluster特征
高扩展性:NDB Cluster 可以在内部自动进行数据分片,随着数据节点的增加,可以做到非常高的读写扩展。
高可用性:最新版本高达99.9999%的高可用性,每年停机运维时间不超过1分钟。因为采用了非共享的架构,不会出现单一故障,发生故障时的故障转移时间非常短,并且各种维护工作可以在线进行,因此极大地提高系统可用性。
实时性:数据大部分情况下保存在内存中,可以快速执行事务,满足实时性高要求的应用需求。
异地容灾:可以利用NDB Cluster的复制功能,对NDB Cluster进行异地容灾,与MySQL的复制功能不同,NDB Cluster可以进行双向复制,并且能够对数据冲突进行校验。
SQL+NoSQL:数据节点上保存的数据除了可以通过SQL节点访问,还可以通过NoSQL访问。对比其它的KV型数据库,NDB Cluster具有如下优点:
支持ACID的完整事务。
数据具有持久性和冗余性。
自动故障转移。
在线备份。
低成本:由于NDB Cluster不使用共享存储,一般的服务器即可运行,因此可以为用户节省大量的硬件成本。
适用场景和案例
通过上面的介绍,您大致对NDB Cluster有了一些了解。基于它最初的基因,NDB Cluster广泛应用于电信行业,例如阿尔卡特朗讯,诺基亚,NEC等有大量的使用案例。在线游戏行业通过NDB进行会话管理,例如:Big Fish Games、Blizzard Entertainment、Zynga。此外,由于NDB具有非常高的可用性,美军航母的战机管控系统,PayPal的反欺诈系统均采用了NDB。NDB广泛适用于关键任务型系统。更多案例可以访问:https://www.mysql.com/why-mysql/case-studies/#en-5-28
以上是关于NDB的一个非常简明的介绍,今后计划写一下更详尽的内容。
感谢您关注MySQL!
欢迎关注公众号“MySQL解决方案工程师”