mycat简单介绍以及安装和配置说明(mysql集群为例)

来源:互联网 发布:js调用手机摄像头 编辑:程序博客网 时间:2024/05/19 12:26

mycat是什么

一个彻底开源的,面向企业应用开发的“大数据库集群”
Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。
一个可以视为“Mysql”集群的企业级数据库。
一个开源的分布式数据库系统,是一个实现了 MySQL 协议的Server

Mycat 发展到目前的版本,它的后端可以支持 MySQL、SQLServer、Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型 NoSQL 方式的存储。

如何理解mycat(来自mycat官方文档说明)

对于 DBA 来说,可以这么理解 Mycat:
Mycat 就是 MySQL Server,而 Mycat 后面连接的 MySQL Server,就好象是 MySQL 的存储引擎,如InnoDB,MyISAM 等,因此,Mycat 本身并不存储数据,数据是在后端的 MySQL 上存储的,因此数据可靠性以及事务等都是 MySQL 保证的,简单的说,Mycat 就是 MySQL 最佳伴侣,它在一定程度上让 MySQL 拥有了能跟 Oracle PK 的能力。
对于软件工程师来说,可以这么理解 Mycat:
Mycat 就是一个近似等于 MySQL 的数据库服务器,你可以用连接 MySQL 的方式去连接 Mycat(除了端口不同,默认的 Mycat 端口是 8066 而非 MySQL 的 3306,因此需要在连接字符串上增加端口信息),大多数情况下,可以用你熟悉的对象映射框架使用 Mycat,但建议对于分片表,尽量使用基础的 SQL 语句,因为这样能达到最佳性能,特别是几千万甚至几百亿条记录的情况下。
对于架构师来说,可以这么理解 Mycat:
Mycat 是一个强大的数据库中间件,不仅仅可以用作读写分离、以及分表分库、容灾备份,而且可以用于多租户应用开发、云平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的 Mycat 智能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。

这里写图片描述
如上图所表示,数据被分到多个分片数据库后,应用如果需要读取数据,就要需要处理多个数据源的数据。如果没有数据库中间件,那么应用将直接面对分片集群,数据源切换、事务处理、数据聚合都需要应用直接处理,原本该是专注于业务的应用,将会花大量的工作来处理分片后的问题,最重要的是每个应用处理将是完全的重复造轮子。所以有了数据库中间件,应用只需要集中与业务处理,大量的通用的数据聚合,事务,数据源切换都由中间件来处理,中间件的性能与处理能力将直接决定应用的读写性能,所以一款好的数据库中间件至关重要。

mycat下载

Mycat 官方网站:http://www.mycat.io/
Mycat 下载地址:https://github.com/MyCATApache/Mycat-download

mycat安装以及配置文件说明

一:把下载好的包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到linux服务器
二:使用命令:tar -zxvf 解压缩mycat包,得到mycat目录
三:进入mycat/conf/ 目录下,文件如下
这里写图片描述
schema.xml 中定义逻辑库,表、分片节点等内容。
rule.xml 中定义分片规则。
server.xml 中定义用户以及系统相关变量,如端口等。
schema.xml 中标签说明:
这里写图片描述

  1. schema 标签用于定义 MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用 schema 标签来划分这些不同的逻辑库。上图中为配置了名为TESTDB的逻辑库。
  2. .Table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。name 属性定义逻辑表的表名,这个名字就如同我在数据库中执行 create table 命令指定的名字一样,同个 schema 标签中定义的名字必须唯一。dataNode 属性定义这个逻辑表所属的 dataNode, 该属性的值需要和 dataNode 标签中 name 属性的值相互对应。rule 属性用于指定逻辑表要使用的规则名字,规则名字在 rule.xml 中定义。primaryKey 属性该逻辑表对应真实表的主键,例如:分片的规则是使用非主键进行分片的,那么在使用主键查询的时候,就会发送查询语句到所有配置的 DN 上,如果使用该属性配置真实表的主键。难么 MyCat 会缓存主键与具体 DN 的信息,那么再次使用非主键进行查询的时候就不会进行广播式的查询,就会直接发送语句给具体的DN,但是尽管配置该属性,如果缓存并没有命中的话,还是会发送语句给具体的 DN,来获得数据。type 属性该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和”普通表”两种类型,全局表即所有分库都有该表,可避免跨库查询。
  3. childTable 标签用于定义 E-R 分片的子表。通过标签上的属性与父表进行关联。name 属性定义字表的表名。joinKey 属性插入子表的时候会使用这个列的值查找父表存储的数据节。parentKey 属性指定的值一般为与父表建立关联关系的列名。程序首先获取 joinkey 的值,再通过 parentKey 属性指定的列名产生查询语句,通过执行该语句得到父表存储在哪个分片上。从而确定子表存储的位置。通过这两个属性可以避免关联表的跨库查询。
  4. 这里写图片描述 dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。如上图就是定义了三个数据分片,分别使用名字localhost1、localhost2、localhost3数据库实例上的sportnet物理数据库,分别用dn1、dn2、dn3来标示分片。
  5. dataHost 标签
    这里写图片描述
    定义了具体的数据库实例、读写分离配置和心跳语句。name 属性唯一标识 dataHost 标签,供上层的标签使用。maxCon 属性指定每个读写实例连接池的最大连接。minCon 属性指定每个读写实例连接池的最小连接,初始化连接池的大小。balance 属性负载均衡类型,
    balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
    balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
    balance=”2”,所有读操作都随机的在 writeHost、readhost 上分发。
    balance=”3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
    writeType 属性负载均衡类型
    writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
    writeType=”1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
    dbDriver 属性指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。switchType 属性
    -1 表示不自动切换
    1 默认值,自动切换
    2 基于 MySQL 主从同步的状态决定是否切换,心跳语句为 show slave status
    3 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)心跳语句为 show status like ‘wsrep%’.
  6. heartbeat 标签这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
  7. writeHost 标签、readHost 标签这两个标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例,组着这些读写实例来满足系统的要求。
    server.xml文件
    server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。
    这里写图片描述
    rule.xml文件
    rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有tableRule和function这两个标签。在具体使用过程中可以按照需求添加tableRule和function。
    四:如何启动mycat:
    进入mycat/bin,启动MyCat
    启动命令:./mycat start
    停止命令:./mycat stop
    重启命令:./mycat restart
    五:连接mycat:
mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB