基于MyCat中间件的分布式数据库实现与应用

合集下载

分布式数据库的实现及其应用

分布式数据库的实现及其应用

分布式数据库的实现及其应用随着互联网的快速发展和信息化的普及,数据量大幅度增长,传统的中心化数据库管理系统已经不能满足现代应用的需求。

分布式数据库因其具有高可用性、可扩展性和容错性的特点,成为了当前大规模应用的主流技术之一。

本文将从分布式数据库的概念和实现原理入手,详细探讨分布式数据库的实现及其应用。

一、分布式数据库的概念及特点1.1分布式数据库的概念分布式数据库是指数据存储在不同的地理位置上,通过计算机网络互连,实现数据的分布式存储和管理。

它不同于传统的中心化数据库,数据存储在同一台计算机上,分布式数据库的数据可以存储在多台计算机上,各台计算机之间通过网络互联。

1.2分布式数据库的特点(1)高可用性分布式数据库系统中的数据可以在不同的节点上进行存储和访问,可以减少单点故障的影响,提高整个系统的可用性。

(2)可扩展性分布式数据库系统可以根据需要动态添加节点,实现系统的横向扩展,从而满足不断增长的数据存储需求。

(3)容错性分布式数据库系统可以通过复制数据或者备份数据的方式,提高数据的容错能力,一旦某个节点发生故障,可以通过其他节点提供的备份数据进行恢复。

(4)性能和负载均衡分布式数据库系统能够通过合理的数据分片和数据分发策略,实现负载均衡和数据访问的并行处理,提高系统的性能。

二、分布式数据库的实现原理2.1数据分片数据分片是指将数据库中的数据按照一定的规则划分成若干独立的部分,每个部分被存储在不同的节点上。

常用的数据分片策略包括:哈希分片、范围分片和复制分片。

(1)哈希分片哈希分片是将数据的主键或者某个特定字段进行哈希计算,根据哈希值的范围将数据分配到不同的节点上。

这种方式可以保证数据的均匀分布,但是在需要进行范围查询时效率较低。

(2)范围分片范围分片是根据数据的某个特定字段的取值范围将数据进行划分,每个节点负责存储一定范围内的数据。

这种方式适合于需要进行范围查询的场景,但是需要考虑数据的均匀分布。

MySql之数据库分库分表中间件mycat

MySql之数据库分库分表中间件mycat

MySql之数据库分库分表中间件mycat⼀、mycat的安装环境准备:准备⼀台虚拟机192.168.152.1281. 下载mycatcd /softwarewget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz2. 解压mycattar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz3. 剪切mycat到/usr/local⽬录下mv /software/mycat /usr/local4. 启动mycat/usr/local/mycat/bin/mycat start 启动/usr/local/mycat/bin/mycat status 查看启动状态说明:这⾥有个⼩插曲,启动⼀会mycat⼜会⾃⼰停⽌通过查看⽇志vim /usr/local/mycat/logs/wrapper.log报:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0这是因为使⽤的是jdk8的版本,jdk8以后就没有永久代了,⽽mycat的wrapper.conf⾥⾯配置了jdk8以前的永久代的内存⼤⼩,我们只需要注释这个配置就可以了重新启动mycat:/usr/local/mycat/bin/mycat start就不会出现启动⼀会⼜⾃⼰停⽌的问题了连接mycat:mysql -uroot -p123456 -h192.168.152.128 -P8066可以看到mycat连接成功5. linux下mycat常⽤命令/usr/local/mycat/bin/mycat start 启动/usr/local/mycat/bin/mycat stop 停⽌/usr/local/mycat/bin/mycat console 前台运⾏/usr/local/mycat/bin/mycat restart 重启服务/usr/local/mycat/bin/mycat pause 暂停/usr/local/mycat/bin/mycat status 查看启动状态⼆、mycat配置详解1. ⾸先查看mycat的⽂件⽬录mycat的主要配置⽂件都在conf⽬录下,核⼼的配置⽂件是schema.xml、server.xml、rule.xml这3个配置⽂件,下⾯我们来对这3个配置⽂件进⾏详细介绍2. schema.xml是Mycat最重要的配置⽂件之⼀。

基于 MyCat 分布式数据库解决方案的学汇总

基于 MyCat 分布式数据库解决方案的学汇总

基于MyCat 分布式数据库解决方案的学汇总最近公司推荐了mycat分布式中间件解决数据库分布式方案,今天到mycat官网学了一翻(),汇总下几个重点:1、mycat是什么?mycat是一个开源的分布式数据库系统,是一个实现了MySQL 协议的Server,前端用户可以把它看作是一个数据库代理,用MySQL 客户端工具和命令进行访问,后端可以用MySQL 原生(Native)协议访问数据库(不限于MYSQL数据库), 其核心功能是分表分库,即将一个多表水平分割为N 个小表,存储在后端的数据库中。

以下是几种通俗的方式介绍MYCAT:1)对于DBA 来讲:Mycat 就是MySQL Server,而Mycat 后面连接的MySQL Server,就好象是MySQL 的存储引擎,如InnoDB,MyISAM 等,因此,Mycat 本身并不存储数据,数据是在后端的MySQL 上存储的,因此数据可靠性以及事务等都是MySQL 保证的,简单的说,Mycat 就是MySQL 最佳伴侣,它在一定程度上让MySQL 拥有了能跟Oracle PK 的能力。

2)对于开发来讲:Mycat 就是一个近似等于MySQL 的数据库服务器,你可以用连接MySQL 的方式去连接Mycat(除了端口不同,默认的Mycat 端口是8066 而非MySQL 的3306,因此需要在连接字符串上增加端口信息),大多数情况下,可以用你熟悉的对象映射框架使用Mycat,但建议对于分片表,尽量使用基础的SQL 语句,因为返样能达到最佳性能,特别是几千万甚至几百亿条记录的情况下。

3)对于架构师来讲:Mycat 是一个强大的数据库中间件,不仅仅可以用作读写分离、以及分表分库、容灾备份,而且可以用于多租户应用开发、平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的Mycat 智能优化模块,系统的数据访问瓶颈和热点一目了然,根据返些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。

mycat 语法

mycat 语法

mycat 语法
Mycat是一款基于MySQL协议的分布式数据库中间件,它可以将多个 MySQL 数据库组成一个逻辑上的整体,从而实现数据的分布式存储和访问。

学习 Mycat 之前,需要了解一些基本的语法知识。

以下是 Mycat 的一些常用语法:
1. 数据库操作语法
Mycat 支持 MySQL 的所有数据库操作语法,包括 CREATE DATABASE、DROP DATABASE、USE、SHOW DATABASES 等语法。

2. 表操作语法
Mycat 支持 MySQL 的所有表操作语法,包括 CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE 等语法。

此外,Mycat 还支持表的拆分和合并操作,可以将一个表拆分成多个表,也可以将多个表合并成一个表。

3. 数据操作语法
Mycat 支持 MySQL 的所有数据操作语法,包括 SELECT、INSERT、UPDATE、DELETE 等语法。

在进行数据操作时,需要指定数据所在的逻辑库和逻辑表,Mycat 会自动将数据路由到相应的物理库和物理表上。

4. 高级语法
Mycat 还支持一些高级语法,如分片规则配置语法、路由策略配置语法、数据源配置语法等。

这些语法可以帮助我们更好地使用Mycat,提高数据访问效率和稳定性。

总之,学习 Mycat 的语法对于使用 Mycat 进行分布式数据库操作非常重要。

如果你想深入了解 Mycat,可以参考官方文档或者相关书籍。

mycat sql解析

mycat sql解析

mycat sql解析MySQL是目前最流行的关系型数据库管理系统之一。

但是,作为初学者,熟练掌握MySQL并不容易。

MyCat是一个基于MySQL协议扩展的分布式数据库中间件,它可以实现MySQL协议、数据和SQL的语义兼容,同时支持读写分离、分库分表、多数据中心、数据备份等功能。

