Mycat简介
Mycat是一个优秀的数据库中间件,它可以实现mysql数据库的读写分离和高可用,能够支持数亿大表的分布式数据库系统,我们也可以把它当做一种数据库领域的“路由器”,之前对数据库中间件没有什么概念,这里普及一下,Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库,对于使用者来说,访问的都是Mycat,不会接触到后端的数据库,下图是一个MyCat在实际应用中的结构图:
使用Mycat连接数据库的默认端口是8066,连接方式和普通数据库一样。
02
MyCat的下载和安装
MyCat的下载地址是:
https://github.com/MyCATApache/Mycat-download
我们可以在github上下载1.6-release的unix二进制安装包,也就是tar.gz后缀的包,然后直接解压即可,解压之后,可以看到mycat的目录结构如下:
下面分别是bin文件夹的目录和conf文件的目录:
[root@work_NAT_1 mycat]# ll
total 24
drwxr-xr-x. 2 root root 4096 Mar 13 22:31 bin
drwxrwxrwx. 2 root root 4096 Mar 1 2016 catlet
drwxrwxrwx. 4 root root 4096 Mar 14 01:22 conf
drwxr-xr-x. 2 root root 4096 Mar 13 22:31 lib
drwxrwxrwx. 2 root root 4096 Oct 28 2016 logs
-rwxrwxrwx. 1 root root 217 Oct 28 2016 version.txt
[root@work_NAT_1 mycat]# cd conf
[root@work_NAT_1 conf]# ll
total 100
-rwxrwxrwx. 1 root root 88 Oct 28 2016 autopartition-long.txt
-rwxrwxrwx. 1 root root 48 Oct 28 2016 auto-sharding-long.txt
-rwxrwxrwx. 1 root root 62 Oct 28 2016 auto-sharding-rang-mod.txt
-rwxrwxrwx. 1 root root 334 Oct 28 2016 cacheservice.properties
-rwxrwxrwx. 1 root root 439 Oct 28 2016 ehcache.xml
-rwxrwxrwx. 1 root root 2132 Oct 28 2016 index_to_charset.properties
-rwxrwxrwx. 1 root root 1246 Oct 10 2016 log4j2.xml
-rwxrwxrwx. 1 root root 178 Oct 28 2016 migrateTables.properties
-rwxrwxrwx. 1 root root 246 Oct 28 2016 myid.properties
-rwxrwxrwx. 1 root root 15 Oct 28 2016 partition-hash-int.txt
-rwxrwxrwx. 1 root root 102 Oct 28 2016 partition-range-mod.txt
-rwxrwxrwx. 1 root root 4794 Oct 28 2016 rule.xml
-rwxrwxrwx. 1 root root 4219 Oct 28 2016 schema.xml
-rwxrwxrwx. 1 root root 413 Oct 28 2016 sequence_conf.properties
-rwxrwxrwx. 1 root root 75 Oct 28 2016 sequence_db_conf.properties
-rwxrwxrwx. 1 root root 27 Oct 28 2016 sequence_distributed_conf.properties
-rwxrwxrwx. 1 root root 51 Oct 28 2016 sequence_time_conf.properties
-rwxrwxrwx. 1 root root 3717 Oct 28 2016 server.xml
-rwxrwxrwx. 1 root root 16 Oct 28 2016 sharding-by-enum.txt
-rwxrwxrwx. 1 root root 4182 Oct 28 2016 wrapper.conf
drwxrwxrwx. 2 root root 4096 Mar 13 22:31 zkconf
drwxrwxrwx. 2 root root 4096 Mar 13 22:31 zkdownload
conf文件夹中比较重要的文件有三个,分别是server.xml,schema.xml以及rule.xml
bin目录下面的文件有:
[root@work_NAT_1 bin]# ll
total 868
-rwxr-xr-x. 1 root root 3567 May 16 2016 dataMigrate.sh
-rwxr-xr-x. 1 root root 624 Sep 29 2016 init_zk_data.sh
-rwxr-xr-x. 1 root root 15714 Oct 28 2016 mycat
-rwxr-xr-x. 1 root root 2941 Mar 2 2016 rehash.sh
-rwxr-xr-x. 1 root root 2496 Mar 2 2016 startup_nowrap.sh
-rwxr-xr-x. 1 root root 281540 Oct 28 2016 wrapper-aix-ppc-32
-rwxr-xr-x. 1 root root 319397 Oct 28 2016 wrapper-aix-ppc-64
-rwxr-xr-x. 1 root root 253808 Oct 28 2016 wrapper-hpux-parisc-64
比较重要的是mycat这个应用文件。
03
MyCat的配置文件解析
1
schema.xml 解析
schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、逻辑表以及对应的分片规则、DataNode以及DataHost。弄懂这些配置,是正确使用MyCat的前提。这里就一层层对该文件进行解析。 schema 标签用于定义MyCat实例中的逻辑库
Table 标签定义了MyCat中的逻辑表 rule用于指定分片规则,auto-sharding-long的分片规则是按ID值的范围进行分片 1-5000000 为第1片 5000001-10000000 为第2片.... 具体设置我们会在第5小节中讲解。 dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。 dataHost 标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。
光介绍概念有点枯燥,看看例子吧:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="yeyz" checkSQLschema="false" sqlMaxLimit="100">
<table name="tb_test0" dataNode="dn1,dn2" rule="auto-sharding-long" />
<table name="tb_test1" dataNode="dn1,dn3" rule="auto-sharding-long" />
<table name="tb_test2" dataNode="dn2,dn3" rule="auto-sharding-long" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.25.142:3306" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
如上面的一个配置文件:
先看schema标签,schema标签说明数据库名称为yeyz,数据库中包含的表为tb_test0,tb_test1,tb_test2。
再看table标签:
tb_test0表以规则auto-sharding-long映射在分片dn1,dn2。即实际存储位置。
tb_test1表以规则auto-sharding-long映射在分片dn1,dn3。即实际存储位置。
tb_test2表以规则auto-sharding-long映射在分片dn2,dn3.。即实际存储位置。
dataNode标签:
dn1分片在dataHost为localhost1的机器上,上面的数据库是db1;
dn2分片在dataHost为localhost2的机器上,上面的数据库是db2;
dn3分片在dataHost为localhost3的机器上,上面的数据库是db3;
主机名为localhost1的可以写入的数据库的IP地址和端口号为:192.168.25.142:3306,用户是root,密码是12346,心跳检测语句是select user()
2
server.xml解析
server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。在system中添加UTF-8字符集设置,否则存储中文会出现问号.
如下面的配置,是对yeyz数据库设置了两个用户,一个是user,另一个是root:
<user name="test">
<property name="password">test</property>
<property name="schemas">yeyz</property>
</user>
<user name="root">
<property name="password">123456</property>
<property name="schemas">yeyz</property>
</user>
3
rule.xml解析
rule.xml的配置用于数据分片规则定义。Schema.xml中表格配置的rule都是在rule.xml中定义的。
04
关于实验
要想详细了解mycat,还需要做很多实验。关于mycat的实验分为很多类型,读写分离,高可用等等,后续将会多用几篇文章来阐述,今天先这么多吧。