MySQL Cluster(集群)目前在互连网项目中有一定的应用。


关于数据库集群,无外乎两种结构。

一是共享磁阵,代表产品有Oracle RAC。

二是不共享,通过使用廉价的x86机器+SSD磁盘,组建集群存取网络。


MySQL Cluster属于第二种架构。


下文我简单说明一下,适合以及不太适合Cluster的场景,以供大家参考。


一。什么时候考虑使用 MySQL Cluster

要求可靠性高的业务场景

需要支持类似在线扩容之类的功能,以便在硬件升级或
系统维护时。保证业务的连续性
如果你更关心业务的并发量,而不是关心单个业务的响
应时间。因为, Cluster的架构需要从网络数据结点获取
数据,所以单个业务的响应时间通常会慢于MySQL
Server.
如果你的应用遇到了并发和连接数的瓶颈问题。
如果你的应用遭遇分库处理粒度划分失控的问题


二。不太适用于Cluster的场景

在线数据量大于3T的。
因为Cluster目前最多可支持48个数据结点。按照每个
数据结点的内存128G来计算。 128G/2 Replica
*48/1.25≈2.4T。其中,除以1.25表示去除索引占用的
内存空间。如果再考虑使用磁盘表的情况。在3T以内
的数据量是可以承载的。


应用场景有很长的事务。

例如,某一个事务内需要做多次复杂查询,删除,插入等操作。

因为这会增加Cluster的事务控制时间,引发大范围超时。


应用程序需要用到全表扫描的
因为Cluster需要从网络数据结点存取数据,所以全表
扫描的性能会非常低下。


需要使用全文索引的
因为Cluster暂不支持全文索引


三,Cluster的体系结构

Cluster从架构上来说,分为两个层次。

如下图所示,第二层为接入层。即Cluster可采用不同的方式接入,如C++, JAVA, JAVA Script等。

其中MySQL图标表示,通过接入MySQL结点,可以执行标准的SQL查询。C++表示用NDB API的方式来直接操作 数据结点(下面会讲道)来存取数据。


第三层为数据存储层,Cluster是采用的不共享方式,即所有的数据结点的数据是不共享(区别于Oracle RAC的磁阵共享架构)的。


TDMySQL mysql 集群组件包含那些 mysql集群有哪些_数据库


关于数据结点存取数据的分片如下。

TDMySQL mysql 集群组件包含那些 mysql集群有哪些_数据库_02


Cluster数据表创建后,会根据主键进行hash分区,这样可保证数据平均分配到每个数据结点。

至于大家看到的Node Group 1, Node Group2,我有必要说明一下。Cluster为了保证高可用性,会把数据分组,每一个组内都有两个数据结点,即Node1, Node2。这样做的用处是,当有一个Node结点,失效时,不会影响整个集群网络的运行。即最坏情况,整个数据结点,可以有一半的Node(通常也对应一台物理机器)失效,而整个集群网络还是能正常工作。

TDMySQL mysql 集群组件包含那些 mysql集群有哪些_java_03


转载于:https://blog.51cto.com/louisyang/1343235