MyCat的重要功能有哪些MyCat是一个中间件,主要用于实现MySQL协议、数据和SQL的语义兼容。

其核心功能包括:1. 分库分表:将数据按照一定规则分配到不同的表或者数据库中,可以有效提高系统的扩展性和性能。

2. 读写分离:根据不同的访问需求,将读操作和写操作分配到不同的MySQL实例中,可以有效降低数据库的负载。

3. 多数据中心:MyCat支持多数据中心架构,可以实现数据的备份、灾备和负载均衡。

4. 缓存:MyCat支持查询结果缓存,可以有效提高查询效率。

6. SQL解析:MyCat支持SQL解析功能,可以将SQL语句解析成对应的MySQL SQL语句。

7. 数据分片:MyCat支持基于hash算法或range分片的数据分片功能,可以实现数据的水平切分和动态扩容。

8. 其他:MyCat支持动态上下线节点、SQL方式和MyCat管理后台等功能。

MyCat的SQL解析功能如何实现下面是MyCat SQL解析器的主要流程:1. SQL解析:MyCat首先将SQL文本解析成抽象语法树(AST)的形式。

AST是一个抽象的描述文本结构的树形结构,其中每个节点都表示文本结构中的一个组成部分。

2. SQL提交:MyCat将AST提交给后续的处理流程,这些流程包括SQL优化、SQL执行和结果返回等。

3. SQL优化:MyCat通过SQL优化器对AST进行优化,主要包括查询优化和执行计划生成两个部分。

4. SQL执行:MyCat通过执行计划生成器生成SQL执行计划,并将SQL计划交给MySQL 实例进行执行。

在执行过程中,MyCat还会负责读写分离、数据分片、数据备份等功能。

基于Mycat的分布式数据库的应用研究

基于Mycat的分布式数据库的应用研究

栏目编辑:梁丽雯 E-mail:liven_01@基于Mycat的分布式数据库的应用研究■ 中国人民银行朔州市中心支行 高鹏祥 中国人民银行太原中心支行 陈文俊摘要:近年来,人民银行业务规模快速增长,作为业务系统核心的数据库面临着存储性能低和业务连续性弱等多方面的挑战。

分布式数据库的出现为突破大规模、突发性、高并发量的业务场景提供了有效的解决方案。

本文结合人民银行业务需求,对基于Mycat的分布式数据库进行了研究。

经模拟测试,基于Mycat的分布式数据库具有高性能、高可用等特点,可用于弥补集中式数据库在人民银行业务应用中的不足。

关键词:Mycat;分布式数据库;可用性作者简介: 高鹏祥(1988-),男,山西朔州人,工学硕士,工程师,供职于中国人民银行朔州市中心支行,研究方向:分布式系统架构; 陈文俊(1980-),男,广东兴宁人,工学硕士,高级工程师,供职于中国人民银行太原中心支行,研究方向:金融大数据。

收稿日期: 2018-11-06一、研究背景随着金融信息化建设不断的更新和完善,人民银行业务规模持续扩大,业务量快速增长,对数据管理技术提出了更高的要求。

传统的集中式数据库数据处理瓶颈逐渐凸显,难以满足日益增长的业务需求,主要体现在以下几个方面。

(一)性能与存储不足以支付业务为例,2017年,人民银行支付系统共处理支付业务122.89亿笔,金额3 964.57万亿元,日均处理业务3 528.45万笔,金额15.68万亿元。

受制于单机设备的最大容量和处理能力,数据量的爆发式增长会导致单机存储能力严重不足,而频繁的数据查询使单机处理和响应性能严重下降,严重削弱了系统的服务能力。

(二)难以保障业务连续性按照《中国人民银行信息系统业务连续性分级保障标准》的要求,人民银行二级(L2)以上信息系统可用性至少达到99%,第五级(L5)信息系统可用性要达到99.999%。

而集中式数据库中所有数据存储并运行在单点主机上,硬件故障、软件错误、操作失误、恶意破坏都可能导致主机系统运行的非正常中断,造成数据服务无法响应,严重降低系统的整体可用性。

mycat作用及工作原理

mycat作用及工作原理

mycat作用及工作原理Mycat是一个开源的分布式数据库中间件,可以提供高性能和高可用性的数据访问服务。

它基于MySQL协议,可以将多个MySQL 服务器组织成一个逻辑上的数据库集群,对应用程序透明,提供统一的访问接口。

本文将介绍Mycat的作用及其工作原理。

一、Mycat的作用1.1 数据库分片Mycat可以将一个数据库分片成多个片段,每个片段可以存储一部分数据。

这样可以将数据分散存储在不同的物理节点上,提高了数据库的可扩展性和并发性能。

1.2 数据库读写分离Mycat可以将数据库的读操作和写操作分离,将读操作分发到多个从节点上执行,提高了数据库的读取性能。

1.3 数据库负载均衡Mycat可以根据不同的负载均衡策略,将数据库的请求分发到不同的物理节点上,实现负载均衡,提高了数据库的并发性能和稳定性。

1.4 数据库透明切换Mycat可以在数据库的主从切换时,对应用程序透明,无需修改代码,实现数据库的高可用性和容灾性能。

二、Mycat的工作原理2.1 数据库分片Mycat将一个数据库分片成多个片段,每个片段可以存储一部分数据。

它通过对数据进行哈希或范围分片,将数据均匀地分布到不同的片段中。

这样可以将数据分散存储在不同的物理节点上,提高了数据库的可扩展性和并发性能。

2.2 数据库读写分离Mycat通过将读操作和写操作分离,将读操作分发到多个从节点上执行,提高了数据库的读取性能。

它可以根据负载均衡策略,将读操作请求分发到不同的从节点上,实现负载均衡。

2.3 数据库负载均衡Mycat可以根据负载均衡策略,将数据库的请求分发到不同的物理节点上,实现负载均衡。

它可以根据请求的类型、请求的来源、物理节点的负载情况等因素,选择合适的节点来处理请求,提高了数据库的并发性能和稳定性。

2.4 数据库透明切换Mycat可以在数据库的主从切换时,对应用程序透明,无需修改代码。

它可以通过监控数据库的主从状态,当主节点发生故障或不可用时,自动切换到从节点,保证数据库的高可用性和容灾性能。

如何使用MySQL实现分布式数据库架构

如何使用MySQL实现分布式数据库架构

如何使用MySQL实现分布式数据库架构引言在当今互联网时代,海量的数据处理和存储是一个无法回避的问题。

分布式数据库架构就是为了解决单一数据库无法满足高并发、高可用和数据安全性需求而产生的一种解决方案。

MySQL作为最常用的关系型数据库管理系统,也可以通过一些技术手段实现分布式架构。

本文将介绍如何使用MySQL实现分布式数据库架构,探讨其原理和实施方法。

一、分布式数据库架构原理概述分布式数据库架构是将数据分散存储在不同的物理节点上,通过网络进行通信协作,实现数据的共享和处理。

其主要原理包括数据分片、数据一致性和查询路由。

1. 数据分片数据分片是指将数据库的数据按照一定规则划分为多个片段,分散存储在多个节点上。

一般可以按照数据的某个字段进行分片,如根据用户ID进行取模分片。

数据分片可以提高数据库的并发处理能力和数据存储能力,减轻单个节点的压力。

2. 数据一致性数据一致性是分布式数据库架构中必须要解决的问题。

由于数据存储在不同的节点上,节点之间可能出现数据不一致的情况,例如数据写入后没有及时同步到其他节点。

常见的解决方案有强一致性和最终一致性。

强一致性要求数据在多个节点间是同步的,即读取数据时各节点返回的结果一致;最终一致性则容许数据在多个节点间存在一定的延迟,但最终数据会达到一致的状态。

3. 查询路由查询路由是指根据查询条件将查询请求发送到相应的数据库节点上。

在分布式数据库架构中,不同的节点可能存储不同的数据分片,因此需要智能地将查询路由到合适的节点上。

常见的查询路由策略有基于哈希的路由和基于区间的路由。

