本章节先了解下Mycat比较重要的部分,即配置文件,就是上一章节中说到的conf目录下的相关内容。
先看一下Mycat里几个重要的概念
- 用户
- 逻辑库(schema)
- 逻辑表(table)
- 分片节点(dataNode)
- 分片规则(rule)
- 全局序列号(sequence)
下面就逐个来讲讲,想一个场景,然后把配置都配好,最终要完整的运行起来。
用户
用户相关配置位于conf/server.xml中,server.xml包含了整个Mycat Server的配置情况,这里只截取针对性的内容来看下
上述配置定义了连接Mycat Server的用户名和密码,以及能够访问的schema(schema下面再讲解),如果是只读用户可以加上readOnly属性为true。下面就把原有的user标签修改为上述内容。
逻辑库(schema)
schema的概念和Mysql中的DataBase概念是一样的,这样就容易理解了。其相关配置位于conf/schema.xml中,user标签中的schemas属性指向的就是schema标签的name属性。下面看下schema标签的内容:
schema标签有四个属性
- name:schema的名称相当于数据库的名称
- dataNode:schema所在的分片(dataNode下面讲解),其实就是物理数据库。不过直接在schema上定义dataNode会略显粗糙,可能更多的还是由各个表自己定义分片规则来路由到相应的dataNode。
- checkSQLschema:当设置为true时,如果执行
select * from OrderDB.order
,Mycat会把语句修改为select * from order
,即把表示schema的字符删掉,比较好的做法是关掉这个验证,发送SQL时不要带schema。 - sqlMaxLimit:当设置为某个数值时,即使执行SQL没有加上limit,Mycat也会自动加上对应的值。当SQL语句中指定了limit时,不受该值约束。官方文档上还说如果运行的schema为非拆分库的话,该属性不会生效,所以写SQL时还是严谨点好,该查多少条自己控制。
逻辑表(table)
table就是对应Mysql中的表,table标签是schema的子标签,所以依然是修改conf/schema.xml。
table标签有九个属性
- name:对应Mysql中的表名
- dataNode:逻辑表所在的分片,该属性值需要和dataNode标签的name属性对应,dateNode标签下面会讲解
- rule:逻辑表使用的分片规则名称,规则在conf/rule.xml中配置,该属性值必须与tableRule标签中的name属性对应
- ruleRequired:是否绑定分片规则,如果为true的话,就一定要配置rule
- primaryKey:逻辑表对应真实表的主键
- type:逻辑表类型,分为全局表和普通表,后面写例子时再详细说明该属性
- autoIncrement:是否启用自增主键,对应Mysql自增主键,默认时禁用的
- subTable:分表,1.6以后开始支持
- needAddLimit:是否允许自动添加schema标签中设置的limit,默认为true
table标签下还有个childTable子标签,用于定义E-R分片的字表,所谓E-R分片就是把两个有关系的路由到同一个分片,方便join操作,具体配置后面写示例时再看。
分片节点(dataNode)
dataNode定义了Mycat中的数据节点,也就是通常说的数据分片,其实就是指向了具体的数据库地址和名称。
dataNode标签和schema同级,依然修改conf/schema.xml
dataNode标签有三个属性
- name:分片名称,全局唯一
- dataHost:数据库实例地址,对应dataHost标签的name属性(下面讲解)
- dataBase:对应数据库实例上的具体数据库,要预先建好
节点主机(dataHost)
dataHost标签定义了具体的数据库实例、读写分离配置和心跳语句。
dataHost标签和schema同级,依然修改conf/schema.xml。
dataHost标签有9个属性
- name:节点主机名称
- maxCon:指定每个读写实例连接池的最大连接
- minCon:指定每个读写实例连接池的最小连接,即初始化连接池的大小
- balance:读操作负载均衡类型,目前有三个可选值”0”、”1”、”2”、”3”。读写分离相关策略,后面再详细讲,例子中的”0”代表不开启读写分离,读操作都发到writeHost上
- writeType:写操作负载均衡类型,目前有三可选值”0”、”1”、”2”,具体后面再看,例子中的”0”表示所有写操作发送到第一个writeHost,第一个挂了切换到还生存的第二个writeHost。
- dbType:指定连接的数据库类型,目前支持二进制的Mysql协议,还有其他的JDBC连接的数据库。例如mongodb、oracle、spark等
- dbDriver:指定连接数据库的驱动,目前可选指为native和JDBC。native支持mysql和mariadb,其他数据库需要用JDBC驱动
- switchType:自动切换标识,”1”为默认值,表示不自动切换,其他可选指为”1”、”2”,暂不展开
- tempReadHostAvailable:writeHost失联后,其下面的readHost仍旧可用,默认0,可选值0、1
分片规则(rule)
分片规则位于conf/rule.xml中,其中定义了我们对表进行拆分所涉及到的规则定义,
tableRule标签
- name属性:指定rule全局唯一的名字
- columns标签:拆分的列的名字
- algorithm标签:指向function标签的name属性,表示具体的算法
function标签
- name属性:指定算法名称
- class属性:指定路由算法具体的类名
- property标签:定义了算法具体的规则,此算法的含义是根据id mod2将数据路由到两个分片上。Mycat定义了一些算法规则,后面再讲
全局序列号后面章节再讲
至此,了解了下Mycat基本的配置,下面尝试下基于这些配置,将Mycat启动,并且成功插入数据。