一.引言
Mycat作为现在最流行的分布式数据库中间件,已经在很多的生产项目中实施,随着时间的推移会有更多的生产项目中会用到Mycat。
本文主要是介绍MyCat主要配置文件。
二.MyCat关键配置说明
本文主要分析的有server.xml,schema.xml,rule.xml三个最常用的文件。
2.1 Server.xml
Server.xml保存了mycat需要的所有的系统配置信息,代码映射为SystemConfig类。
标签主要有四个:
System
User
Firewarll
cluster.
接下来对四个标签进行说明
2.1.1 user标签
内容:说明用户名是test。
子标签:property,privileges.
2.1.1.1 property标签2.1.1.2privileges标签
对用户的schema以及表进行精细化的DML权限控制。
check表示是否开启DML权限检查。默认是关闭。
server.dtd文件中说明可以有多个schema的配置。
dml顺序说明:
insert,update,select,delete
db1的权限是update,select。
tb01的权限是啥都不能干。
tb02的权限是insert,update,select,delete。
其他表默认是udpate,select。
2.1.2 system标签
这个标签内嵌套的所有property标签都与系统配置有关。
utf8字符集
1处理线程数量,默认是cpu数量。
4096每次读取留的数量,默认4096。
409600
创建共享buffer需要占用的总空间大小。processorBufferChunk*processors*100。
0
默认为。表示DirectByteBufferPool,1表示ByteBufferArena。
100
二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。
100
全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。
1
是否开启mysql压缩协议。1为开启,为关闭,默认关闭。
4
指定Mysql协议中的报文头长度。默认4。
16M
指定Mysql协议可以携带的数据最大长度。默认16M。
1800000
指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认30分钟,单位毫秒。
3
前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为REPEATED_READ,设置值为数字默认3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
300
SQL执行超时的时间,Mycat会检查连接上最后一次执行SQL的时间,若超过这个时间则会直接关闭这连接。默认时间为300秒,单位秒。
1000
清理NIOProcessor上前后端空闲、超时和关闭连接的间隔时间。默认是1秒,单
位毫秒。
300000
对后端连接进行空闲、超时检查的时间间隔,默认是300秒,单位毫秒。
10000
对后端所有读、写库发起心跳的间隔时间,默认是10秒,单位毫秒。
0.0.0.0
mycat服务监听的IP地址,默认值为0.0.0.0。
8066
定义mycat的使用端口,默认值为8066。
9066
定义mycat的管理端口,默认值为9066。
5.6
mycat模拟的mysql版本号,默认值为5.6版本,如非特需,不要修改这个值,目前支持设置5.5,5.6,5.7版本,其他版本可能会有问题。
0
是否开启实时统计。1为开启;为关闭。
0
是否开启全局表一致性检测。1为开启;为关闭。
0
分布式事务开关。为不过滤分布式事务;1为过滤分布式事务;2为不过滤分布式事务,但是记录分布式事务日志。
65535
默认是65535。64K用于sql解析时最大文本长度
以上举例的属性仅仅是一部分,可以配置的变量很多,具体可以查看SystemConfig这个类的属性内容。
System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。
2.1.3 Firewall标签
顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问
设置很简单,很容易理解,只要设置了白名单,表示开启了防火墙,只有白名单的连接才可以进行连接。
2.1.4 Cluster标签
待完善。
2.2 Schema.xml
这个文件是MyCat最重要的配置文件,负责管理库,表,分片规则,DataNode,DataSource。因此这个配置是需要很清楚各部分的含义的。
schema.dtd
可以看到包含的标签有:
schema、dataNode、dataHost。
接下来将对每个标签逐一的进行详解。
2.2.1 schema标签
schema标签用于定义MyCat实例中的逻辑库,MyCat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库。
如上所示的配置就配置了两个不同的逻辑库,逻辑库的概念和MYSQL数据库中Database的概念相同,我们在查询这两个不同的逻辑库中表的时候需要切换到该逻辑库下才可以查询到所需要的表。
checkSQLschema这个属性默认就是false,官方文档的意思就是是否去掉表前面的数据库的名称,”select * from db1.testtable”,设置为true就会去掉db1。但是如果db1的名称不是schema的名称,那么也不会被去掉,因此官方建议不要使用这种语法。同时默认设置为false。
sqlMaxLimit当该值设置为某个数值时。每条执行的SQL语句,如果没有加上limit语句,MyCat也会自动的加上所对应的值。例如设置值为100,执行”select * from test_table”,则效果为“selelct * fromtest_table limit 100”.
注意:如果运行的schema为非拆分库的,那么该属性不会生效。
2.2.2.1Table标签
2.2.2.2childTable标签
2.2.2 dataNode标签
dataNode标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。一个dataNode标签就是一个独立的数据分片。
例子中所表述的意思为:使用名字为dHost128数据库实例上的db1物理数据库,这就组成一个数据分片,最后,我们使用名字dNode1标识这个分片。
dataNode标签的相关属性:
2.2.3 dataHost标签
该标签定义了具体的数据库实例、读写分离配置和心跳语句。
select user()
dataHost标签的相关属性:
2.2.3.1 heartbeat标签
这个标签内指明用于和后端数据库进行心跳检查的语句。
例如:MYSQL可以使用select user(),Oracle可以使用select 1 from dual等。
2.2.3.2 writeHost /readHost标签
这两个标签都指定后端数据库的相关配置,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例。
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机,系统会自动的检测到,并切换到备用的writeHost上去。这两个标签的属性相同,这里就一起介绍。
2.3 Rule.xml
rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。
包含的标签tableRule和function。
2.3.1 tableRule标签
这个标签定义表规则。
定义的表规则,在schema.xml:
id
func1
name属性指定唯一的名字,用于标识不同的表规则。
内嵌的rule标签则指定对物理表中的哪一列进行拆分和使用什么路由算法。
columns内指定要拆分的列名字。
algorithm使用function标签中的name属性。连接表规则和具体路由算法。当然,多个表规则可以连接到
同一个路由算法上。table标签内使用。让逻辑表使用这个规则进行分片。
2.3.2 function标签
partition-hash-int.txt
name指定算法的名字。
class制定路由算法具体的类名字。
property为具体算法需要用到的一些属性。
三.后记
至此,MyCat三个主要的配置文件的说明已经完成,过程中参考了一些文章,在此不进行一一列举,同时参考了MyCat的源代码,以及官方文档。
领取专属 10元无门槛券
私享最新 技术干货