哈希路由将查询条件进行哈希计算后,将查询请求定向到相应的节点上;区间路由则根据数据分片的范围判断查询请求应该发送到哪个节点。

二、MySQL分布式数据库架构实践在实践中,可以使用MySQL Proxy、MySQL Cluster或者自定义中间件等技术手段实现MySQL分布式数据库架构。

下面将重点介绍两种常见的实践方法:MySQL Proxy和MySQL Cluster。

Mycat配置及使用详解.

Mycat配置及使用详解.

Mycat配置及使⽤详解.⾸先我们来看下什么是Mycat:MyCat:开源分布式数据库中间件, 这⾥定义的很简单, 就是分布式数据库的中间件.其实Mycat 是可以时mysql进⾏集群的中间件, 我们可以对mysql来分库分表来应对⽇益增长的数据量. 每台机器只存少量数据, 数据总和是分布式的机器上数据量总和.例如我们⼀个表中有512条数据(当然实际情况可能有成千上万条数据), 那么现在我们有三台机器装有mysql数据库, 我们想将这些数据按照⼀定规则的存储在三台机器上, 那么我们设定规则:表的id%/512 取的结果按照区间分别存储在三个不同的数据库中, 但是这三个数据库⼜要统⼀的对外提供服务.那么这些分割算法以及统⼀对外提供服务是谁来提供⽀持的呢? 当然就是我们今天要讲的Mycat了.在Linux下连接Mysql:连接Linux中的mysql数据库:(这⾥我们的Linux IP为192.168.200.140)查看表结构:查看1库中的商品ID(这个已经是通过Mycatt分好的)查看1库中的商品ID(这个已经是通过Mycatt分好的)查看1库中的商品ID(这个已经是通过Mycatt分好的)启动Mycat连接Mycat:在项⽬组中设置默认连接为Mycat:(关于这⾥数据库为什么是babasport⽽不是babasport1或babasport2等, 后⾯会说明)Mycat的配置:1, ⽤户名及密码设置:server.xml:2, 逻辑库中的定义表:schema.xml:这⾥需要说⼀下, 因为bbs_color和bbs_brand表中的数据很少, 所以这⾥不需要分库分表, 直接设置成全局表就⾏, 也就是这两个表中的数据在1,2,3 库中都是⼀样的.还有就是childTable, 我们拿bbs_product和bbs_sku来说, 因为商品product和库存bbs_sku是⼀对多的关系, 那么我们就希望商品id为1 的商品所对应的库存都是在同⼀个库中的, 这样查询的话就不⽤跨库了.同样这⾥还有⼀个属性是rule="sharding-by-pattern", 那么接下来我们就要看下这⾥设定的规则了.因为上⾯的schema标签中有定义的那么为babasport, ⽽且dataNode节点⼜分别指向dn1, dn2, dn3, 所以这⾥就可以做到对应了.我们在项⽬连接的时候直接是连接babasport的.3, 查看分⽚规则: rule.xml这⾥指定算法为sharding-by-pattern.查看算法sharding-by-pattern, 这⾥指定算法存储在partition-pattern.txt这⾥是通过PartitionByPattern这个类来实现的, 这⾥是对512进⾏取模, 如果取模过程中出现异常, 那么就放到3库(0,1,2)中进⾏存储.查看算法指定⽂件:这⾥就可以⼀⽬了然的查看到 0-127 是放在1库中, 128-255 是放在2库中, 256-512 是放在3库中.同样Mycat还⽀持动态扩容, 当我们的数据量越来越⼤时我们还可以加机器来分担压⼒, Mycat可以动态的取扩容. 这⾥就不再讲具体的实现原理了.关于Mycat的内容就说到这⾥, 更深层次的东西⼤家可以继续查阅相关资料, 我这⾥只是做⼀个介绍和⼊门.。

mycat分库规则

mycat分库规则

MyCat分库规则1. 什么是MyCatMyCat是一个开源的数据库中间件,它提供了分片和分库功能,可以将一个数据库的数据分散到多个服务器上进行存储和查询。

通过使用MyCat,我们可以实现数据库的水平扩展,提高系统的性能和可伸缩性。

2. 分库规则概述在使用MyCat进行分库时,我们需要定义一套合适的分库规则。

分库规则决定了如何将数据根据某个字段或条件进行划分,并将其存储到不同的数据库节点中。

下面是一些常用的分库规则:•哈希取模:根据某个字段值进行哈希运算,然后对数据库节点数量取模来确定存储位置。

•范围划分:根据某个字段值的范围来划分数据,例如按照时间范围、地理位置等。

•轮询方式:按照固定顺序依次将数据存储到不同的数据库节点中。

•一致性哈希:通过哈希算法将数据均匀地散列到不同的节点上。

选择合适的分库规则需要考虑业务需求、数据特点以及系统架构等因素。

下面我们将详细介绍几种常用的分库规则。

3. 哈希取模哈希取模是一种常见的分库规则,它可以将数据均匀地散列到不同的数据库节点上。

具体步骤如下:1.选择一个字段作为哈希字段,通常选择主键或唯一索引字段。

2.对哈希字段进行哈希运算,得到一个哈希值。

3.将哈希值对数据库节点数量取模,得到存储位置。

例如,我们有三个数据库节点,分别为db1、db2和db3。

现在有一条数据的主键值为101,我们可以使用哈希取模规则来确定存储位置:int hash = hashFunction(101); // 哈希函数将主键值转换为哈希值int index = hash % 3; // 对数据库节点数量取模String dbNode = "db" + (index + 1); // 根据索引确定数据库节点名称通过这种方式,我们可以保证相同的主键值始终存储在同一个数据库节点上。

4. 范围划分范围划分是另一种常见的分库规则,它根据某个字段值的范围来划分数据。

例如,我们可以按照时间范围将数据划分到不同的数据库节点中。

一、Mycat实战---为什么要用mycat

一、Mycat实战---为什么要用mycat

⼀、Mycat实战---为什么要⽤mycat系列导航本篇博客开始给⼤家介绍⼀下mycat,个⼈感觉这个东西⾮常不错填补了关系型数据库分布式部署领域的⼀个空⽩。

后续将围绕mycat他能⼲什么?mycat是什么?怎么⽤?来介绍mycat,当然重点是怎么⽤,这将伴随⼀系列的样例来给⼤家介绍。

怎么⽤将围绕以下⼏点来逐步给⼤家讲解1、mycat的安装2、mycat的实验数据3、mycat垂直分布及全局表实验4、mycat⽔平分布实验5、mycat全局ID⾃增实验6、mycatER分⽚表实验序:所有介绍的内容都是参考Mycat权威指南和⼀个视频教程内容,然后亲⾃动⼿验证过得,⾮常感谢视频的录制者能够分享,我也继承分享精神继续分享给⼤家,有什么建议欢迎⼤家⼀起讨论。

博客中的⽂字描述都是我个⼈的体会肯定会有不全⾯的地⽅甚⾄不对的地⽅,希望⼤家指正。

⼀、⾸先说mycat能⼲什么?答案:他能够将mysql数据组成⼀个分布式的集群,可以把物理上多个独⽴的mysql数据库,搞成⼀个逻辑上的整体,使开发者感受不到的物理上的独⽴。

这些物理上独⽴的mysql数据库按照配置不同各⾃完成各⾃的⼯作。

⼆、为什么要介绍mycat?这些年随着互联⽹、物联⽹的发展产⽣了⼤量的数据,伴随⽽⽣的涌现出⼀批新型的nosql数据库⽐如mongodb、redis还有消息队列kafka、这些新型的nosql数据库和消息队列,发展⾮常快以更快的读写速度、⾼可⽤的架构设计⽽抢占了传统关系型数据库的⼀些市场份额。

但我认为传统数据库的优势是⽆法撼动的,MongoDB读写是快你让他关联查询试试。

总之各有各的优势不同的业务场景找到最适合的技术⽅案就ok。

mongodb、redis、kafka这些都可以搞成集群甚⾄搞成分⽚来提整体的性能并且实现了⾼可⽤。

