MyCat数据库集群

为什么要用MyCat?

  1. 在项目开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,对数据库的自身进行优化也是非常重要的。
  2. 主从、分表分库等都是系统发展遇到的问题。而Mycat是一个广受好评的数据库中间件。

什么是MyCat:

  1. 一、MyCat简单介绍
  2. MyCat是一个开源的分布式数据库系统,前端用户可以把它看作是一个数据库代理(类似于Mysql Proxy),
  3. 其核心功能是分表分库,即将一个大表分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
  4. MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端还可以支持MySQLSQL ServerOracleDB2PostgreSQLMongoDB等数据库。
  5. Mycat的主要作用为:能满足数据库数据的大量存储,大大提高了数据库查询性能;

MyCat的核心技术:(分库分表)

  1. 分库分表解释一下:
  2. 数据库分片是指:通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台mysql服务器的负载。
  3. 根据切片规则,可分为两种切片模式:垂直切分和水平切分。
  4. 垂直拆分:是将单表,或者是有关联的表放在一个数据库,把原有的一个数据库拆分成若干个数据库。
  5. 水平拆分:是将一个很大的表,通过取模,按照日期范围等等拆分成若干个小表
  6. -----------------------------------------------------
  7. 分库分表中的垂直分库方案会带来哪些问题?
  8. 答:单表的数据量还是会很大。
  9. -----------------------------------------------------

Mycat工作原理

  1. Mycat的原理并不复杂。
  2. Mycat的原理中最重要的一个动词是“拦截”,它首先拦截了用户发送过来的SQL语句,然后对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实mysql数据库,并将真实的mysql数据库返回的结果做适当的处理,最终再返回给用户。
  3. 即,相当于是一个mysql代理;

MyCat数据库集群 - 图1

  1. Mycat的架构其实很好理解,Mycat是数据库代理中间件,Mycat后面就是物理数据库。
  2. Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。
  3. 如下案例是做一个主从、读写分离,简单分库分表的示例。结构如下图:

MyCat数据库集群 - 图2

四、Mycat应用场景

Mycat发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几个典型的应用场景:

  1. - 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;
  2. - 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片;

利用MyCAT实现MySQL的读写分离

  1. Mycat实现Mysql主从复制,其中写操作在master主节点上执行,包括insertdeleteupdate 语句操作;
  2. 读操作在slave节点上执行,即只有select语句操作,
  3. 其他操作均由主master的二进制文件决定;
  4. MyCat支持多主多从。