简介

MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术。这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性。

MySQL集群是一种分布式设计,目标是要达到没有任何单点故障点。因此,任何组成部分都应该拥有自己的内存和磁盘。任何共享存储方案如网络共享,网络文件系统和SAN设备是不推荐或不支持的。通过这种冗余设计,MySQL声称数据的可用度可以达到99.999%。

实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。它们之间的关系如下图所示:

存储引擎

MySQL Cluster 使用了一个专用的基于内存的存储引擎(NDB引擎),这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制,如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。

该存储引擎有下列缺点

1、基于内存,数据库的规模受集群总内存的大小限制

2、基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证。

3、多个节点通过网络实现通讯和数据同步、查询等操作,因此整体性受网络速度影响,

4、因此速度也比较慢

当然也有它的优点

1、多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案。

2、扩展性很好,增加节点即可实现数据库集群的扩展。

3、冗余性很好,多个节点上都有完整的数据库数据,因此任何一个节点宕机都不会造成服务中断。

4、实现高可用性的成本比较低,不象传统的高可用方案一样需要共享的存储设备和专用的软件才能实现,NDB 只要有足够的内存就能实现。

体系结构

MySQL Cluster 由3个不同功能的服务构成,每个服务由一个专用的守护进程提供,一项 服务也叫做一个节点,下面来介绍每个节点的功能。

The management (MGM) node:

管理节点(MGM节点),用来实现整个集群的管理,理论上一般只启动一个,而且宕机也不影响 cluster 的服务,这个进程只在cluster 启动以及节点加入集群时起作用, 所以这个节点不是很需要冗余,理论上通过一台服务器提供服务就可以了。

通过 ndb_mgmd 命令启动,使用 config.ini 配置文件

The storage or database (DB) node:

数据节点(NDB节点),用来存储数据,可以和管理节点(MGM)、 用户端节点(API)处在不同的机器上,也可以在同一个机器上面,集群中至少要有一个DB节点,2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。

通过 ndbd 命令启动,第一次创建好cluster DB 节点时,需要使用 –init参数初始化。

例如: bin/ndbd –ndb-connectstring=ndb_mgmd.mysqlcluster.net –initial

The client (API) node:

SQL节点(MySqld节点),通过他实现 Cluster DB 的访问,这个节点也就是普通的 mysqld 进程, 需要在配置文件中配置ndbcluster 指令打开 NDB Cluster storage engine 存储引擎,增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。

通过 mysqld_safe 命令启动,

这3类节点可以分布在不同的主机上,比如 DB 可以是多台专用的服务器,也可以 每个DB都有一个API,当然也可以把API分布在Web前端的服务器上去,通常来说, API越多cluster的性能会越好。

参考:

http://www.searchtb.com/2012/07/mysql-cluster.html

最新文章

  1. solr5.5教程-tomcat布署
  2. MySQL通过Binlog恢复删除的表
  3. BZOJ3509: [CodeChef] COUNTARI
  4. .net抓取网页数据
  5. poj3819 Coverage (求直线与圆的交占直线的百分比 )
  6. REST 测试工具
  7. urllib使用
  8. kafka实战
  9. JUC中Lock和ReentrantLock介绍及源码解析
  10. 如何为ASP.NET Core设置客户端IP白名单验证
  11. 2522 和为K的倍数
  12. 【C++】回看面向对象与C++
  13. hadoop 学习笔记
  14. js简易计算器底层运算逻辑(带撤销功能)
  15. 1.两数之和(Two Sum) C++
  16. HDU 1501 Zipper 字符串
  17. ZT android -- 蓝牙 bluetooth (三)搜索蓝牙
  18. Mac brew安装MongoDB
  19. linux安装redis 完整步骤
  20. [Django笔记] admin 深入学习

热门文章

  1. POJ1717 Dominoes[背包DP]
  2. Zencart视频教程 Zencart模板制作教程视频 Zencart仿站教程资料
  3. 12款经典的白富美型—jquery图片轮播插件—前端开发必备
  4. caffe的python接口学习(4):mnist实例---手写数字识别
  5. c#串口通信类代码可以直接调用
  6. Linux -- CentOS7修改防护墙端口
  7. 【转载】浅谈HTTP中Get与Post的区别
  8. [转]Struts2理解--动态方法和method属性及通配符_默认Action
  9. 在哪可以Sigmaplot 13下载免费版的
  10. Deepin 15.3 编译同步SudaMod 2.0