Mycat的server.xml配置详解

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

1.user标签:

<user name="test">

<property name="password">test</property>

<property name="schemas">TESTDB</property>

<property name="readOnly">true</property>

<property name="benchmark">11111</property>

<proerty 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>

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>

Benchmark 属性:

Benchmark:mycat连接服务降级处理:benchmark基准,当前端的整体connection数达到基准值是,对来自该账户的请求开始拒绝连接,0或不设表示不限制.例如:

<property name="benchmark">1000</property>

usingDecrypt 属性:

是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密,加密命令为:

执行 mycat jar 程序:

java -cp Mycat-server-1.4.1-dev.jar org.opencloudb.util.DecryptUtil 0:user:password

Mycat-server-1.4.1-dev.jar 为 mycat download 下载目录的 jar

1:host:user:password 中 0 为前端加密标志

privileges 子节点:

对用户的 schema 及 下级的 table 进行精细化的 DML 权限控制,privileges 节点中的 check 属性是用于标识是否开启 DML 权限检查, 默认 false 标识不检查,当然 privileges 节点不配置,等同 check=false,由于 Mycat 一个用户的 schemas 属性可配置多个 schema ,所以 privileges 的下级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制

Schema/Table 上的 dml 属性描述

注: 设置了 schema , 但只设置了个别 table 或 未设置 table 的 DML,自动继承 schema 的 DML 属性

privileges 配置事例如下:

<privileges check="true">

<schema name="TESTDB" dml="0010">

<table name="table01" dml="0111"></table>

<table name="table02" dml="0101"></table>

</schema>

</privileges>

2.system 标签:

这个标签内嵌套的所有 property 标签都与系统配置有关,请注意,下面我会省去标签 property 直接使用这个标签的 name 属性内的值来介绍这个属性的作用。

charset 属性:字符集设置

<system>

<property name="charset">utf8</property>

</system>

defaultSqlParser 属性:

由于 mycat 最初是时候 Foundation DB 的 sql 解析器,而后才添加的 Druid 的解析器。所以这个属性用来指定默认的解析器。目前的可用的取值有: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

- 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

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 生成。

从 1.6 增加 两种 ZK 的全局 ID 生成算法。

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 的大小。 TCP 连接参数的定义,可以查看 Javadoc

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 秒,单位秒

心跳属性:

mycat 中有几个周期性的任务来异步的处理一些我需要的工作。这些属性就在系统调优的过程中也是比不可少的。

processorCheckPeriod : 清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单位毫秒。

dataNodeIdleCheckPeriod : 对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。

dataNodeHeartbeatPeriod : 对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。

服务相关属性:

这里介绍一个与服务相关的属性,主要会影响外部系统对 myact 的感知。

bindIp : mycat 服务监听的 IP 地址,默认值为 0.0.0.0。

serverPort : 定义 mycat 的使用端口,默认值为 8066。

managerPort : 定义 mycat 的管理端口,默认值为 9066.


ps:还有部分1.6支持的属性,详细请看pdf



本文摘抄于:mycat用户指南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容