入门宣言:不怕从零开始,只怕从未开始。
1、Mycat简介(摘自Mycat权威指南 http://www.mycat.io )
2013 年阿里的 Cobar 在社区使用过程中发现存在一些比较严重的问题,及其使用限制,经过 Mycat 发
人第一次改良,第一代改良版——Mycat 诞生。 Mycat 开源以后,一些 Cobar 的用户参与了 Mycat 的
开发,最终 Mycat 发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。
2014 年 Mycat 首次在上海的《中华架构师》大会上对外宣讲,更多的人参与进来,随后越来越多的项目采用了
Mycat。
2015 年 5 月,由核心参与者们一起编写的第一本官方权威指南《Mycat 权威指南》电子版发布,累计超过 500
本,成为开源项目中的首创。
2015 年 10 月为止, Mycat 项目总共有 16 个 Committer。
截至 2015 年 11 月,超过 300 个项目采用 Mycat,涵盖银行、电信、电子商务、物流、移动应用、 O2O 的众多
领域和公司。
截至 2015 年 12 月,超过 4000 名用户加群或研究讨论或测试或使用 Mycat。
Mycat 是基于开源 cobar 演变而来,我们对 cobar 的代码进行了彻底的重构,使用 NIO 重构了网络模块,并且
优化了 Buffer 内核,增强了聚合, Join 等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。 1.4 版
13
本以后 完全的脱离基本 cobar 内核,结合 Mycat 集群管理、自动扩容、智能优化,成为高性能的中间件。我们
致力于开发高性能数据库中间而努力。永不收费,永不闭源,持续推动开源社区的发展。
Mycat 吸引和聚集了一大批业内大数据和云计算方面的资深工程师, Mycat 的发展壮大基于开源社区志愿者的持
续努力,感谢社区志愿者的努力让 Mycat 更加强大,同时我们也欢迎社区更多的志愿者,特别是公司能够参与进
来,参与 Mycat 的开发,一起推动社区的发展,为社区提供更好的开源中间件。
Mycat 还不够强大, Mycat 还有很多不足,欢迎社区志愿者的持续优化改进。
2、Mycat 原理
原理比较简单,代码实现比较复杂。Mycat的核心原理就是拆数据,将一个张表的数据通过某个字段进行水平拆分后存到多张表中,如图所示,通过路由字段去不同的数据库中查询数据,同时也存在一定缺陷,那就是查询语句中如果没有路由字段Mycat将不知道该数据在那个分片数据库上,会查询所有的分片,在返回结果给客户端。
3、Mycat 应用场景
Mycat 发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几个典型的
应用场景:
1. 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
2. 分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片
3. 多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化
4. 报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计
5. 替代 Hbase,分析大数据
6. 作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果,
除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选择。
4、安装Mycat
4.1 安装数据库和jdk1.7+
安装Mycat前需要先装一个数据库,我这里安装的mysql,mysql和jdk安装步骤就不说明了。
并创建两个数据库 db1、db2
创建表
CREATE TABLE `users` ( `id` bigint(20) NOT NULL COMMENT 'id', `zname` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
4.2 mycat官网下载Mycat http://dl.mycat.io/1.6.5/
版本说明:截止2018年1月31日 稳定版是1.6.5,下载自己适合使用系统使用的软件版本。
其中:Mycat-server-1.6.5-release-20180122220033-testtool.tar.gz 是压力测试相关代码,后面会介绍。Mycat-server-1.6.5-release-tests.jar 是压力测试源码。这里我用linux测试下载linux相关的软件包,解压到 /usr/local/mycat 目录下。
到这里Mycat就安装成功了
4.3 配置Mycat逻辑库
mycat配置文件都在 conf目录下,逻辑库配置文件名是 conf/schema.xml, 打开配置文件(我这里将有些内容删除了):
- dbtype:
指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、 oracle、 spark ,sqlserver 等 - dbDriver:
目前可选的值有 native 和 JDBC
从 1 .6 版本开始支持 postgresql 的 native 原始协议
如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到 MYCAT\lib 目录下,并检查驱动 JAR 包中。 - switchType:
-1 表示不自动切换
1 表示自动切换
2 表示MySQL 主从同步的状态决定是否切换
心跳语句需要为 show slave status
3 基于 MySQL galary cluster 的切换机制(适合集群)
4.4 基本配置完成后,启动测试下。
mycat 启动脚本在bin目录下。
# 后台启动
./mycat start
# 停止
./mycat stop
#控制台启动,可以观看Mycat启动日志
./mycat console
控制台启动看到下图说明mycat已经启动成功了
后台启动查看是否启动成功,看到下图说明启动成功了
ps aux | grep mycat