前期回顾

前面我们介绍了MySQL Galera的相关内容

这期开始讲一个数据库分库分表中间件Mycat

该专题的理论内容我会参考官方的文档,最后实践部分会根据自己的环境

这节说一些Mycat的一些概念,方便后续的内容

1. 数据库中间件

前面讲了 Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并不是完全意义的分布式数据库系统。

那么 Mycat 是什么?Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。 由于前面讲的对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构 成了整个完整的数据库存储。

1.png

如上图所表示,数据被分到多个分片数据库后,应用如果需要读取数据,就要需要处理多个数据源的数据。 如果没有数据库中间件,那么应用将直接面对分片集群,数据源切换、事务处理、数据聚合都需要应用直接处理, 原本该是专注于业务的应用,将会花大量的工作来处理分片后的问题,最重要的是每个应用处理将是完全的重复 造轮子.

所以有了数据库中间件,应用只需要集中与业务处理,大量的通用的数据聚合,事务,数据源切换都由中间 件来处理,中间件的性能与处理能力将直接决定应用的读写性能,所以一款好的数据库中间件至关重要。

2. Mycat逻辑概念

现在来说下Mycat下的一些概念,首先我们看下图,包含了各种概念的关系图

2.png

下面只涉及一些概念介绍,详细配置后续更新

为方便理解我们按照如下的顺序讲解,实际配置是从最后的概念进行配置的

2.1 用户

Mycat中的用户是一个逻辑上的用户,他定义了可以用来连接Mycat中间件的用户密码等信息

具体如下:

  • 用户名
  • 密码
  • 用户可访问的逻辑库
  • 逻辑库是否只读
  • 逻辑库连接服务降级处理
  • 加密
  • 逻辑库表的权限设置

其在server.xml 配置文件中配置中的user标签进行配置

一个用户可配置连接多个逻辑库

3.png

2.2 逻辑库(schema)

前面说了通过逻辑的用户可以连接到指定的逻辑库,那么我们事先需要配置逻辑库

我们在schema.xml配置文件的schema标签中进行配置

逻辑库实际上就是用户通过Mycat连接的数据库

4.png

逻辑库配置有如下属性

  • 是否检查SQL schema
  • SQL返回最大长度

2.3 逻辑表

我们通过Mycat连接到数据库后访问的表为逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成

逻辑表包含在逻辑库中,所以我们在schema.xml配置文件的schema标签下的table子标签进行配置

对于未配置为逻辑表的表Mycat是无法访问的

5.png

逻辑表配置有如下属性

  • 表名称
  • dataNode名称
  • 分片规则
  • 等等

逻辑表有如下种类

  • 分片表,它被分到多个dataNode当中,如上图的2个逻辑表
  • 非分片表,他只被分配到一个dataNode中,即dataNode属性只有一个
  • 全局表,为减少跨库连接带来的性能影响,对不经常变更并且经常访问的表,所有的分片都拥有相同的内容
  • ER表,根据业务进行表分组(Table Group),是解决跨分片数据JOIN的一个思路,后续介绍

2.4 分片节点(dataNode)

上面逻辑表配置中的dataNode即为分片节点的名称,所以我们事先需要配置dataNode

数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)。

他在schema.xml配置文件的dataNode标签下配置

6.png

他由dataHost和database唯一指定

dataHost即物理上的数据库实例的地址,可以是IP地址也可以是主机名 database即dataHost上的数据库

2.5 dataHost

该标签在 mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句

该标签可以包含一个或多个数据库地址

他在schema.xml中的dataHost标签中配置

7.png

2.6 分片规则

既然是分库分表的中间件,所以就会有数据切分的规则

在rule.xml文件中配置,和逻辑表配置中的rule对应

2.7 全局序列号(sequence)

数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据 唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence)。

2.8 多租户

多租户技术或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的 系统或程序组件,并且仍可确保各用户间数据的隔离性。

在云计算时代,多租户技术在共用的数据中心以单一系 统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。

目前各种各样的云 计算服务就是这类技术范畴,例如阿里云数据库服务(RDS)、阿里云服务器等等。

3. 参考资料

http://www.mycat.io/document/mycat-definitive-guide.pdf