1. 为什么需要分布式数据库

随着计算机和信息技术的迅猛发展和普及,行业应用系统的规模迅速扩大,行业应用所产生的数据量量呈爆炸式增长,动辄达到数百TB甚至数百PB规模,已远远超出现有的传统计算技术和信息系统的处理能力,而集中式数据库面对大规模数据处理逐渐表现出其局限性,因此,人们希望寻找一种能快速处理数据和及时响应用户访问的方法,也希望对数据进行集中分析、管理和维护。这已成为现实世界的迫切需求。

分布式数据库是在集中式数据库的基础上发展起来的,是计算机技术和网络技术结合的产物。分布式数据库是指数据在物理上分布而逻辑上集中管理的数据库系统。物理上分布指的是分布式数据库的数据分布在物理位置不同并由网络连接的节点或站点上;逻辑上集中是指各数据库之间在逻辑上是一个整体,并由统一的数据库管理系统管理。不同的节点分布可以跨不同的机房、城市甚至国家。

分布式数据库的主要特点如下:

  1. 透明性:用户不必关心数据的逻辑分区和物理位置的分布细节,也不必关心重复副本(冗余数据)的一致性问题,同时不必关心在局部场地上数据库支持哪种数据模型。对于系统开发工程师而言,当数据从一个场地移到另一个场地时不必改写应用程序,使用起来如同一个集中式数据库。
  2. 数据冗余性:分布式数据库通过冗余实现系统的可靠性、可用性,并改善其性能。多个节点存储数据副本,当某一节点的数据遭到破坏时,冗余的副本可保证数据的完整性;当工作的节点受损害时,可通过心跳等机制进行切换,系统整体不被破坏。还可以通过热点数据的就近分析原则减少网络通信的消耗,加快访问速度,改善性能。
  3. 易于扩展性:在分布式数据库中能够方便地通过水平扩展提高系统的整体性能,也能通过垂直扩展来提供性能,扩展并不需要修改系统程序。
  4. 自治性:各节点上的数据由本地的DBMS管理,具有自动处理能力,完成本场地的应用或局部应用。

2. MySQL Cluster原理

MySQL
群集是 MySQL 适合于分布式计算环境的高可用、高冗余版本。它采用了 NDB Cluster 存储引擎,允许在 1 个群集中运行多个
MySQL 服务器。在 MySQL 5.0 及以上的二进制版本中,以及与最新的 Linux 版本兼容的 RPM 包中提供了该存储引擎。

MySQL
群集是一种技术,该技术允许在无共享的系统中部署“内存中”和“磁盘中”数据库的 Cluster
。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。MySQL
Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括 MySQL 服务器,NDB Cluster
的数据节点,管理服务器,以及(可能存在的)专门的数据访问程序。

管理服务器(MGM节点)负责管理 Cluster 配置文件和 Cluster 日志。Cluster 中的每个节点从管理服务器检索配置数据。

当数据节点内出现新的事件时,节点将关于这类事件的信息传输到管理服务器,然后,将这类信息写入 Cluster 日志。

目前能够运行 MySQL Cluster 的操作系统有 Linux、Mac OS X 和 Solaris,最新的版本已经支持 Windows 操作系统。

MySQL 群集的数据节点之间的通信是不加密的,并且需要高速的带宽,所以建议把群集建立在一个高速局域网内,不建议跨网段、跨公网的部署这种系统体系。

MySQL 群集分为三种节点:管理节点,数据节点和SQL节点。

管理节点:主要用于管理各个节点,能够通过命令对某个节点进行重启、关闭、启动等操作。也能够监视全部节点的工作状态。

数据节点:主要是对数据的存储,不提供其他的服务。

SQL节点:主要是对外提供SQL功能,类似一台普通的 MySQL Server。

而SQL节点和数据节点可以是同一台机器,也就是说这台机器即是SQL节点也是数据节点。它们只是逻辑关系上的划分,实际部署时,甚至所有的阶段都可以位于同一台物理机器上,只是配置较复杂些。

3. MySQL Cluster的优缺点

优点:

  1. 99.999 %的高可用性
  2. 快速的自动失效切换
  3. 灵活的分布式体系结构,没有单点故障
  4. 高吞吐量和低延迟
  5. 可扩展性强,支持在线扩容

缺点:

  1. 存在很多限制,比如:不支持外键,数据行不能超过8K(不包括BLOB和text中的数据)
  2. 部署、管理、配置很复杂
  3. 占用磁盘空间大,内存大
  4. 备份和恢复不方便
  5. 重启的时候,数据节点将数据load到内存需要很长时间

4. MySQL Cluster国内应用

中国电子科学研究院采用MySQL Cluster构建高可用测试系统 - MySQL社区 - Powered by Discuz!

5. 参考资料

