当前位置: 首页 > 科技观察

MySQL海量数据分布式存储

时间:2023-03-13 12:19:03 科技观察

本文只是一个概念,具体的配置太多,这里就不详细描述了。一、分布式应用的概念及优势分布式数据库是指利用高速网络将多个物理上分散的数据存储单元连接起来,形成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获得更大的存储容量和更高的并发访问。近年来,随着数据量的增长,分布式数据库技术也得到了快速发展。传统关系型数据库开始从集中式模型转向分布式存储,从集中式计算转向分布式计算。分布式数据库系统的主要目的是容灾和异地数据备份,通过就近访问原则,用户可以就近访问数据库节点,从而实现异地负载均衡。同时,通过数据库间数据传输的同步,可以分布式维护数据的一致性。该过程完成数据备份,数据异地存储不影响单点故障时的服务访问。只需要将访问流量切换到远程镜像即可。分布式数据库应用的优点如下:(1)适用于分布式数据管理,能有效提高系统性能。(2)系统经济、灵活。(3)系统的可靠性和可用性强。2、mysql分布式应用的主要技术(一)mysql数据分片数据分片(sharding)是指将存储在同一个数据库中的数据,通过一定的特定条件,分布到多个数据库(主机)中,以达到分散负载的效果单个设备。数据切分还可以提高系统的整体可用性,因为在一次崩溃之后,整体数据只是某一部分不同,而不是所有数据。根据其切分规则的类型,可分为两种切分方式。一种是根据不同的表(或模式)拆分到不同的数据库(主机),这种拆分就成为数据的垂直(verticalsplit);另一种是根据表中数据的逻辑关系,将同一张表中的数据按照一定的条件拆分到多个数据库(主机)中。这种拆分称为数据的水平(水平)拆分。垂直切分最大的特点就是规则简单,实施起来也比较方便。特别适用于各种业务之间耦合度低,相互影响小,业务逻辑非常清晰的系统。在本系统中,很容易将不同业务模块使用的表拆分到不同的数据库中。按照不同的表拆分对应用的影响更小,拆分规则也会更简单明了。水平分片比垂直分片复杂一点。因为需要将同一张表的不同数据拆分到不同的数据库中,对于应用来说,拆分规则本身就比较复杂,后期的数据维护也比较复杂。(2)为什么要拆分数据?1)像Oracle这样成熟稳定的DB,可以支持海量数据的存储和查询,但价格不是每个人都能负担得起的。2)负载高时,Master-Slaver模式存在瓶颈。现有技术中,当负载较高时,通过相关的Replication机制来实现相关的读写吞吐性能。这种机制存在两个瓶颈:首先,有效性取决于读取操作的比例。在这里,法师往往成为瓶颈。需要顺序队列来执行写操作。过载时,Master会承受不住,导致Slaver的数据同步延迟。也会很大,也会消耗CPU的计算能力。写入操作在Master上执行完后,还需要在每台slave机器上运行一次。Sharding可以方便地将计算、存储、I/O并行分布到多台机器上,使多台机器的各种处理能力得到充分利用,同时避免单点故障,提高系统可用性,并犯好错误。隔离。3)用免费的MySQL和便宜的Server甚至PC做集群,达到小型机+大型商业DB的效果,减少大量资金投入,降低运营成本。为什么不这样做呢?Mysql5.1以上版本支持数据表分区。数据库中的数据通过垂直或水平切分存储在不同的数据库主机后,应用系统面临的最大问题就是如何更好地整合这些数据源。有以下两种解决方法。1)在每个应用模块中配置管理一个(或多个)你需要的数据源,直接访问各个数据库,完成模块内的数据集成。2)所有数据源通过中间代理层统一管理,后端数据库集群对前端应用透明。第二种方案,虽然短期成本可能更高,但是对于整个系统的可扩展性是很有帮助的。对于第二种方案,思路可以如下:1)使用mysql代理实现数据切分和整合。mysql代理就是在客户端请求和mysql服务器之间建立一个连接池。所有的client请求都发送给mysqlproxy,mysqlproxy进行相应的分析判断是读操作还是写操作,然后发送给对应的mysqlserver。优越的。对于多节点slave集群,也可以实现负载均衡。2)使用amoeba实现数据切分和整合。Amoeba是一个基于java开发的开源框架,专注于解决分布式数据库数据源集成代理程序。Amoeba已经有了查询路由、查询过滤、读写分离、负载均衡、HA机制等相关内容。Amoeba主要解决以下问题:①数据切分后整合复杂数据源②提供数据切分规则,减少数据切分规则对数据库的影响③减少数据库与客户端的连接数④读写分离路由3)使用HiveDB实现数据切分和整合。3、Mysql读写分离读写分离是利用数据库复制技术,将读写分布在不同的处理节点上,从而达到提高可用性和可扩展性的目的。主库提供写操作,从库提供读操作,在很多系统中,更多的是读操作。当主库进行写操作时,数据必须同步到从库,这样才能有效保证数据库的完整性。Mysql也有自己的同步数据技术。Mysql通过二进制日志来复制数据。主库同步到从库后,从库一般由多个数据库组成,以减轻压力。读操作应该根据服务器的压力分配给不同的服务器,而不是简单的随机分配。mysql提供了mysqlproxy来实现读写分离操作。目前比较常见的mysql读写分离分为以下两种。①基于程序代码内部实现,在代码中根据select和insert进行路由分类。这种方式也是目前生产环境中应用最广泛的方式。②基于中间代理层,代理位于客户端和服务器之间。代理服务器收到客户端请求后,通过判断转发给后端数据库。下图是eBay读写分离的结构图。Shareplex用于近乎实时地将数据复制到其他数据节点,然后通过特定模块查看数据库状态,并进行负载均衡和读写分离,大大提高了系统可用性。4、Mysql集群Mysql集群技术为分布式系统中的mysql数据提供了冗余特性,增强了安全性,使得单个mysql服务器故障不会对系统造成巨大的负面影响,保证了系统的稳定性。Mysql集群采用shared-nothing(不共享)架构。Mysqlcuster主要是使用NDB存储引擎实现的。NDB存储引擎是一种内存存储引擎,需要将所有数据加载到内存中。数据自动分布在集群中不同的存储节点上,每个存储节点只存储完整数据的一个片段。同时,用户可以设置相同的数据存储在多个不同的存储节点上,保证不会出现单点故障导致数据丢失。mysql集群需要一组计算机,每台计算机的作用可能不同。mysql集群按照节点类型分为3类:管理节点(管理其他节点)、数据节点(集群中存储数据,可以有多个)和mysql节点(存储表结构,可以有多个)。Cluster中的某台计算机可以是某一种节点,也可以是两种或三种节点的集合。这三类节点只是逻辑上的划分,并不一定与物理计算机存在一一对应关系。多个节点可以分布在不同的地理位置,所以也是一种实现分布式数据库的解决方案。Mysql集群的出现,实现了数据库的负载均衡,减轻了数据中心节点和大数据处理的压力。当数据库中心节点出现故障时,集群会采用一定的策略切换到其他备份节点,有效屏蔽了单个节点的故障,不会影响整个数据库对外提供的服务。而且,通过采用数据库集群架构,主从数据库之间始终进行数据同步和冗余。数据库多点分布,做好数据库数据备份,避免数据丢失。