Mycat 系列之 server.xml 配置文件介绍

server.xml 几乎保存了所有 mycat 需要的系统配置信息。其在代码内直接的映射类为 SystemConfig 类。

·

user 标签

这个标签主要用于定义登录 mycat 的用户和权限。
如下示例:我定义了一个用户,用户名为 test、密码也为 test,可访问的 TESTDB 逻辑库(同时访问多个 schema 的话使用逗号隔开)。

<user name="test">
        <property name="password">test</property>
        <property name="schemas">TESTDB</property
        <property name="benchmark">1000</property>
        <property name="usingDecrypt">1</property>
</user>
<!--benchmark:当前端的整体 connection 数达到此值时, 对来自该账户的请求开始拒绝连接。\
#+ 0 或不设置表示不限制。-->

<!--# usingDecrypt:和schema.xml中writeHost 标签和 readHost 标签中的定义相同,\
#+ 即是否对密码加密。默认 0,如需要开启配置 1。-->

·

privileges 子节点

对用户的 schema 及下级的 table 进行精细化的 DML 权限控制。

DML权限写入(insert)更新(update)查询(select)删除(delect)
0000禁止禁止禁止禁止
0010禁止禁止可以禁止
1110可以禁止禁止禁止
1111可以可以可以可以

privileges 节点中的 check 属性表示是否开启 DML 权限检查, 默认 false 标识不检查,当然 privileges 节点不配置,等同 check=false。

由于 Mycat 一个用户的 schemas 属性可配置多个 schema ,所以 privileges 的下级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制。如下所示:

<user name="zhuam">
        <property name="password">test</property>
        <property name="schemas">TESTDB</property
        <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>

·

system 标签

这个标签内嵌套的所有 property 标签都与系统配置有关。

·

system 标签的相关属性

属性名描述
bindIpmycat 服务监听的 IP 地址,默认值为 0.0.0.0。
serverPort定义 mycat 的使用端口,默认值为 8066。
managerPort定义 mycat 的管理端口,默认值为 9066。
sequnceHandlerType指定使用 Mycat 全局序列的类型。0:本地文件方式1:数据库方式2:时间戳序列方式从 1.6 增加两种 ZK 的全局 ID 生成算法:3:分布式 ZK ID 生成器4:zk 递增 id 生成
defaultSqlParser指定默认的解析器。目前的可用的取值有:druidparser 和 fdbparser。一般都使用 druidparser。1.4 以后 fdbparser 作废。
processors指定系统可用的线程数,默认值为机器 CPU 核心线程数。主要影响 processorBufferPool、processorBufferLocalPercent、processorExecutor 属性。NIOProcessor 的个数也是由这个属性定义的,所以调优的时候可以适当的调高这个属性。
processorBufferChunk指定每次分配 Socket Direct Buffer 的大小,默认是 4096 个字节。这个属性也影响 BufferPool 的长度。如果一次性获取的数过大 buffer 不够用经常出现警告,则可以适当调大。
processorBufferPool指定 bufferPool 计算比例值。由于每次执行 NIO 读、写操作都需要使用到 buffer,所以系统初始化的时候会建立一定长度的 buffer 池来加快读、写的效率,减少建立 buffer 的时间。默认值为:bufferChunkSize(4096) * processors * 1000。BufferPool 的总长度 = bufferPool/bufferChunk。
processorBufferLocalPercent控制分配 ThreadLocalPool 的大小。但其实并不是一个准确的值,也是一个比例值,默认值为 100。线程缓存百分比 = bufferLocalPercent/processors。
processorExecutor这个属性主要用于指定 NIOProcessor 上共享的 businessExecutor 固定线程池大小。mycat 在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。

·

Mysql 连接相关属性

属性名描述
charset字符集设置。如果需要配置 utf8mb2 等特殊字符集可以在 index_to_charset.properties 中配置数据库短的字符集 “ID=字符集”(例如:224=utf8mb4)。注意:配置字符集的时候一定要坚持 mycat 的字符集与数据库端的字符集是一致的。
packetHeaderSize指定 Mysql 协议中的报文头长度。默认 4。
maxPacketSize指定 Mysql 协议可以携带的数据最大长度。默认 16 M。
idleTimeout指定连接的空闲超时时间。默认 30 分钟,单位毫秒。
txIsolation前端连接的初始化事务隔离级别。只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
sqlExecuteTimeoutSQL 执行超时的时间。默认时间为 300 秒,单位秒。

·

心跳相关属性

属性名描述
processorCheckPeriod清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单位毫秒。
dataNodeIdleCheckPeriod对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
dataNodeHeartbeatPeriod对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。

·

1.6 版本开始支持的属性

属性名描述
fakeMySQLVersionmycat 模拟的 mysql 版本号。默认为 5.6 版本。如非特需,不要修改这个值,目前支持设置 5.5,5.6 版本,其他版本可能会有问题。
useGlobleTableCheck是否开启全局表一致性检测。0:关闭,1:开启。通过在全局表增加_MYCAT_OP_TIME 字段来进行一致性检测,类型为 bigint。create 语句通过 mycat 执行会自动加上这个字段,其他情况请自己手工添加。
handleDistributedTransactions分布式事务开关。主要为了控制是否允许跨库事务。0:不过滤分布式事务1:过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤)2:不过滤分布式事务,但是记录分布式事务日志
useOffHeapForMerge是否启动堆外内存。0:关闭1:开启

·

开启堆外内存的注意事项

支持内存和外存并存的排序方式,结果集排序可以达上亿规模。此时应注意:

  • 前端和后端空闲连接超时检测时间应该设置大些,避免空闲检测关闭前端或后端连接,造成 Mysqlclient 连接丢失时结果集无法正确。
  • 设置 -Xmn 值尽可能大些,新生代使用 UseParallelGC 垃圾回收器,-Xss 设置 512K 比较合适,物理内存足够时,MaxDirectMemorySize 尽可能设置大些,可以加快结果集处理时间。例如:
-Xmx4G
-Xmn4G
-XX:MaxDirectMemorySize=8G
-Xss512k
-XX:+UseParallelGC

以 16G 可用内存为例配置:

vim conf/wrapper.conf
......
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=8G   #直接(堆外)内存大小
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx8G      #最大堆大小
wrapper.java.additional.11=-Xms8G         #初始化堆的大小
wrapper.java.additional.12=-Xmn4G           #新生代的内存空间大小
wrapper.java.additional.13=-Xss512k           #每个 Java 线程堆栈大小
wrapper.java.additional.14=-XX:+UseParallelGC   #定义新生代垃圾回收器
......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值