mysql cluster排错经验分享 - 飞鸿无痕 - 博客园
MySQL Cluster:如何通过扩展为MySQL带来2亿QPS - 文章 - 伯乐在线
为什么说 MySQL Cluster 是 shared-nothing 架构的?如何理解 shared-nothing ?
MySQL主从复制属于集群技术还是负载均衡技术?
Mysql“集群”和”主从“两者的区别 - 北风之神的博客 - CSDN博客
MySQL集群 Replication, 主从和双主配置--驴子博客
mysql cluster纯属招摇撞骗(结贴) - ChinaUnix.net - Powered by Discuz!MySQL :: MySQL Cluster CGE
MySQL Cluster 越来越完善,为什么没有在工业界大规模应用?和NoSQL数据库(如Cassandra)相比优劣势在哪?
mysql-cluster-datasheet.zh.pdf
MySQL 5.1 Reference Manual
MySQL Cluster 与 MongoDB 复制及分片设计及原理

MySQL集群原理详解的更多相关文章

  1. MySQL集群搭建详解

    概述 MySQL Cluster 是MySQL 适合于分布式计算环境的高实用.可拓展.高性能.高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达 ...

  2. Centos使用LVS+keepalive 搭建集群原理详解

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...

  3. MySQL集群搭建详解(三种结点分离)

    本文将搭建一个最简化的MySQL Cluster系统,配置方法中的所有命令都是以root账户运行.这个MySQL Cluster包含一个管理结点.两个数据结点.两个SQL结点,这五个结点会分别安装在五 ...

  4. Apache + Tomcat集群配置详解 (1)

    一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...

  5. [转帖]Application Request Route实现IIS Server Farms集群负载详解

    Application Request Route实现IIS Server Farms集群负载详解  https://www.cnblogs.com/knowledgesea/p/5099893.ht ...

  6. Solr系列二:solr-部署详解(solr两种部署模式介绍、独立服务器模式详解、SolrCloud分布式集群模式详解)

    一.solr两种部署模式介绍 Standalone Server 独立服务器模式:适用于数据规模不大的场景 SolrCloud  分布式集群模式:适用于数据规模大,高可靠.高可用.高并发的场景 二.独 ...

  7. 【线上测试之后的应用】基于MySQL+MHA+Haproxy构建高可用负载均衡数据库集群(详解)

    这里我们先介绍一下MHA是什么,其次就是它的应用与测试,同时为了大家呈现了数据备份案例,最后总结了使用情况以及注意事项和解决办法 一.MHA 概述 MHA(Master High Availabili ...

  8. Mysql集群原理

    一. 主从复制概述  在实际生产中,数据的重要性不言而喻,提供安全可靠的数据保障是技术与运维部门的职责所在:如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没 ...

  9. Centos7 zookeeper单机/集群安装详解和开机自启

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

随机推荐

  1. SXOI2018 游记

    noilinux@Capella:~$ cd /Memories/ noilinux@Capella:/Memories$ rm *SXOI* rm:是否删除有写保护的普通文件 "SXOI2 ...

  2. 细说 struct和typedef struct

    细说 struct和typedef struct 参考原文:http://www.cnblogs.com/qyaizs/articles/2039101.html,有些小改动~ 1 首先://注意在C ...

  3. urllib模块和urllib2模块的区别

    一开始我以为urllib2模块单纯是urllib模块的升级版,因为我看到它们都有urlopen方法,但是经过查找资料,发现两者差别还是很大的. 这是我在网上看到的总结: urllib2可以接受一个Re ...

  4. codeforces9D How many trees?

    传送门:http://codeforces.com/problemset/problem/9/D [题解] 树形dp,f(i,j)表示i个节点,高度为j的方案数,枚举左子树大小和哪一个子树高度为j-1 ...

  5. 【leetcode 简单】 第八十六题 有效的完全平方数

    给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False. 注意:不要使用任何内置的库函数,如  sqrt. 示例 1: 输入: 16 输出: Tr ...

  6. 20155303 2016-2017-2 《Java程序设计》第九周学习总结

    20155303 2016-2017-2 <Java程序设计>第九周学习总结 目录 学习内容总结(Linux命令) 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...

  7. Oracle 11.2.0.4在线(Online mode)打补丁14084247解决WRH$_ACTIVE_SESSION_HISTORY不会自动切割的问题

      安装了Oracle Database Release 11.2.0.4之后,发现WRH$_ACTIVE_SESSION_HISTORY始终不会自动分割删除,   后来才发现需要应用补丁:14084 ...

  8. python3中内建函数map()与reduce()的使用方法

    map()的使用    map()的使用方法形如map(f(x),Itera).对,它有两个参数,第一个参数为某个函数,第二个为可迭代对象.如果不懂什么是函数,不懂什么是可迭代对象没关系,记住下面的例 ...

  9. servlet Filter过滤javascript

    新建HttpServletRequestWrapper子类XssHttpServletRequestWrapper import javax.servlet.http.HttpServletReque ...

  10. phpStudy配置https

    phpStudy配置https 1.打开vhosts-conf配置文件 2.在配置文件中增加如下内容 server { listen 443; server_name tam.gogugong.com ...