开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(一):MyCat-入门-分片测试-分片配置测试】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/755/detail/13249
MyCat-入门-分片测试-分片配置测试
连接 mycat
通过另外一种方式来连接 mycat,上一节讲解的是通过命令行的方式来连接。之前在去操作 mysql 的时候,也接触过很多的工具,也能用来连接 mycat。
新如上图所示操作。建一个连接 157,它依然是 mycat。主机地址 192.168.192.157,用户名 root,密码 123456, 注意端口号不再是 3306,如果端口号是 3306,那么连接的是 mysql。
在这端口号是 8060,点击测试连接。逻辑库 ITCAST 就已经有了,逻辑表也展示出来了。
下面进行分片测试。虽然刚才已经配置了逻辑库,已经配置了逻辑表,但是这个表没有定义结构,接下来就要来定义这个表结构,在定义这个表结构之前,现在这个客户端一定要认清楚,窗口 157(1)实际上是 mycat, 那么其他三个访问的都是mysql。
切换到 db1 这个数据库下,show tables, db1 当中没有表,这三个 mysql 数据库当中,db1 当中并没有表结构的。接下来需要在 mycat 当中来创建一张表,就tb test 这张表,注意是在 mycat 当中来创建,那么就需要拷贝一下建表语句,那么建表语句创建了 tb test 这张表,一个组件是 ID,然后还有一个是 title,组件就是ID。默认的存储引擎 innodb 字符集 utf8,然后执行。
表结构已经创建好了,是在 mycat 当中创建的表,接下来去看 mysql,三台 mysql实例当中,表已经有了,接下来在另外两个实例当中,表也有了。
那么来执行 select*from tb-test,表当中是空的,并没有任何的数据。执行之后,下面的三排 mysql 库当中也是空的。接下来再做一个测试,在 mycat 当中要去插入表结构当中数据,注意后面所有的操作都是针对 mycat 来操作的,不要直接操作 mysql,查看 mysql 主要是进行验证。
插入如上图 123 三条数据执行,title 分别是 good1、good2,good3。数据已经插入进来,接下来再来执行这个查询。
针对上图逻辑表来插入的三条数据。说明逻辑表只是一个逻辑上的结构,最终的数据存储是要在具体的 mysql 数据库当中进行存储。
验证一下底层的这三台 mysql 当中的数据,这三条数据在 157 上全部都有,在158,159 上都没有。
再来插入一条数据,插入 ID 为 4,goods4,数据插入成功接下来再来执行操作。mycat 当中 4 条数据已经插入进来了,那么刚刚插入的第四条数据在 157, 158,159 没有存储数据。如果 158 和 159 永远不存储数据,那么这个分片就是失败的,因为它没有起到扩容的作用。
做一个测试,插入一条数据,那么这一次插入的数据 ID,插入的是比较大的一个值,5,000,001。
接下来查询一次 5,000,001,接下来看 157 的值如上图,要记数据库当中的数据,没有 5,000,001;再来看 158 有 5,000,001;159 没有数据。
再插入一个 5,000,002,那么插入 5,000,002, 按照分片规则,实际上它记录的依然是第二个节点也就是 158,159 是不会有的。当 ID 值变为 10,000,001 的时候,它就进入 159 了。
这是由于分片规则来决定的,配置了一个分片规则,叫做 rule,rule 是分片规则,叫做 auto-sharding-long。这个分片规则它是这样的,0 到 500 万它存储在第一个节点,500 万到 1,000 万是存储在第二个节点,1,000 万到 1,500 万是存储在第三个节点。
我们来测试一下超过 1,500 万怎么办,插入 1500 万,执行会发现告诉我们,不能找到一个有效的数据节点,因为 ID 已经大于了 15,000,000, 也就是说超过 1,500 万就会报错。这些信息到底是在哪配置的,分片规则是什么样的,都是跟 rule 是相关系的。
rule 它是一个分片规则,分片规则关联的实际上是有一个配置文件叫做 rule.xml,注意这叫 auto-sharding-long。
rule.xml,点击进来找一个叫 tablerule,就是表的关键规则叫做 auto-sharding-long,它会根据 AD 字段进行分线,分线算法是 rang-long。
rang-long 引用的就是分片函数,那么方向函数当中定义的有一个映射文件,叫做欧洲 autopartiton-long.txt。关联的是 txt 文件,打开文件,K 代表的是 1000,0 到 500 万是属于第一个节点,data node index, 数据节点的索引,0 到 500 万属于第一个节点,500 万到 1,000 万属于第二个节点,1,000 万到 1,500 万属于第三个节点,刚才也测试了超过 1,500 万报错。假如 TB-TEST 这张表,随着系统的运行,这张表的数据超过 1, 500 万增加节点,增加节点然后去修改我们的分片规则就可以了。
在这主要去做一下关于 mycat 的分片的测试。那么通过这个测试,主要是对于 mycat 来实现数据库的分片有一个印象。
最后来再看上面那幅图,应用程序再进行操作的时候,只需要去操作逻辑库就行了,操作逻辑库当中的逻辑表。具体的数据到底要往哪儿去存储,往哪个节点上去存储,是由我们在配置文件当中配置的分片规则来决定的,它会自动进行存储。
而且在查询的时候,只需要指定 select*from TB TEST,要查询全部的数据,只需要从 mycat 当中去查就行了,只需要去从 mycat 的逻辑表当中来查,不需要关心哪个数据存放在哪个节点上,这一步 mycat 会帮我们完成查询及数据的汇总操作。
使用 mycat 和使用 mysql 是一模一样的。所以有了 mycat 之后,后面如果要用mycat, 应用程序再进行操作的时候,直接操作 mycat,不直接操作 mysql。