您的位置:首页 > 数据库 > MySQL

MySQL集群简单介绍

2013-12-20 15:18 253 查看
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(通常也对应一台物理机器)失效,而整个集群网络还是能正常工作。




更多信息,请查看官网资料:
http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MySQL 数据库 集群