但是咱们传统的关系型数据库貌似没有这样的能⼒。

阿⾥巴巴修改了mysql的源码搞成了mysql的集群⽽替代了昂贵的oracle,但我们并没有能⽅便的使⽤该项技术,起码我没有在⽹上找到我想要的东西。

MyCat数据库集群中间件搭建实操

MyCat数据库集群中间件搭建实操

MyCat数据库集群中间件搭建实操MyCat数据库集群中间件搭建实操 (1)1. 什么是MyCat (2)1.1. 介绍 (2)1.2. MyCat的关键特性 (2)1.3. 构架及数据库支持 (2)2. Linux系统Mysql数据库安装 (3)3. MyCat的安装及数据库集群配置 (6)3.1. 启动Mysql,并创建三个数据库实例 (6)3.2. 安装MyCat及配置 (6)3.3. 测试MyCat中间件控制数据库集群 (7)3.4. 错误排查 (10)1. 什么是MyCat1.1. 介绍MyCat就是一个彻底开源的,面向企业应用开发的“大数据库集群;支持事务、ACID、可以替代Mysql的加强版数据库;一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群;一个融合内存缓存技术、Nosql技术、HDFS 大数据的新型SQL Server;结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品;一个新颖的数据库中间件产品。

1.2. MyCat的关键特性支持Mysql集群,可以作为Proxy使用支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群自动故障切换,高可用性支持读写分离,支持Mysql双主多从,以及一主多从的模式支持全局表,数据自动分片到多个节点,用于高效表关联查询支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询多平台支持,部署和实施简单1.3. 构架及数据库支持MyCat使用Mysql的通讯协议模拟成了一个Mysql服务器,并建立了完整的Schema(数据库)、Table (数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNode(MySQL Instance)上的真实物理库中,这样一来,所有能使用Mysql的客户端以及编程语言都能将MyCat当成是Mysql Server来使用,不必开发新的客户端协议。

Mycat开源分布式数据库中间件介绍

Mycat开源分布式数据库中间件介绍

Mycat分片方案
范围类分片规则 CATALOG
1. 范围约定 目录 2. 目录 按日期(天)分片 3. 按单月小时拆分 4. 自然月分片
设计目标
平滑移植
大数据
CATALOG目录 目录
兼容MySQL,MYSQL项目很容易移 植到MyCAT上 多种分片算法,100亿大表,秒级并 行查询 透明的读写访问机制,多数据源
应用透明 高可用 高性能
内建数据库集群故障切换机制
支持MySQL主从集群、 Galera Cluster多主同步集群
设计目标
Mycat开源分布式数据库中间件介绍
目目录录
CATALOG目录 目录
第一部分:Mycat • 介绍 • 设计目标
• 应用场景
• 方案对比 • 技术架构
第二部分:集群及规划
目Mycat介绍录
一个彻底开源的,面向企业应用开发的大数据库集群 CATALOG 目录 ACID、可以替代MySQL的加强版数据库 支持事务、 目录 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 一个新颖的数据库中间件产品
集群能力
企业级特性
Oracle有很多企业级特性以及 MySQL缺乏很多高级的企业级特性,因此关键 完备的工具等,满足苛刻要求 业务领域还无法跟上Oracle,但在大多数业务 的关键业务领域 领域,已经满足需求,特别是互联网领域 Oracle大规模使用下的成本比 较高,包括高端硬件的支出和 运维费用 MySQL的使用费用基本为零,而硬件方面的成 本也相对低很多

mycat的使用

mycat的使用

mycat的使用
Mycat是一款开源的分布式数据库中间件,可以用于MySQL、MariaDB、Oracle等关系型数据库。

它提供了数据分片、读写分离、负载均衡、高可用等功能。

Mycat的使用可以大大提高数据库的性能和可用性。

它可以将数据分片存储在不同的节点上,从而提高数据的读写速度和并发能力。

同时,它可以将读操作和写操作分配到不同的节点上,从而实现读写分离,减轻数据库的负担。

此外,Mycat还支持主从同步和自动故障转移,保证数据库的高可用性。

要使用Mycat,需要进行以下步骤:
1. 下载Mycat并解压缩到任意目录。

2. 修改Mycat的配置文件,包括server.xml、schema.xml、rule.xml等,配置数据源、分片规则、读写分离等。

3. 启动Mycat的管理端口,通过管理端口管理Mycat的运行状态和配置。

4. 将应用程序的连接信息指向Mycat,从而实现对数据库的访问。

需要注意的是,Mycat需要对应用程序进行一定的改造,包括修改连接字符串、使用Mycat提供的SQL语法等。

此外,Mycat还有一些限制和不足之处,需要根据具体情况进行权衡和选择。

总之,Mycat是一款非常有用的数据库中间件,可以大大提高数据库的性能和可用性。

使用Mycat需要一定的技术水平和实践经验,
但只要按照要求进行配置和使用,就可以获得显著的效果。

Mycat开源分布式数据库中间件介绍

Mycat开源分布式数据库中间件介绍

远程培训服务
通过电话会议、 QQ会议等方式进行远程培训,协助项目组 按次 2 成员掌握Mycat基本技能并集中解答技术问题,每次2小时
现场技术 支持服务
1.现场(Mycat专家 )技术支持服务
4
人天 人天
2.现场(Mycat Leader)技术支持服务
5
目目录录
CATALOG目录 目录
第一部分:Mycat • 介绍 • 设计目标
现场技术 支持服务
1.现场(Mycat专家 )技术支持服务
人天 人天
4
2.现场(Mycat Leader)技术支持服务
5
合作模式
软件项目全生命周期顾问服务 目录
服务项目 描述 标准
咨询服务
提供包括项目风险评估、需求分析、中间件选型、架构设 按半年,年付费 计和评估、 1 POC原型设计、项目管理支持、核心代码研发、 技术攻关、性能测试方案、系统性能优化、数据库优化等 全生命周期技术服
多主同时写入,高可靠性,适合系统中的关键表 Client Galera cluster
帐务表、订单表等
用户表、字典表、常规数据
主从故障切换,可能有数据丢失的问题
Mysql Master/Slave
Mycat
One Schema 日志类的数据
存储大量一次性非业务数据 NoSQL
一个逻辑库
Mycat典型应用场景
成本问题
Mycat分片方案
解决的问题?: CATALOG目录 单库单节点数据过大带来的性能及稳定性 目录
切分后带来问题: -引入分布式事务的问题。 -跨节点Join 的问题。 -跨节点合并排序分页问题。 -数据热点问题
所以: -尽量不切分,架构是进化而来,不是一蹴而就。 -最大可能的找到最合适的切分维度。 -由于数据库中间件对数据Join 实现的优劣难以把握,而且 实现高性能难度极大,业务读取 -尽量少使用多表Join -尽量通过数据冗余,分组避免数据垮库多表join。 -尽量避免分布式事务。 -单表切分数据1000万以内。

mycat部署和基本使用

mycat部署和基本使用

mycat部署和基本使⽤1 mycat简介1.1 各类数据库中间件中间件种类很多种,如下图:Cobar: 阿⾥巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。

在阿⾥经受住了考验,后⾯由于作者的⾛开的原因cobar没有⼈维护了,阿⾥也开发了tddl替代cobar。

MyCAT: 社区爱好者在阿⾥cobar基础上进⾏⼆次开发,解决了cobar当时存在的⼀些问题,并且加⼊了许多新的功能在其中。

⽬前MyCAT社区活跃度很⾼,⽬前已经有⼀些公司在使⽤MyCATOneProxy: 数据库界⼤⽜,前⽀付宝数据库团队领导楼总开发,基于mysql官⽅的proxy思想利⽤c进⾏开发的,OneProxy是⼀款商业收费的中间件,专注在性能和稳定性上。

Vitess: 这个中间件是Youtube⽣产在使⽤的,但是架构很复杂。

与以往中间件不同,使⽤Vitess应⽤改动⽐较⼤要使⽤他提供语⾔的API接⼝。

Kingshard: Kingshard是前360Atlas中间件开发团队的陈菲利⽤业务时间⽤go语⾔开发的,⽬前在不断完善。

Atlas: 360团队基于mysql proxy 把lua⽤C改写。

原有版本是⽀持分表,⽬前已经放出了分库分表版本。

MaxScale与MySQL Route: MaxScale是mariadb 研发的,⽬前版本不⽀持分库分表。

MySQL Route是现在MySQL 官⽅Oracle公司发布出来的⼀个中间件。

1.2 Mycat是什么MyCat是⼀个数据库中间件,是⼀个实现了MySQL协议的服务器,前端⽤户可以把它看作是⼀个数据库代理,⽤MySQL客户端⼯具和命令⾏访问,⽽其后端可以⽤MySQL 原⽣协议与多个MySQL服务器通信,也可以⽤JDBC协议与⼤多数主流数据库服务器通信,其核⼼功能是分表分库,即将⼀个⼤表⽔平分割为N个⼩表,存储在后端MySQL 服务器⾥或者其他数据库⾥。

MyCat发展到⽬前的版本,已经不是⼀个单纯的MySQL代理了,它的后端可以⽀持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也⽀持MongoDB这种新型NoSQL⽅式的存储,未来还会⽀持更多类型的存储。

基于mycat的拟态数据库中间件研究

基于mycat的拟态数据库中间件研究

基于Mycat 的拟态数据库中间件研究①曹国栋, 倪 明, 喻卫东, 王 灿(华东计算技术研究所, 上海 201808)通讯作者: 曹国栋, E-mail: guodong-cao@摘 要: 数据库系统的安全不仅依赖于数据库本身的安全, 还受网络环境和操作系统的安全性影响, 拟态防御是邬江兴院士首次提出的基于动态异构冗余体系架构, 协同实现数据库所依赖环境, 使数据库安全由被动防御变为主动防御. 本文通过Mycat 作为数据库中间件, 通过对数据库的读写分离, 集群的高可用, 分布式事务处理, 对指纹化SQL 识别, 以减轻单一数据库的数据存取和处理压力. Mycat 将数据库模块变为异构动态冗余模式, 实现数据库拟态化, 使数据高效, 快速, 安全的存取和切分.关键词: 拟态防御; Mycat; 高集群; 高可用; 分布式处理; 指纹SQL引用格式: 曹国栋,倪明,喻卫东,王灿.基于Mycat 的拟态数据库中间件研究.计算机系统应用,2019,28(10):219–225. /1003-3254/7079.htmlResearch on Mimic Data Processing Based on Mycat MiddlewareCAO Guo-Dong, NI Ming, YU Wei-Dong, WANG Can(East China Institute of Computing Technology, Shanghai 201808, China)Abstract : The security of the database system depends not only on the security of the database itself, but also on the security of the network environment and the operating system. The mimicry defense is proposed firstly by Academician WU Jiang-Xing based on the dynamic heterogeneous redundancy architecture, and the database is dependent on the environment. Security has changed from passive defense to active defense. This study uses Mycat as a database middleware, through the separated read and write of the database, the cluster's high availability, distributed transaction processing, fingerprinting SQL identification, to alleviate the data access and processing pressure of a single database.Mycat turns the database module into a heterogeneous dynamic redundancy mode, which enables database mimicking,enabling efficient, fast, and secure access and segmentation of data.Key words : cyberspace minic defense; Mycat; high cluster; high availability; distributed processing; fingerprint SQL现在社会, 信息技术飞速发展, 伴随着数以亿计的数据产生, 数据库作为整个系统中信息输入和输出的重要组件, 对于其保护和处理, 日益成为人们关注的焦点.据统计仅2018年数据泄露事件高达945次, 导致的信息泄露数量达到45亿条之多, 信息量陡增133个百分点.2018年5月, 在南京举办的“强网杯”拟态防御挑战赛, 在国内外22支顶尖战队的高强度攻击下, 拟态防御设备成功封堵了所有攻击, 即使开放管理员权限,在拟态防御设备中随意注入后门, 也没有任何战队突破拟态防御, 为拟态防御进行全方位、高强度的安全检验. 拟态防御[1,2](Cyberspace Mimic Defense, CMD)是在功能等价的条件下提供可控的执行环境的跳变和迁移, 使攻击者对目标环境的难以掌握[3,4]. 在拟态环境中, 海量数据存储与访问是系统设计与使用的瓶颈问题, 利用开源的分布式存储数据库中间件Mycat, 通过对数据进行水平切分, 将不同的表映射到不同的数据计算机系统应用 ISSN 1003-3254, CODEN CSAOBNE-mail: csa@ Computer Systems & Applications,2019,28(10):219−225 [doi: 10.15888/ki.csa.007079] ©中国科学院软件研究所版权所有.Tel: +86-10-62661041① 收稿时间: 2019-03-14; 修改时间: 2019-04-04; 采用时间: 2019-04-10; csa 在线出版时间: 2019-10-15库中, 通过集群管理, 事务分布式处理[5], 实现数据库容量的扩充和数据库结构的冗余, 加之其对SQL语句有拦截和分析的作用, 依据指纹特征对执行体指纹化SQL指令进行特征化处理, 发现并剔除攻击者注入的非法指令. Mycat对数据库返回的数据进行表决, 判断异常数据库, 并对出现故障的数据库进行还原保护, 实现数据库的拟态化.1 拟态介绍拟态防御(CMD)是中国工程院邬江兴院士在2013年的提出的关于网络空间安全防御的创新性理论, 网络空间拟态防御是基于一种主动防御和被动防御相结合的网络安全防御架构, 克服了以往计算机系统漏洞, 后门或者病毒的时间不确定性, 危害未知性,资源破坏性, 为将来的网络安全防御提供普适创新的理论和方法指导[6, 7].1.1 拟态防御应用在网络基础设施中, 一些高校和科研院所已提出了拟态防御中异构性的构造方法, 文献[8]提出了利用软硬件多样性实现多源异构化处理方法; 文献[9,10]提出了利用软件多样化编译对单一软件进行异构化处理的方法,也随之研制出了包括拟态Web服务器[11,12]、拟态防御路由器[13,14]拟态DNS服务器[15]等应用设备.1.2 拟态防御原理拟态防御的基本原理是: 在不依赖未知攻击特征信息的前提下, 通过多个等价等功能的不同体系结构的执行体, 利用动态异构冗余架构(DynamicHetero geneous Redundant Architecture, DHRA)[2], DHRA模型如图1所示, 实现运行环境、网络、数据、软件等结构的主动切换或快速转移, 代表性技术如表1, 使攻击者难以判断目标对象的运行环境和机制, 提高攻击者在时间维度和空间维度的攻击成本和难度[8].图1 DHRA模型表1 动态性技术分类序号类别代表性技术1动态网络IP地址跳变端口跳变2动态平台基于编译多样性技术的N变体系统3动态运行环境地址空间随机化, 指令集随机化4动态软件软件实现多样性5动态数据数据与程序随机化加密存储在高可靠的非相似余度“容错”模式下, 执行体通过可重组, 可重构, 可重建和可重定义等动态构造方法,实现异构性, 动态性和冗余判断. 动态异构冗余模型(DHRA)由输入, 输入代理, 执行体集(A1, A2, A3, … , A n),多模/策略表决器, 输出组成. 根据系统输入, 异构元素池中选择异构元素, 组成m个异构构件, 通过系统的策略调度, 形成n个异构执行体, 经过对执行体产生的结果多模判决, 决定系统输出[2].2 拟态数据库中间件数据库中间应用于Web服务器和数据服务器之间, 对两者之间交互的数据库指令进行拦截. 拟态数据库中间件要实现数据库的切分和扩容, 集群管理, 事务分布式处理, 与此同时, 要实现对SQL语言进行特征处理, 识别和执行SQL指纹语句, 剔除攻击者注入的非法指令, 并对出现故障的数据库进行还原保护.基于此现状, 本研究提出利用Mycat在拟态环境中作为数据库的中间件, 借助于动态冗余异构模型设计, 利用拟态安全的环境为依托, 简化拟态环境中数据的切分, 存取和同步, 调用对应SQL指纹指令对前端指纹SQL执行进行去指纹化.2.1 中间件简介Mycat是用于解决传统关系型数据库大数据存储不足而设计的开源分布式数据存储中间件[16], 使用NIO重构的网络模块, 优化缓冲内核, 增强聚合等基本特性, 兼容Oralce、PostgreSQL等多种数据库, 实现跨语言, 跨平台, 跨数据库的通用中间件, 并提供和原生数据库一致的命令访问的支持, 可实现集群管理, 自动扩容, 智能优化的功能[5], Mycat架构如图2. Mycat作为中间件, 其功能更好的对数据库实现拟态防御中动态异构冗余模型(DHRA)构造, 使数据的访问和处理更安全, 高效.2.2 中间件在拟态中集群管理由于在拟态环境中需要多个执行体, 为保证执行体执行的数据统一和多模裁决, 所有执行体共用一个计算机系统应用2019 年 第 28 卷 第 10 期数据库集群, 这就要求数据库能够同时容纳并处理大量数据, 并且对指纹SQL 语言有切分判决能力. Mycat 作为数据库的中间件能在拟态环境中搭建以Mysql 为底层节点的分布式数据库系统[17], 系统通过Mysql 的通信协议[18]与用户以及底层数据库通信, 实现负载均衡、指纹SQL 语句重写、读写分离、多台数据库并行处理以及结果集合并等功能[5], 又因其是开源程序,Mycat 对整个集群能透明地访问和管理, 集群管理如图3, 这在拟态环境中, 集群管理为数据的安全访问和处理提供了更可靠高效的保障.图2 Mycat 架构图3 Mycat 集群管理2.2.1 数据库中间件的切分在拟态环境中, 多个异构执行体访问同一数据库,这就对数据库存储和运算能力有一定的要求. 作为执行体和数据库的中间件, Mycat 对执行体发送的SQL 语句进行拦截分析, 通过逻辑表中的取模分片算法、分片枚举、Hash 分片等特定算法, 将数据的存储和读取, 由一个数据库分散到多个数据库中, 减少了单个数据库存储和运算压力, 实现数据分布式存储[5], Mycat 分布式数据存储构架如图4.图4 Mycat 分布式数据存储构架2.2.2 数据库中间件高可用性在拟态环境中, 多个执行体对数据库进行频繁的数据存储和读取, Mycat 作为执行体和数据库连接点,其本身的高可用性涉及所连接数据库乃至整个拟态系统的高可用性. 数据库经过切分后, 在各个节点的数据库独立运行前提下, Mycat 使用主从复制高的可用配置,将dataHost 中的writeNode 配置为主节点, readNode 配置为从节点, 在逻辑表中, 可配置多个readNode 和writeNode, 实现多写多读. 在Mycat 正常运行时, 其内部对dataHost 中的全部readHost 和WriteHost 节点定期发起心跳检测[5], 将全部的DML SQL 发送给第一个writeNode, 当第一个writeNode 所在的节点出现宕机, 默认3次心跳检测失败后, Mycat 将自动切换到下一个可用的writeNode, 并执行DML SQL 语句. 由于Mycat 是无状态中间件, 在拟态环境下, 用HAProxy 等负载均衡软件部署为集群模式[1], Mycat 高可用架构如图5.图5 Mycat 高可用架构2.2.3 数据库中间件分布式处理事务处理由一组操作构成, 其具有原子性(atomicity)、隔离性(isolation)、持久性(durability)和一致性(consistency)4 个特性[5], 在拟态环境中, 我们希望通过中间件的分布式处理[17](Distributed Transaction Processing, DTP)将所有SQL 语句正确执行. 分布式事2019 年 第 28 卷 第 10 期计算机系统应用务处理(DTP)是在一个或多个数据库完成SQL 语句执行过程的集合, 其关键是知道事务在数据库中任何地方所做的动作, 通过事务准备, 提交, 反馈, 产生统一的结果, 如果某个步骤发生错误, 就需要回滚到上一步已经完成的操作. X/Open 定义了分布式事务处理模型,其由应用程序 (ApplicationProgram, AP)、资源管理器(ResourceManagement, RM)、通信资源管理器 (Commu-nication Resource Management, CRM)、事务管理器(Transaction Management, TM)四部分组成[5]. AP 可以和TM 以及RM 通信, TM 和RM 互相之间可以通信, TM 和RM 通过XA 接口进行双向通信, TM 通知RM 提交事务或者回滚到上一事务正确执行完的点, RM 把提交结果通知给TM.在拟态环境中, 在准备阶段, Mycat 中事务管理器通知节点数据库准备分支事务, 节点数据库准备结果;在提交阶段, 事务管理器通知节点数据库提交分支事务, 节点数据库将结果提交给Mycat,正常提交执行过程如图6. 当在第一阶段出现某一个数据读取和改写失败, 第二阶段就回滚到第一阶段已经预提交成功的数据, 提交失败执行过程如图7.图6 提交成功图7 提交失败2.2.4 数据库中间件对指纹SQL 处理现在网络数据窃取成功, 主要是攻击者了解并熟悉被攻击系统的语言, 进而注入代码攻击成功, 在拟态环境中, SQL 脚本采用基于指纹化的数据库指令异构[2],通过对正常的执行语句加入指纹, 让攻击者不了解指纹化的执行语言, 使其注入的指令是无法正确执行. 当指纹SQL 语句通过Mycat 时, 数据库首先判断请求的地址, 若请求来自网站端, 将请求指令加到执行体对性的队列中, 然后进行指纹SQL 语言过滤, 指纹SQL 处理结构如图8, 利用多模表决机制, 将SQL 语句进行一致性表决, 表决一致, 则执行正常SQL 语句, 表决不一致, 则进行异常处理.图8 指纹SQL 处理结构图数据库返回的结果保存到缓冲区中, 相同的数据会被映射到Hash 表中的相同位置, 所有结果返回完整后, 对数据库返回内容的完整性进行Hash 比较, 比较通过后, 数据返回给执行体, 若比较不一致, 把出错信息发送给拟态系统的反馈调度服务器进行决策调度.R i ={P 1P 2,···,P n }Hash 表中数据信息进行比较伪代码如下所示: 数据库的返回结果R i 包括多个数据包, 形式为: ,For i in 1..n :P i = get_resp()Put_to_push()//将数据库返回的结果放入Hash 表中If get(P i ) > n /2+1//相同结果超过一半时Send(P i ) //返回结果Remove(P i )//删除已经对比完成的数据2.2.5 数据库多模表决机制在拟态环境中, 用动态冗余架构特性改变传统防御环境中的相似性, 确定性和静态性; 利用矢量空间多模裁决机制, 如图9, 形成非协同条件下, 多元动态目标协同一致攻击难度以实现“面防御”功能. 在数据库环境中, 目标对象外部SQL 服务请求依据策略分发给各个数据库, 数据库的输出矢量经过Hash 表比较进行裁决输出.多模表决器按照规则对n 个功能相同但相互独立的数据库的输出进行表决操作, 保证系统正确输出, 本文采用n 取k 表决模型, 当k 个数据库正常读取时, 便认为数据库正常运行, 当k 个及以上数据库返回的数据异常时, 才会输出错误非正常数据, 在异构冗余的拟计算机系统应用2019 年 第 28 卷 第 10 期态环境中, 不同的数据库运行环境不同, 攻击注入方式不同, 无论从时间和技术上, 对攻击者都是极大的消耗,由此数据库的安全性和可靠性得以提高.图9 拟态表决器模型3 实验与分析为了验证Mycat在拟态环境中能够高效保障数据的读取和安全性, 我们在开源的企业办公系统然之协同中, 使用三模异构冗余模型进行实验测试, 然之协同的优势如下:(1)功能齐全, 能满足日常的办公需求, 使用范围广, 人数无限制.(2)私有化部署, 安全性高.(3)开源产品, 能修改代码满足个性化需求.硬件配置如表2.表2类别描述操作系统Windows 7专业版64位SP1处理器英特尔Core i7-6700 @ 3.40 GHz四核内存32 GB(三星DDR4 2400 MHz)主硬盘希捷ST1000DM003-1SB102转速7200 转/分3.1 环境配置在拟态环境中, 3个异构执行体运行的系统分别为windows7(IP:192.168.126.133), Ubuntu (IP: 192.168. 126.134)和centos (IP: 192.168.126.135), Mycat安装在IP地址为192.168.126.141, 并建立“ranzhi”数据库.(1) Schema.xml配置Schema.xml作为Mycat最重要的配置文件之一,管理着逻辑库, 分片规则, 节点主机等信息, 关键代码如下:<table name="crash_trade" primaryKey="ID" type= "global" dataNode="dn1,dn2" /><dataNode name="dn1" dataHost="localhost1"database="db1" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType= "Mysql" dbDriver="native" switchType="1" slaveThreshold= "100"><writeHost host="hostM1" url="192.168.126.141: 3306" user="root"password="******"><readHost host="hostS2" url="192.168.126.141: 3306" user="root" password="*******" /><readHost host="hostS2" url="192.168.126.142: 3306" user="root" password="*******" /> </writeHost>(2) server.xml配置server.xml配置Mycat的系统服务信息,服务端口为8066. 关键代码如下:<user name="root"><property name="password">*****</property><property name="schemas">ranzhi</property>在各自的系统中, 安装然之协同, 其所连立的数据库设置为Mycat所在的物理地址和Mycat的端口, 如图10.图10 执行体Mycat连接3.2 实验结果分析(1) 指纹SQL识别通过Mycat, 指纹SQL能够在数据库中正常执行,如图11, 无指纹的SQL语言, 不能运行, 如图12.图11 指纹SQL执行结果2019 年 第 28 卷 第 10 期计算机系统应用图12 无指纹SQL 执行结果(2) 数据库注入测试在一般的数据库中, 进行数据库注入攻击测试, 数据库返回数据, 如图13, 图14所示.当使用本文中拟态环境中的数据库, 进行相同的数据库注入攻击, 未能返回数据, 攻击失败, 如图15所示.图13数据库注入过程图14 数据库注入结果图15 数据库注入失败数据库安全测试如表3所示.经上述实验, 在拟态环境中, 数据库成功防御数据库注入攻击, 保障了数据库安全.表3 数据库安全测试结果防御内容防御类别防御预期结果防御机理异构冗余动态清洗数据库安全测试指纹SQL 指令执行信息碎片随机化传输模块中在集群数据库中进行数据节点随机化传输读取√√√数据库高可用性随机化传输模块中数据库单一节点出现故障, 不影响节点正常进行存取,√√数据库分布式处理多个数据库能够保持数据同步√√√SQL 注入测试执行体间SQL 指纹不一致, 攻击无法在全部执行体中成功执行√√√√SQL 指令指纹破坏测试SQL 指令动态随机切换, 被破坏执行体被清洗还原√√√4 结论与展望通过在拟态环境中使用Mycat 作为数据库访问的中间件, 实现了数据库的集群管理, 高可用性, 以及对指纹SQL 语言的处理, 极大的提高拟态防御中对数据安全的保障和数据存储, 读取的高效性. 在未来的信息时代, 网络空间的数据存取和保护越来越得到重视, 随着社会科技的发展, 会有更多的数据库中间件出现, 其功能和架构模式也会不断的更新和成熟, 数据库中间件在拟态环境中会发挥更大的作用.参考文献邬江兴. 网络空间拟态防御导论-上册. 北京: 科学出版社,2017.1邬江兴. 网络空间拟态防御导论-下册. 北京: 科学出版社,2017.2莫建平, 应凌云, 苏璞睿, 等. 恶意代码动态分析中的反虚拟化问题研究. 计算机系统应用, 2018, 27(12): 1–8. [doi: 10.15888/ki.csa.006683]3蔡桂林, 王宝生, 王天佐, 等. 移动目标防御技术研究进展.计算机研究与发展, 2016, 53(5): 968–987. [doi: 10.7544/issn 1000-1239.2016.20150225]4Mycat 权威指南. /detail/ming_311/9067463, [2015-08-31].5邬江兴. 拟态计算与拟态安全防御的原意和愿景. 电信科学, 2014, 30(7): 2–7. [doi: 10.3969/j.issn.1000-0801.2014.07.001]6邬江兴. 网络空间拟态安全防御. 保密科学技术, 2014,(10): 4–9, 1.7仝青, 张铮, 邬江兴. 基于软硬件多样性的主动防御技术.信息安全学报, 2017, 2(1): 1–12.8Zhang YJ, Pang JM. A new compile-time obfuscation9计算机系统应用2019 年 第 28 卷 第 10 期scheme for software protection. Proceedings of 2016 International Conference on Cyber-Enabled Distributed Computing and Knowledge Discovery. Chengdu, China.2016. 1–5.张峰, 李亚伟. SFMEA安全性分析技术在软件安全性测试中的应用. 计算机系统应用, 2019, 28(2): 158–163. [doi: 10.15888/ki.csa.006779]10仝青, 张铮, 张为华, 等. 拟态防御Web服务器设计与实现.软件学报, 2017, 28(4): 883–897. [doi: 10.13328/ki.jos.005192]11张铮, 马博林, 邬江兴. Web服务器拟态防御原理验证系统测试与分析. 信息安全学报, 2017, 2(1): 13–28.12马海龙, 伊鹏, 江逸茗, 等. 基于动态异构冗余机制的路由13器拟态防御体系结构. 信息安全学报, 2017, 2(1): 29–42.马海龙, 江逸茗, 白冰, 等. 路由器拟态防御能力测试与分析. 信息安全学报, 2017, 2(1): 43–53.14王禛鹏, 扈红超, 程国振. 一种基于拟态安全防御的DNS框架设计. 电子学报, 2017, 45(11): 2705–2714. [doi:10.3969/j.issn.0372-2112.2017.11.018]15项凯. 面向海量高并发数据库中间件的研究与应用[硕士学位论文]. 上海: 上海交通大学, 2015.16赵艳, 李钧. 异构数据源分布式事务处理研究. 计算机工程, 2009, 35(4): 69–71. [doi: 10.3969/j.issn.1007-130X.2009.04.021]17安延文. 数据库审计系统中MySQL协议的研究与解析[硕士学位论文]. 北京: 华北电力大学(北京), 2016.182019 年 第 28 卷 第 10 期计算机系统应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于MyCat中间件的分布式数据库实现与应用摘要:MyCat中间件是当前主流的分布式代理中间件,能够降低分布式数据库使用的复杂性和代价。

本文结合某运营商IT系统的转型实例,对基于MyCat中间件的分布式数据库实现原理以及其应用进行了详细的介绍,为有关需要提供参考。

关键词:MyCat;分布式数据库;实现;应用引言随着信息时代的发展以及互联网技术的不断推广应用,数据日益累积,社会各个行业都普遍面临着海量数据带来的挑战。

而分布式关系数据库作为大数据存储和处理的主要解决方案之一,在企业生产中得到越来越广泛的应用。

在这背景下,研究基于MyCat中间件的分布式数据库实现与应用具有十分重要的意义。

1.Mycat分片规则随着互联网的快速发展,海量数据的存储问题越来越突出,数据的量级也是指数的增长。

分片,是指通过对某一个字段通过特定的算法进行计算、分片,将原本存放在一个数据库中的数据分散存放到多个数据库,以达到分散单节点数据的压力。

数据分片在维度上可以分为垂直分片和水平分片。

垂直分片:在传统系统设计中应用非常广泛,按照不同的业务进行数据库分库。

在运营商支撑系统就按照业务分为营业数据库、账务数据库、报表数据库等,如图1。

水平分片:将每个独立的表按照一定的计算规则,将每个表中的数据分散到多个数据库中。

每个库的数据表结构一样,但是存储的数据不一样,如图2。

图1系统数据垂直分片图2系统数据水平分片分片规则:Mycat是在数据库和业务应用之间增加的一个数据库中间层,可以对数据量小且不需要做数据切片的表归集到非分片表;对于数据量大,并且业务上有分片需求的表归集为分片表。

分片表按照分片规则分为以下四大类:ER关系分片:ER模型是实体关系模型,基本元素是实体、关系和属性,Mycat 针对ER关系表的切分规则中,使得有相互依赖的表能够按照某一个规则切分到相同的节点上,避免跨库 Join 关系查询。

比如订单表和订单明细表就存在依赖关系,可以抽象为父子关系。

子表的记录与所关联的父表存放在同一个数据分片上。

时间分片:将不同月甚至日的数据分散到不同的库中。

具体可以按照日期、单月小时、自然月以及日期范围hash算法。

固定值分片:按照所选分片字段通过特定的计算,按照计算得到的值进行分片。

具体如下:(1)取模分片;(2)枚举分片;(3)范围分片;(4)范围求模分片。

Hash算法分片:通过hash算法对分片字段进行计算,将计算后的值按照求模、范围等进行分片。

具体方法有:(1)固定分片hash算法;(2)字符串hash求模范围算法;(3)一致性hash算法。

通过以上的分片方法,可以将数据按照既定的规则落到对应的分片数据库中。

2.Mycat搭建读写分离读写分离,简单地说就是把对数据库的读和写分开,以应对不同的数据库服务器。

主数据库提供写操作,从数据库提供读操作,这样可以有效地减轻单台服务器的压力。

主服务器进行写操作后,数据及时同步到所读的数据库,尽可能保证读写数据库的数据一致。

正常情况下,一个写数据库的操作在几十毫秒内即可完成,而系统中大部分语查询语句需要几秒甚至几分钟才能得到结果,而这些查询语句需要消耗大量的计算能力,高峰期间甚至可以引起系统的崩溃。

所以从保护数据的角度来看,也需要进行有容灾处理机制,避免没有主从复制机制的单节点数据库。

MySQL的主流读写分离是Master-Slave和GaleraCluster两种模式。

Master-Slave是MySQL数据库的标准读写分离模式。

一般由Master节点负责写操作,在Master后配置多个Slave节点作为读的操作。

Slave节点的多少取决于系统的读操作的压力,可以进行水平扩展。

具体原理图如下:图3Master-Slave读写分离同步机制此方法同步机制:(1)主库在每次更新数据前,将更新的记录到二进制文件中。

(2)备库将主库的二进制日志复制到本地的中继日志中。

具体原理是备库启动一个工作线程,和主库建立连接,用来监控主库更新状态,将主库的二进制日志变化写入到本地中继日志中。

(3)备库启动一个SQL线程,将中继日志中的数据读取并在备库中执行,完成备库的数据更新。

GaleraCluster读写分离模式是一种多主同步复制模式。

该模式可以在任意节点进行读写及复制,各节点之间无延迟且节点宕机也不会导致数据丢失。

所有的节点保持相同的状态,节点间没有不同的数据。

无需手工备份当前数据库并复制到新节点;无需更改或者很小的改动可以实现任意节点上进行读写。

并且可以自动剔除故障节点,自动加入新节点;该模式通常采用至少3个MySQL节点作为一个Cluster。

理论上可以进行多写,但是在多个案例中,多写会引起较为严重的锁等待,所以使用Galera推荐使用一写多读。

图4GaleraCluster读写分离同步机制Mycat读写分离:Mysql的复制由Mysql自行控制,Mycat不负责数据的同步问题。

Mycat作为数据库中间件,在配置好数据库的从属关系后,只需要配置相关参数既可以实现读写分离,和前端应用无关,应用侧只需要侧重业务即可。

读写模式的变更,通过修改Mycat中配置文件属性balance来实现。

<dataHostname="192.168.0.3"maxCon="999"minCon="9"balance="1"writeType=" 0"dbType="mysql"dbDriver="native"><heartbeat>selectuser()</heartbeat><!--canhavemultiwritehosts--><writeHosthost="nodeMaster1"url="192.168.0.4:3306"user="root"password="roo t"><!--canhavemultireadhosts--><readHosthost="nodeSlave1"url="192.168.0.5:3306"user="root"password="root" weight="1"/></writeHost></dataHost>当balance=0时,不启用读写分离,所有客户端的读操作都将发送当当前的writeHost节点nodeMaster1实例。

当balance=1时,所有的读操作都发送当前的writeHost对应的writeHost和备用的writeHost。

此情形主库可以提供高效的写操作,其他机器提供读操作。

当balance=2时,所有的读操作点发送给所有的writeHost和readHost。

此情形适合主库压力不大,也可以分担读操作,更合理的运用资源。

3.Mycat故障切换Mycat主从切换:通过心跳监控各个MySQL节点的活动情况,当任何一定出现心跳检测异常,则进行故障切换。

图5Mycat主从切换原理图如图5所示,当Mysql配置为Master-Slave的复制方案,My⁃cat需要将Master节点和Slave节点都作为Mycat配置的data⁃Host元素;此时将Master节点设置为Mycat的dataHost的Write⁃Node,对应的从节点设置为readNode。

为了保证WriteNode和ReadNode可用,必须对其进行监控,因此我们对两类节点发起心跳检测。

而作为MySQL的复制方案,Master节点和Slave节点按照既定的复制策略保持数据同步。

在应用程序对数据库发起请求时,Mycat将所有的DMLSQL发送到WriteNode 节点,如果Mycat配置了读写分离,那么所有的查询按照策略就会发送到对应ReadHost(具体规则见上章节)。

切换机制,当一个dataHost里配置了多个WriteHost时,如果检测到第一个WriteHost宕机,Mycat通过心跳检测监控,如果发现3次检测失败(默认配置为3次),则Mycat自动切换到下一个可用的WriteHost接管服务。

并且在Mycat 配置文件中记录当前所用的WriteHost节点顺序(配置文件为conf/dnindex.properties)。

解决了MySQL的故障切换,那么如何保证Mycat的故障切换?由于Mycat自身属于无状态的中间件,故可以很容易地进行集群式部署,提供高可用方案。

此时可以借助HAproxy来进行负载可以解决,此处不展开说明。

4.分布式事务在分布式系统中,各个节点在物理上都是独立的,每个节点上的数据操作都可以满足ACID。

但是各独立节点之间无法知道其他节点事务的执行情况,无法保证多台机器中的数据保持一致,因此必须引入分布式事务,要么所有节点上的数据操作全部执行成功,要么全部不执行。

Mycat具体的分布式流程处理见图6:图6Mycat分布式事务流程图(1)在应用层设置事务不能自动提交;(2)在Mycat中开启XA事务管理器,对本次事务记录对应的XID,瓶装XAENDXID,XAPREPAREXID最后进行提交,如果在提交过程中任何一个节点如果异常,则直接回滚事务XID。

(3)在多个节点MySQL中全部进行XACOMMIT,提交成功后,事务结束;如果异常,则对事务进行重新提交或者回滚。

5.结语综上所述,在分布式数据库的实际应用中,分布式数据库常常采用中间件来降低数据库的传输代价,提高系统运行效率。

其中,MyCat是当前的一种主流中间件,本文通过实现与应用MyCat中间件的分布式数据库,实现了运营商支撑系统的转型,提高系统的运行效益。

参考文献:[1]符小周,胡洪云.分布式数据库的一致性与可用性分析[J].信息与电脑(理论版),2018(14):130-131.[2]张琴,黄凯,袁佩玲,杨青,郑世珏.楚国数字文物分布式数据库设计[J].电子技术与软件工程,2018(08):192-194.[3]姚丽丽,万玉建,朱峰.基于MyCat的建筑能耗监管系统数据库设计与实现[J].电脑编程技巧与维护,2015(24):5-7+14.。

相关文档
最新文档