mysql集群与分布式数据库的区别
简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。例如:如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Re...
简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
例如:
如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。
采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)
而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!
以下是摘抄自网络文章:
集群概念
1. 两大关键特性
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:
· 可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。
· 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。
2. 两大能力
为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:
· 负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。
· 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。
负载均衡和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。
3. 两大技术
实现集群务必要有以下两大技术:
· 集群地址--集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集群的一个基 本特征。维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。有的负载均 衡器实现真正的负载均衡算法,有的只支持任务的转换。只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有 一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体。
· 内部通信--为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。
具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力。
集群分类
Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)
高可用集群( High Availability Cluster)
负载均衡集群(Load Balance Cluster)
科学计算集群(High Performance Computing Cluster)
================================================
具体包括:
Linux High Availability 高可用集群
(普通两节点双机热备,多节点HA集群,RAC, shared, share-nothing集群等)
Linux Load Balance 负载均衡集群
(LVS等....)
Linux High Performance Computing 高性能科学计算集群
(Beowulf 类集群....)
分布式存储
其他类linux集群
(如Openmosix, rendering farm 等..)
详细介绍
1. 高可用集群(High Availability Cluster)
常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机".
高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。
2. 负载均衡集群(Load Balance Cluster)
负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。
负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。
3. 科学计算集群(High Performance Computing Cluster)
高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。
高性能计算分类
高吞吐计算(High-throughput Computing)
有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME -- Search for Extraterrestrial Intelligence at Home )就是这一类型应用。这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上 参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的 数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。所谓的Internet计算都属于这一类。按照 Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。
分布计算(Distributed Computing)
另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。
4. 分布式(集群)与集群的联系与区别
分布式是指将不同的业务分布在不同的地方。
而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。
而集群并不一定就是分布式的。
举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了
--------------------分割线--------------------------
分布式数据库是指利用高速网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获得更大的存储容量和更高的并发访问量。
作者:爱源码来源:今日头条|2018-01-02 20:00
收藏
分享
本文只是一个概念,具体配置太多,这里不做细节描述。
1、分布式应用的概念和优势
分布式数据库是指利用高速网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获得更大的存储容量和更高的并发访问量。近年来,随着数据量的增长,分布式数据库技术也得到了快速的发展,传统的关系型数据库开始从集中式模型向分布式存储,从集中式计算走向分布式计算。
分布式数据库系统的主要目的是容灾、异地数据备份,并且通过就近访问原则,用户可以就近访问数据库节点,这样就实现了异地的负载均衡。同时,通过数据库之间的数据传输同步,可以分布式保持数据的一致性,这个过程完成了数据备份,异地存储数据在单点故障的时候不影响服务的访问,只需要将访问流量切换异地镜像就行。
分布式数据库应用的优势如下:
(1)适合分布式数据管理,能够有效提高系统性能。
(2)系统经济性和灵活性好。
(3)系统的可靠性和可用性强。
2、mysql分布式应用的主要技术
(1)mysql数据切割
数据切割(sharding)是指通过某种特定的条件,将存放在同一数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。数据切分还可以提高系统的总体可用性,因为单台crash之后,只有总体数据的某部分不同,而不是所有数据。
根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者schema)来切分到不同的数据库(主机)之上,这种切分成为数据的垂直(纵向切分);另一种则是根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称为数据的水平(横向)切分。垂直切分的***特点就是规则简单,实施也更为方便,尤其适合各个业务之间耦合度低,相互影响小、业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表拆分到不同的数据库中。根据不同的表进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。水平切分比垂直切分更复杂一点。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身比较复杂,后期的数据维护也更加复杂一些。
(2)为什么要切分数据?
1)像Oracle这样成熟稳定的DB可以支撑海量数据的存储和查询,但是价格不是所有人都承受得起。
2)负载高点时,Master-Slaver模式中存在瓶颈。现有技术中,在负载高点时使用相关的Replication机制来实现相关的读写的吞吐性能。这种机制存在两个瓶颈:一是有效性依赖于读操作的比例,这里Master往往会成为瓶颈所在,写操作时需要一个顺序队列来执行,过载时Master会承受不住,Slaver的数据同步延迟也会很大,同时还会消耗CPU的计算能力,为write操作在Master上执行以后还是需要在每台slave机器上都跑一次。而Sharding可以轻松的将计算,存储,I/O并行分发到多台机器上,这样可以充分利用多台机器各种处理能力,同时可以避免单点失败,提供系统的可用性,进行很好的错误隔离。
3)用免费的MySQL和廉价的Server甚至是PC做集群,达到小型机+大型商业DB的效果,减少大量的资金投入,降低运营成本,何乐而不为呢?
Mysql5.1以上的版本都支持数据表分区功能。数据库中的数据在经过垂直或水平切分被存放在不同的数据库主机中之后,应用系统面临的***问题就是如何让这些数据源得到较好的整合,有以下两种解决思路。
1)在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合。
2)通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明。
第二种方案,虽然短期内需要付出的成本可能会大一些,但是对整个系统的扩展性来说,是非常有帮助的。针对第二种方案,可以思路如下:
1)利用mysql proxy实现数据切分及整合。
Mysql proxy是在客户端请求与mysql服务器之间建立一个连接池,所有客户端请求都发送到mysql proxy,由mysql proxy进行相应的分析,判断是读操作还是写操作,然后发送到相应的mysql服务器上。对于多节点slave集群,也可以做到负载均衡的效果。
2)利用amoeba实现数据切分及整合。
Amoeba是一个基于java开发的、专注于解决分布式数据库数据源整合proxy程序的开源框架,amoeba已经具有query路由,query过滤、读写分离、负载均衡以及HA机制等相关内容。Amoeba主要解决以下几个问题:
①数据切分后复杂数据源整合
②提供数据切分规则并降低数据切分规则给数据库带来的影响
③降低数据库与客户端的连接数
④读写分离路由
3)利用HiveDB实现数据切分及整合。
3、mysql读写分离
读写分离是利用数据库的复制技术,将读和写分布在不同的处理节点上,从而达到提高可用性和扩展性的目的。主数据库提供写操作,从数据库提供读操作,在很多系统中,更多地是读操作。当主数据库进行写操作时,数据要同步到从数据库,这样才能有效保证数据库完整性。Mysql也有自己的同步数据技术。Mysql通过二进制日志来复制数据,主数据库同步到从数据库后,从数据库一般由多台数据库组成,这样才能达到减轻压力的目的。读操作应根据服务器的压力分配到不同的服务器,而不是简单的随机分配。Mysql提供了mysql proxy实现读写分离操作。
目前较为常见的mysql读写分离分为以下两种。
①基于程序代码内部实现
在代码中根据select、insert进行路由分类,这类方法也是目前生产环境中应用最广泛的。
②基于中间代理层实现
代理位于客户端和服务器之间,代理服务器收到客户端请求后通过判断转发到后端数据库。下图是ebay读写分离的结构图,通过share plex近乎实时的复制数据到其他数据节点,再通过特定的模块检查数据库状态,并进行负载均衡、读写分离,极大地提高了系统可用性。
4、mysql集群
Mysql cluster技术在分布式系统中为mysql数据提供了冗余特性,增强了安全性,使得单个mysql服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障。
Mysql cluster采用shared-nothing(无共享)架构。Mysql custer主要利用了NDB存储引擎来实现,NDB存储引擎是一个内存式存储引擎,要求数据必须全部加载到内存之中。数据被自动分布在集群中的不同存储节点上,每个存储节点只保存完整数据的一个分片(fragment)。同时,用户可以设置同一份数据保存在多个不同的存储节点上,以保证单点故障不会造成数据丢失。
Mysql cluster需要一组计算机,每台计算机的角色可能是不一样的。Mysql cluster按照节点类型可以分为3类:管理节点(对其他节点进行管理)、数据节点(存放cluster中的数据,可以有多个)和mysql节点(存放表结构,可以有多个)。Cluster中的某计算机可以是某一种节点,也可以是2种或3种节点的集合。这3种节点只是在逻辑上划分,所以他们不一定和物理计算机是一一对应的关系。多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案。
Mysql集群的出现很好的实现了数据库的负载均衡,减少了数据中心节点的压力和大数据处理,当数据库中心节点出现故障时,集群会采用一定的策略切换到其他备份节点上,有效的屏蔽了故障问题,单节点的失效不会影响整个数据库对外提供服务。而且通过采用数据库集群架构,主从数据库之间时刻都在进行数据的同步冗余,数据库是多点的、分布式的,良好的完成了数据库数据的备份,避免了数据损失。
更多推荐
所有评论(0)