mycat配置详解之——server.xml

mycat的所有配置文件在mycat/conf目录下,主要包括schema.xml、server.xml、rule.xml等配置文件。
server.xml 几乎保存了所有 mycat 需要的系统配置信息。其在代码内直接的映射类为 SystemConfig 类。


1.user标签
该标签用于定义登录mycat的用户和权限。这个标签嵌套的 property 标签则是具体声明的属性值,例如:
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB,DB1,DB2</property>
<property name="readOnly">true</property>
<property name="benchmark">11111</property>
<property name="usingDecrypt">1</property>
<privileges check="false">
<schema name="TESTDB" dml="0010" showTables="custome/mysql">
<table name="tbl_user" dml="0110"></table>
<table name="tbl_dynamic" dml="1111"></table>
</schema>
</privileges>
</user>
1)Benchmark
该属性指定前端可连接connection的最大数,当连接数达到该最大值时,则拒绝来自该账户的连接请求,值为0或不设表示不限制前段连接数。例如:
<property name="benchmark">1000</property>
2)usingDecrypt
该属性指定是否对密码加密,默认值为0(禁用),如开启需配置为1,同时使用加密程序对密码加密,加密命令为:
java -cp Mycat-server-1.4.1-dev.jar io.mycat.util.DecryptUtil 0:host:user:password
--说明:
1)Mycat-server-1.4.1-dev.jar为mycat download下载目录的jar。
2)0:host:user:password 中0为前端加密标志。
3)privileges子节点
该子节点对用户schema及其下table进行精细化的DML权限控制,privileges中的check属性用于标识是否开启DML权限检查,默认为false标识不检查,当然不配置privileges节点等同于check=false,由于mycat一个用户的schemas属性可配置多个schema,所以,privileges 的下级schema节点同样可配置多个,以对多库多表进行细粒度的DML权限控制。
Schema/Table上的dml属性描述:
参数    说明                              实例(禁止增删改查)
dml     insert,update,select,delete       0000
如果设置了schema,但只设置了个别table或未设置table的DML,则自动继承schema的DML属性。例如:
<user name="zhuam">
<property name="password">111111</property>
<property name="schemas">TESTDB,TESTDB1</property>
<!-- 表级权限: Table 级的 dml(curd)控制,未设置的 Table 继承 schema 的 dml -->
<!-- TODO: 非 CURD SQL 语句, 透明传递至后端 -->
<privileges check="true">
<schema name="TESTDB" dml="0110" >
<table name="table01" dml="0111"></table>
<table name="table02" dml="1111"></table>
</schema>
<schema name="TESTDB1" dml="0110">
<table name="table03" dml="1110"></table>
<table name="table04" dml="1010"></table>
</schema>
</privileges>
</user>

