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的磁阵共享架构)的。
关于数据结点存取数据的分片如下。
Cluster数据表创建后,会根据主键进行hash分区,这样可保证数据平均分配到每个数据结点。
至于大家看到的Node Group 1, Node Group2,我有必要说明一下。Cluster为了保证高可用性,会把数据分组,每一个组内都有两个数据结点,即Node1, Node2。这样做的用处是,当有一个Node结点,失效时,不会影响整个集群网络的运行。即最坏情况,整个数据结点,可以有一半的Node(通常也对应一台物理机器)失效,而整个集群网络还是能正常工作。
转载于:https://blog.51cto.com/louisyang/1343235