# 《Mycat核心技术》第02章:Mycat核心配置文件server.xml说明
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★☆☆☆
- 本章重点:介绍Mycat核心配置文件server.xml,理解server.xml文件在Mycat中的作用,并能够在实际项目中灵活使用Mycat进行分库分表。
大家好,我是CurleyG~~
今天给大家介绍《Mycat核心技术》的第02章:给大家简单介绍下Mycat中的核心配置文件server.xml,好了,开始今天的内容。
# 一、概述
server.xml几乎保存了所有mycat需要的系统配置信息。其在代码内直接的映射类为SystemConfig类。现在就对这个文件中的配置,一一介绍。
# 二、user标签
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
2
3
4
5
server.xml中的标签本就不多,这个标签主要用于定义登录mycat的用户和权限。
例如上面的例子中,我定义了一个用户,用户名为test、密码也为test,可访问的schema也只有TESTDB一个。如果我在schema.xml中定义了多个schema,那么这个用户是无法访问其他的schema。
在MySQL客户端看来则是无法使用use切换到这个其他的数据库。如果使用了use命令,则mycat会报出这样的错误提示。
ERROR 1044 (HY000): Access denied for user 'test' to database 'xxx'
这个标签嵌套的property标签则是具体声明的属性值,正如上面的例子。我们可以修改user标签的name属性来指定用户名;修改password内的文本来修改密码;修改readOnly为true 或false来限制用户是否只是可读的;修改schemas内的文本来控制用户可放问的schema;修改schemas内的文本来控制用户可访问的schema,同时访问多个schema的话使用 , 隔开,例如:
<property name="schemas">TESTDB,db1,db2</property>
# 三、system标签
这个标签内嵌套的所有property标签都与系统配置有关,请注意,下面我会省去标签property直接使用这个标签的name属性内的值来介绍这个属性的作用。
# 四、defaultSqlParser属性
由于mycat最初是时候Foundation DB的sql解析器,而后才添加的Druid的解析器。所以这个属性用来指定默认的解析器。目前的可用的取值有:druidparser和 fdbparser。使用的时候可以选择其中的一种,目前一般都使用druidparser。
# 五、processors属性
这个属性主要用于指定系统可用的线程数,默认值为Runtime.getRuntime().availableProcessors()方法返回的值。主要影响processorBufferPool、processorBufferLocalPercent、processorExecutor属性。NIOProcessor的个数也是由这个属性定义的,所以调优的时候可以适当的调高这个属性。
# 六、processorBufferChunk属性
这个属性指定每次分配Socket Direct Buffer的大小,默认是4096个字节。这个属性也影响buffer pool的长度。
# 七、processorBufferPool属性
这个属性指定bufferPool计算 比例值。由于每次执行NIO读、写操作都需要使用到buffer,系统初始化的时候会建立一定长度的buffer池来加快读、写的效率,减少建立buffer的时间。
# 八、Mycat中两个主要的buffer池
BufferPool和ThreadLocalPool
BufferPool由ThreadLocalPool组合而成,每次从BufferPool中获取buffer都会优先获取ThreadLocalPool中的buffer,未命中之后才会去获取BufferPool中的buffer。也就是说ThreadLocalPool是作为BufferPool的二级缓存,每个线程内部自己使用的。
当然,这其中还有一些限制条件需要线程的名字是由$_开头。然而,BufferPool上的buffer则是每个NIOProcessor都共享的。默认这个属性的值为:
若bufferPool不是bufferChunk的整数倍,则总长度为前面计算得出的商 + 1 假设系统线程数为4,其他都为属性的默认值,则:
bufferPool = 4096 * 4 * 1000
BufferPool的总长度 : 4000 = 16384000 / 4096
2
# 九、processorBufferLocalPercent属性
前面提到了ThreadLocalPool。这个属性就是用来控制分配这个pool的大小用的,但其也并不是一个准确的值,也是一个比例值。这个属性默认值为100。
线程缓存百分比 = bufferLocalPercent / processors属性
例如,系统可以同时运行4个线程,使用默认值,则根据公式每个线程的百分比为25。最后根据这个百分比来计算出具体的
ThreadLocalPool的长度公式如下:
ThreadLocalPool的长度 = 线程缓存百分比 * BufferPool长度 / 100
假设BufferPool的长度为 4000,其他保持默认值。
那么最后每个线程建立上的ThreadLocalPool的长度为: 1000 = 25 * 4000 / 100
# 十、processorExecutor属性
这个属性主要用于指定NIOProcessor上共享的businessExecutor固定线程池大小。mycat在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。
# 十一、sequnceHandlerType属性
指定使用Mycat全局序列的类型。0为本地文件方式,1为数据库方式。默认是使用本地文件方式,文件方式主要只是用于测试使用。
# 十二、TCP连接相关属性
StandardSocketOptions.SO_RCVBUF StandardSocketOptions.SO_SNDBUF StandardSocketOptions.TCP_NODELAY
以上这三个属性,分别由:
frontSocketSoRcvbuf 默认值: 1024 * 1024
frontSocketSoSndbuf 默认值: 4 * 1024 * 1024
frontSocketNoDelay 默认值: 1
backSocketSoRcvbuf 默认值: 4 * 1024 * 1024
backSocketSoSndbuf 默认值: 1024 * 1024
backSocketNoDelay 默认值: 1
2
3
4
5
6
各自设置前后端TCP连接参数。Mycat在每次建立前、后端连接的时候都会使用这些参数初始化连接。可以按系统要求适当的调整这些buffer的大小。TCP连接参数的定义,可以查看Javadoc。
MySQL连接相关属性初始化MySQL前后端连接所涉及到的一些属性:
- packetHeaderSize : 指定MySQL协议中的报文头长度。默认4。
- maxPacketSize : 指定MySQL协议可以携带的数据最大长度。默认16M。 idleTimeout : 指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认30分钟。
- charset : 连接的初始化字符集。默认为utf8。
- txIsolation : 前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为REPEATED_READ。
- sqlExecuteTimeout:SQL执行超时的时间,Mycat会检查连接上最后一次执行SQL的时间,若超过这个时间则会直接关闭这连接。默认时间为300秒。
# 十三、周期间隔相关属性
Mycat中有几个周期性的任务来异步的处理一些我需要的工作。这些属性就在系统调优的过程中也是比不可少的。
- processorCheckPeriod : 清理NIOProcessor上前后端空闲、超时和关闭连接的间隔时间。默认是1秒。
- dataNodeIdleCheckPeriod : 对后端连接进行空闲、超时检查的时间间隔,默认是60秒。
- dataNodeHeartbeatPeriod : 对后端所有读、写库发起心跳的间隔时间,默认是10秒。
# 十四、服务相关属性
这里介绍一个与服务相关的属性,主要会影响外部系统对myact的感知。
- bindIp : mycat服务监听的IP地址,默认值为0.0.0.0。
- serverPort : 定义mycat的使用端口,默认值为8066。
- managerPort : 定义mycat的管理端口,默认值为9066。
