Mysql-15-mysql分布式应用

1.分布式应用的概念和优点前端

  分布式数据库是指利用高速网络将物理上分散的多个数据存储单元链接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个经过网络链接的数据存储节点上,以得到更大的存储容量和更高的并发访问量。近年来,随着数据量的增加,分布式数据库技术也获得了快速的发展,传统的关系型数据库开始从集中式模型向分布式存储,从集中式计算走向分布式计算。java

  分布式数据库系统的主要目的是容灾、异地数据备份,而且经过就近访问原则,用户能够就近访问数据库节点,这样就实现了异地的负载均衡。同时,经过数据库之间的数据传输同步,能够分布式保持数据的一致性,这个过程完成了数据备份,异地存储数据在单点故障的时候不影响服务的访问,只须要将访问流量切换异地镜像就行。mysql

  分布式数据库应用的优点以下:sql

(1)适合分布式数据管理,可以有效提升系统性能。数据库

(2)系统经济性和灵活性好。后端

(3)系统的可靠性和可用性强。安全

 

2.mysql分布式应用的主要技术服务器

(1)mysql数据切割网络

  数据切割(sharding)是指经过某种特定的条件,将存放在同一数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。数据切分还能够提升系统的整体可用性,由于单台crash以后,只有整体数据的某部分不一样,而不是全部数据。架构

  

  根据其切分规则的类型,能够分为两种切分模式。一种是按照不一样的表(或者schema)来切分到不一样的数据库(主机)之上,这种切分红为数据的垂直(纵向切分);另外一种则是根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称为数据的水平(横向)切分。垂直切分的最大特色就是规则简单,实施也更为方便,尤为适合各个业务之间耦合度低,相互影响小、业务逻辑很是清晰的系统。在这种系统中,能够很容易作到将不一样业务模块所使用的表拆分到不一样的数据库中。。根据不一样的表进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。水平切分比垂直切分更复杂一点。由于要将同一个表中的不一样数据拆分到不一样的数据库中,对于应用程序来讲,拆分规则自己比较复杂,后期的数据维护也更加复杂一些。

  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读写分离

  

  读写分离架构是利用数据库的复制技术(详见13章),将读和写分布在不一样的处理节点上,从而达到提升可用性和扩展性的目的。主数据库提供写操做,从数据库提供读操做,在不少系统中,更多地是读操做。当主数据库进行写操做时,数据要同步到从数据库,这样才能有效保证数据库完整性。Mysql也有本身的同步数据技术。Mysql经过二进制日志来复制数据,主数据库同步到从数据库后,从数据库通常由多台数据库组成,这样才能达到减轻压力的目的。读操做应根据服务器的压力分配到不一样的服务器,而不是简单的随机分配。Mysql提供了mysql proxy实现读写分离操做。

 

  目前较为常见的mysql读写分离分为如下两种。

 

①基于程序代码内部实现

 

在代码中根据selectinsert进行路由分类,这类方法也是目前生产环境中应用最普遍的。

 

②基于中间代理层实现

 

代理位于客户端和服务器之间,代理服务器收到客户端请求后经过判断转发到后端数据库。下图是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集群的出现很好的实现了数据库的负载均衡,减小了数据中心节点的压力和大数据处理,当数据库中心节点出现故障时,集群会采用必定的策略切换到其余备份节点上,有效的屏蔽了故障问题,单节点的失效不会影响整个数据库对外提供服务。并且经过采用数据库集群架构,主从数据库之间时刻都在进行数据的同步冗余,数据库是多点的、分布式的,良好的完成了数据库数据的备份,避免了数据损失。

相关文章
相关标签/搜索