2.system标签
该标签内嵌套的所有property标签都与系统配置有关。
1)charset
该属性设置字符集。例如:
<system> <property name="charset">utf8</property> </system>
如需配置utf8mb2等特殊字符集可在index_to_charset.properties中配置,配置数据库短字符集ID=字符集,例如:224=utf8mb4。
配置字符集时mycat字符集与数据库端字符集必须一致,数据库端字符集可通过变量查询:
show variables like 'character_set_%';
show variables like 'collation_%';
2)defaultSqlParser
由于mycat最初使用Foundation DB的sql解析器,后来才添加的Druid的解析器。所以,该属性用来指定默认的解析器。目前的可用值为:druidparser和fdbparser。使用时可选择其中一种,目前一般都使用 druidparser。
1.3解析器默认为fdbparser,1.4默认为druidparser,1.4以后fdbparser作废。
3)processors
该属性用于指定系统可用的线程数,默认值为机器CPU核心线程数。
主要影响processorBufferPool、processorBufferLocalPercent、processorExecutor属性。
NIOProcessor个数也是由这个属性定义的,所以,调优的时候可以适当的调高这个属性。
4)processorBufferChunk
该属性指定每次分配Socket Direct Buffer的大小,默认为4096个字节。该属性也影响buffer pool的长度。如果一次性获取的数过大,导致 buffer不够用而经常出现警告,则可以适当调大。
5)processorBufferPool
该属性指定bufferPool的计算比例值。由于每次执行NIO读、写操作都需要使用到 buffer,系统初始化时会建立一定长度的buffer池来加快读、写的效率,减少建立buffer的时间。
mycat中有两个主要buffer池:
a)BufferPool
b)ThreadLocalPool
BufferPool由ThreadLocalPool组合而成,每次从BufferPool获取buffer都会优先获取ThreadLocalPool中的buffer,如未命中才会去获取BufferPool中的buffer。也就是说,ThreadLocalPool是作为BufferPool的
二级缓存,每个线程内部自己使用的。当然,这其中还有一些限制条件,需要线程的名字是由$_开头。然而,BufferPool中的buffer则是每个NIOProcessor都共享的。
该属性的默认值为:bufferChunkSize(4096)*processors属性*1000
BufferPool的总长度 = bufferPool / bufferChunk。
如bufferPool不是bufferChunk的整数倍,则总长度为前面计算得出的结果+1
假设系统线程数为4,其他都为属性的默认值,则:
bufferPool = 4096 * 4 * 1000
BufferPool 的总长度 : 4000 = 16384000 / 4096
6)processorBufferLocalPercent
前面提到了ThreadLocalPool。这个属性就是用来控制分配这个pool大小用的,但其也并不是一个准确值,而是一个比例值。这个属性默认值为 100。
线程缓存百分比=bufferLocalPercent/processors属性。
例如:系统可以同时运行4个线程,使用默认值,则根据公式每个线程的百分比为 25。最后根据这个百分比计算出具体的 ThreadLocalPool 的长度如下:
ThreadLocalPool长度=线程缓存百分比*BufferPool长度/100
假设BufferPool的长度为4000,其他保持默认值。
那么,最后每个线程建立的ThreadLocalPool长度为:1000=25*4000/100
7)processorExecutor
该属性指定NIOProcessor上共享的businessExecutor固定线程池大小。mycat处理一些异步逻辑时会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小值。
8)sequnceHandlerType
该属性指定使用mycat全局序列的类型。0为本地文件方式,1为数据库方式,2为时间戳序列方式,3为分布式ZK ID生成器,4为zk递增id生成。
1.6后版本中增加了两种ZK的全局ID生成算法。
9)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
分别设置前后端TCP连接参数。mycat每次建立前、后端连接时都会使用这些参数初始化连接。可按系统要求适当调整这些buffer的大小。 
10)Mysql连接相关属性
初始化mysql前后端连接所涉及到的一些属性如下:
packetHeaderSize : 指定mysql协议的报文头长度。默认为4。
maxPacketSize : 指定mysql协议可携带的数据最大长度。默认为16M。
idleTimeout : 指定连接的空闲超时时间。某连接在发起空闲检查时,发现距离上次使用超过了空闲时间,则关闭和回收该连接。默认30分钟,单位毫秒。
charset : 指定连接的初始化字符集。默认为utf8。
txIsolation : 指定前端连接的初始化事务隔离级别,只在初始化时使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
sqlExecuteTimeout:指定SQL执行的超时时间,mycat会检查连接上最后一次执行SQL的时间,若超过这个时间则会直接关闭该连接。默认时间为300秒,单位秒。
11)心跳属性
mycat中有几个周期性任务来异步的处理一些需要完成的工作。这些属性在系统调优过程中也必不可少。
processorCheckPeriod : 清理 NIOProcessor上前后端空闲、超时和关闭连接的间隔时间。默认是1秒,单位毫秒。
dataNodeIdleCheckPeriod : 对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
dataNodeHeartbeatPeriod : 对后端所有读、写库发起心跳的间隔时间,默认是10秒,单位毫秒。
12)服务相关属性
这里介绍一些与服务相关的属性,主要会影响外部系统对mycat的感知。
bindIp : mycat服务监听的IP地址,默认值为 0.0.0.0。
serverPort : 定义mycat的使用端口,默认值为 8066。
managerPort : 定义mycat的管理端口,默认值为 9066。
13)fakeMySQLVersion
mycat模拟的mysql版本号默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置5.5,5.6版本,其他版本可能会有问题。此特性从1.6版本开始支持。
14)全局表一致性检测
通过在全局表上增加MYCAT_OP_TIME字段来支持进行一致性检测,该字段类型为bigint,create语句通过mycat执行会自动添加该字段,其他情况需手工添加。
此特性从 1.6 版本开始支持。例如:
<property name="useGlobleTableCheck">0</property> <!-- 1 为开启全局表一致性检测, 0为关闭全局表一致性检测 -->
此外,全局表定义中,需要有一个时间戳字段,每次记录update,insert,确保该时间戳字段赋值,并且mycat增加定时检测逻辑,检测记录总量以及最新时间戳的匹配,简单有效的发现全局表不一致的问题。 
15)分布式事务开关
该属性控制是否允许跨库事务。此特性从 1.6 版本开始支持。例如:
<property name="handleDistributedTransactions">0</property>
handleDistributedTransactions为分布式事务开关,0表示不过滤分布式事务,1表示过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2 表示不过滤分布式事务,但是记录分布式事务日志。
16)Off Heap for Mycat
该属性控制是否开启非堆内存处理跨分片结果集,0为关闭,1为开启。此特性从 1.6 版本开始支持。例如:
<property name="useOffHeapForMerge">1</property>


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhdz_bj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值