Mycat 配置文件server.xml
server.xml 几乎保存了所有 mycat 需要的系统配置信息。 1、system 标签:该标签内嵌套的所有 property 标签都与系统配置有关。 charset 属性: 该属性用于字符集设置。 <system> <property name="charset">utf8</property> </system> defaultSqlParser 属性: 该属性用来指定默认的解析器。目前的可用的取值有:druidparser 和 fdbparser。使用的时候可以选择其中的一种,目前一般都使用 druidparser。1.3 解析器默认为 fdbparser,1.4 默认为 druidparser,1.4 以后 fdbparser 作废。 processors 属性: 该属性主要用于指定系统可用的线程数,默认值为机器 CPU 核心线程数。主要影响 processorBufferPool、 processorBufferLocalPercent、 processorExecutor 属性。NIOProcessor 的个数也是由这个属性定义的,所以调优的时候可以适当的调高这个属性。 processorBufferChunk 属性: 该属性指定每次分配 Socket Direct Buffer 的大小,默认是 4096 个字节。这个属性也影响 buffer pool 的长度。如果一次性获取的数过大 buffer 不够用会经常出现警告,此时可以适当调大。 processorBufferPool 属性: 该属性指定 bufferPool 计算比例值。由于每次执行 NIO 读、写操作都需要使用到 buffer,系统初始化的时候会建立一定长度的 buffer 池来加快读、写的效率,减少建立 buffer 的时间。Mycat 中有两个主要的 buffer 池: BufferPool: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
?
?
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 为数据库方式,2 为时间戳序列方式,3 为分布式ZK ID 生成器,4 为 zk 递增 id 生成。 TCP 连接相关属性:
以上这三个属性,分别由: frontSocketSoRcvbuf 默认值: 1024 * 1024 frontSocketSoSndbuf 默认值: 4 * 1024 * 1024 frontSocketNoDelay 默认值: 1 backSocketSoRcvbuf 默认值: 4 * 1024 * 1024 backSocketSoSndbuf 默认值: 1024 * 1024 backSocketNoDelay 默认值: 1 各自设置前后端 TCP 连接参数。 Mycat 在每次建立前、后端连接的时候都会使用这些参数初始化连接。可以按系统要求适当的调整这些 buffer 的大小。 2、user 标签<user name="test"> <property name="password">123456</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property> <property name="benchmark">222221</property> <proerty name="usingDecrypt">1</property> <privileges check="false"> <schema name="TESTDB" dml="0010" showTables="custome/mysql"> <table name="tb_user" dml="0110"></table> <table name="tb_dynamic dml="1111"></table> </schema> </privileges> </user> 该标签主要用于定义登录 mycat 的用户和权限。示例定义了一个用户,用户名为 test、密码为123456,可访问的 schema 也只有 TESTDB 一个。 property属性 : 声明具体的属性值,例如修改schemas内的文本来控制用户可访问的 schema,同时访问多个 schema 的话使用,隔开,例如: <property name="schemas">TESTDB,db1,db2<property> Benchmark 属性: 用于mycat连接服务降级处理:benchmark基准,当前端的整体connection数达到基准值时,对来自该账户的请求开始拒绝连接,0或不设表示不限制。 usingDecrypt 属性: 是否对密码加密。默认0表示不开启,1表示开启密码加密,同时使用加密程序对密码加密。 privileges 属性:
|