前文回顾:
《Mycat分布式数据库架构》之原理及架构
《Mycat分布式数据库架构》之搭建详解
本文大佬超主要讲解Mycat的3个配置文件,也就是server.xml、schema.xml和rule.xml。
1、server.xml配置文件
server.xml 配置文件包含了Mycat的系统配置信息,对应的源码是SystemConfig.java。它有两个重要的标签,分别是user、system。
1.1 user标签
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
<property name="read0nly">true</property>
<property name= "benchmark">11111</property>
<property name= "usingDecrypt">1</property>
</user>
server.xml中的标签并不多,user 标签主要用于定义登录Mycat的用户和权限。在如上配置中定义了用户名和密码都为test的用户,该用户可以访问的schema只有TESTDB。
我们可以修改user标签的name属性来指定用户名,修改password的值来修改密码,修改readOnly的值为true 或false来限制用户的读写权限。如果需要同时访问多个schema,则多个schema之间使用英文逗号隔开,例如:
<property name="schemas">TESTDB, db1, db2</property>
- benchmark属性
通过设置benchmak属性的值来限制前端的整体连接数量,如果其值为0或不对其进行设置,则表示不限制连接数量。例如:
<property name="benchmark">1000</property>
- usingDecrypt 属性
通过设置usingDecrypt 属性的值来开启密码加密功能。默认值为0,表示不开启加密,值为1表示开启加密。
1.2 system标签
system标签与系统属性有关,部分属性介绍如下:
-
charset 属性
字符集设置。 -
defaultSqlParser 属性
由于 mycat 最初是时候 Foundation DB 的 sql 解析器,而后才添加的 Druid 的解析器。所以这个属性用来指定默认的解析器。 -
processors 属性
这个属性主要用于指定系统可用的线程数,默认值为机器 CPU 核心线程数。 -
processorBufferChunk 属性
这个属性指定每次分配 Socket Direct Buffer 的大小,默认是 4096 个字节。这个属性也影响 buffer pool 的长度。如果一次性获取的数过大 buffer 不够用 经常出现警告,则可以适当调大。 -
processorBufferPool 属性
这个属性指定 bufferPool 计算比例值。由于每次执行 NIO 读、写操作都需要使用到 buffer,系统初始化的时候会建立一定长度的 buffer 池来加快读、写的效率,减少建立 buffer 的时间。 -
processorBufferLocalPercent 属性
前面提到了 ThreadLocalPool。这个属性就是用来控制分配这个 pool 的大小用的,但其也并不是一个准确的值,也是一个比例值,默认值100。 -
processorExecutor 属性
这个属性主要用于指定 NIOProcessor 上共享的 businessExecutor 固定线程池大小。mycat 在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。 -
sequnceHandlerType 属性
指定使用 Mycat 全局序列的类型。0 为本地文件方式,1 为数据库方式,2 为时间戳序列方式,3 为分布式ZK ID 生成器,4 为 zk 递增 id 生成。
2、schema.xml配置文件
schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、DataNode 以及 DataSource。
schema 标签用于定义 MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用 schema 标签来划分这些不同的逻辑库。如果不配置 schema 标签,所有的表配置,会属于同一个默认的逻辑库。
-
dataNode
该属性用于绑定逻辑库到某个具体的 database 上,1.3 版本如果配置了dataNode,则不可以配置分片表,1.4 可以配置默认分片,只需要配置需要分片的表即可。 -
checkSQLschema
当该值设置为true时,如果执行语句select * from TESTDB.users;
则MyCat会把语句修改为select * from users;
。即把表示 schema 的字符去掉,避免发送到后端数据库执行时报错(ERROR1146 (42S02): Table ‘testdb.users’ doesn’t exist
)。
不过,即使设置该值为 true ,如果语句所带的是并非是 schema 指定的名字,例如:select * from db1.users;
那么 MyCat 并不会删除 db1 这个字段,如果没有定义该库的话则会报错,所以在提供 SQL语句的最好是不带这个字段。 -
sqlMaxLimit
当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行select * from TESTDB.users;
的效果为和执行select * from TESTDB.users limit 100;
相同。 -
table 标签
table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。
3、rule.xml配置文件
rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。
这个文件里面主要有 tableRule 和 function 这两个标签。在具体使用过程中可以按照需求添加 tableRule 和 function。
- tableRule标签
name 属性
指定唯一的名字,用于标识不同的表规则。
rule 标签
则指定对物理表中的哪一列进行拆分和使用什么路由算法。
columns 标签
内指定要拆分的列名字。
algorithm 标签
使用 function 标签中的 name 属性。连接表规则和具体路由算法。当然,多个表规则可以连接到同一个路由算法上。table 标签内使用。让逻辑表使用这个规则进行分片。
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
- function 标签
name
指定算法的名字。
class
制定路由算法具体的类名字。
property
为具体算法需要用到的一些属性。
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
</function>
后续继续更新Mycat数据切分实战以及应用层连接Mycat等,敬请关注。
更多技术干货,请持续关注程序员大佬超。
原创不易,转载请注明出处。