mycat配置详解
1.mycat支持2种配置;
1.1ZooKeeper
1.2本地加载xml方式,默认是本地加载XML方式启动
2.server.xml配置文件
2.1user标签
user标签主要定于登陆mycat的用户和权限
举例;
<user>
user name="liuyang">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>
如上配置种定义了用户名和密码都为liuyang,密码123456,该用户可以访问的schema只有TESTDB
若要在schema.xml里面tESTDB,则TESTDB必须在server.xml种被定义
修改user标签name------名字;password------密码,readonly-------读写,schema-----love,love1,love2
1.5和1.6的区别;
1.6没有benchmark 限制前端连接数,1.5有为0或者不对其设置表示不限制链接
1.6没有usingDecrypt 开启密码加密功能,默认是0,不开启,为表示开启
2.2system标签
charset属性;
如果需要配置特殊字符集如utf8mb4,则可以在index_to_charset.properties种配置,配置格式为“ID=字符集”,224=utf8mb4
defaultSqlParser属性:
解析器,一般都使用 druidparser
processors属性:
指定线程的可用数量,默认值是CPU*每个核心运行线程的数量,processors值会影响processorBufferPool,processorBufferlocalPercent,processorExecutor属性。nIOprocessor的个数也由processors属性决定,所以可以适当修改processors值。
processorBufferchunk属性;
processorBufferchunk属性决定每一次分配socket Direct buffer (1.6.7.4默认是40960)的默认值为4096个字节,也影响bufferpool的长度,如果一次获取的字节过多而导致buffer不够用,则会经常出现警告,可以适当调整processbufferchunk值。
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
processorBufferLocalPercent:
这个属性就是用来控制分配ThreadLocalPool 的大小用的,但其也并不是一个准确的值,也是一个比例值。这个属性默认值为 100。
线程缓存百分比: bufferlocalpercent/porcessors
threadlocalpool长度= 线程缓存百分比*bufferpool长度/100
processorExecutor属性;
指定 NIOProcessor 上共享的 businessExecutor 固定线程池大小。mycat 在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。
sequenceHandleType:属性
指定使用 Mycat 全局序列的类型。0 为本地文件方式,1 为数据库方式,2 为时间戳序列方式,3 为分布式 ZK ID 生成器,4 为 zk 递增 id 生成。
从 1.6 增加 两种 ZK 的全局 ID 生成算法。
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 秒,单位毫秒。
服务相关属性:
主要会影响外部系统对 mycat 的感知。
- bindIp : mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
- serverPort : 定义 mycat 的使用端口,默认值为 8066, 这也连接mycat的端口。
- managerPort : 定义 mycat 的管理端口,默认值为 9066。这也是连接mycat管理地址的端口。
fakeMysqlversion:
mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6 版本,其他版本可能会有问题。此特性从 1.6 版本开始支持。
分布式事务;
<!--分布式事务开关,0 为不过滤分布式事务,1 为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2 为不过滤分布
式事务,但是记录分布式事务日志-->
<property name="handleDistributedTransactions">0</property>
主要应用场景,主要为了控制是否允许跨库事务。
此特性从 1.6 版本开始支持。
useoffheapformerge:
此特性从 1.6 版本开始支持。
使用非堆内存(Direct Memory)处理跨分片结果集。 1 开启 0关闭
全局表一致性检查;
useGlobleTableCheck
通过在全局表增加_MYCAT_OP_TIME 字段来进行一致性检测,类型为 bigint,create 语句通过 mycat执行会自动加上这个字段,其他情况请自己手工添加。
此特性从 1.6 版本开始支持。
usesqlstat属性;
开启sql 实时统计,1为开启,0为关闭。
常用管理值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE mycat:server SYSTEM "server.dtd" > <mycat:server xmlns:mycat= "http://io.mycat/" > <system> <property name= "serverPort" > 8066 </property> <property>name= "managerPort" > 9066 </property> <property name= "nonePasswordLogin" > 0 </property> <property name= "bindIP" > 0.0 . 0.0 </property>--所有的IP地址 <property name= "frontWriteQueueSize" > 4096 </property>------队列大小 <property name= "charset" >utf8</property>---------注意一定需要跟MySQL数据库字符集一致 <property name= "txIsolation" > 2 </property>------隔离级别 <property name= "processors" > 1 </property>-----CPU合数 <property name= "idleTimeout" > 300000 </property>-------空闲时间单位毫秒 30 分钟 <property name= "sqlExecuteTimeout" > 300 </property>-----单位是秒 <property name= "useSqlStat" > 0 </property>---------开启实时统计 0 ,不开启 1 开启实时统计 <property name= "useGlobleTableCheck" > 0 </property> <!-- 1 为开启全加班一致性检测、 0 为关闭 --> <property name= "sequnceHandlerType" > 2 </property> <property name= "defaultMaxlimit" > 100 </property>-----------设置拆线呢结果 <property name= "maxPacketSize" > 1024 * 1024 * 16 </property>------可以携带最大数据量 </system> <user name= "shi" defaultAccount= "true" > <property name= "password" > 123456 </property> <property name= "schemas" >haohao,test,liu</property> <privileges check= "false" > <schema name= "liu" dml= "0110" > <table name= "t1" dml= "0000" ></table>----insert update select delete <table name= "t3" dml= "1111" ></table> <table name= "t4" dml= "1011" ></table> </schema> </privileges> <property name= "readOnly" >flase</property> <property name= "defaultSchema" >TESTDB</property> </user> </mycat:server> |
密码加密:
/mycat/lib
[root@12c lib]# java -cp Mycat-server-1.6.7.4-release.jar io.mycat.util.DecryptUtil 0:shi:123456
其中 0:user:password是加密字符串,有两种格式
dataHost加密格式
1:hostM1:root:123456
1代表是dataHost加密
hostM1是<writeHost host="hostM1"
root是user="root"
123456是 password=明文密码(123456)
对应writeHost配置
<writeHost host="hostM1" url="localhost:3306" user="root"
password="BpkNIjF7LfzS1C76HT7B1bJgmGIDtPihqIvHBlC92L1IFqsMfoJEMk1EkxSzjasWB4GWoUcODYO4AaJstdAp5w==" usingDecrypt="1">
<!-- can have multi read hosts -->
</writeHost>
mycat用户登录密码加密格式
0:root:123456
0代表mycat用户登录密码加密
<user name="root" defaultAccount="true">
<property name="usingDecrypt">1</property>
<property name="password">d6D+pOmkuUoY09p4/aivwMsScLa7zfjIwAxvkEhr3v7en06mEXoX9DTTjQNug5CfvGf7Wy9oLcthYI3yLMSjIg==</property>
<property name="schemas">TESTDB</property>
aNoLWIbT6atPFC93EVjrgxBBAg2Sfs+eTuRK+E7c/5mHl9bG+gXT/O7y9oxqK6Tl9PppvoS61a7l7yDO72a7uQ==
第二步,修改server。cml文件的加密
<property name="usingDecrypt">1</property>
全文解释;
-
-
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
-
- you may not use this file except in compliance with the License. - You
-
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
-
- - Unless required by applicable law or agreed to in writing, software -
-
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
-
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
-
License for the specific language governing permissions and - limitations
-
under the License. -->
-
<!DOCTYPE
-
<mycat:server xmlns:mycat="http://io.mycat/">
-
<system>
-
<!-- 配置该属性的时候一定要保证mycat的字符集和mysql 的字符集是一致的 -->
-
<property name="charset">utf8</property>
-
<!-- 指定每次分配socker direct buffer 的值,默认是4096字节 -->
-
<property name="processorBufferChunk">4096/property>
-
<!-- 配置系统可用的线程数量,默认值为CPU核心X每个核心运行线程的数量 -->
-
<property name="processors">4/property>
-
-
<!-- 指定BufferPool 的计算比例 默认值为bufferChunkSize(4096)X processors X 1000
-
<property name="processorBufferPool">100000000/property> -->
-
-
<!-- 用来控制ThreadLocalPool 分配Pool的比例大小,默认值为100
-
<property name="processorBufferLocalPercent">100/property> -->
-
-
<!-- 用来指定Mycat全局序列类型,0为本地文件,1为数据库方式,2为时间戳列方式,默认使用本地文件方式,文件方式主要用于测试
-
<property name="sequnceHandlerType">0/property> -->
-
-
<!-- TCP 参数配置,mycat在每次建立前后端连接时候,都会使用这些参数初始化TCP属性,详细可以查看Java API 文档:http://docs.oracle.com/javase/7/docs/api/net/StandardSocketOptions.html
-
<property name="frontSocketSoRcvbuf">1024*1024/property>
-
<property name="frontSocketSoSndbuf">4*1024*1024/property>
-
<property name="frontSocketNoDelay">1/property>
-
<property name="backSocketSoRcvbuf">4*1024*1024/property>
-
<property name="backSocketSoSndbuf">1024*1024/property>
-
<property name="backSocketNoDelay">1/property> -->
-
-
<!-- mysql 连接相关配置 -->
-
<!-- <property name="packetHeaderSize">4</property> 指定mysql协议中的报文头长度,默认4个字节-->
-
<!-- <property name="maxPacketSize">1024*1024*16</property> 配置可以携带的数据量最大值,默认16M-->
-
<!-- <property name="idleTimeout">1024*1024*16</property> 指定连接的空闲时间超时长度,如果某个连接空闲时间超过该值,则将连接关闭并回收,单位为毫秒,默认值为30分钟-->
-
<!-- <property name="txIsolation">3</property> 初始化前端连接事务的隔离级别有:
-
READ_UNCOMMITTED=1
-
READ_COMMITTED=2
-
REPEATED_READ=3
-
SERIALIZABLE=4
-
默认为3-->
-
<!-- <property name="sqlExecuteTimeout">3</property>执行sql超时时间,默认为300秒-->
-
-
-
<!-- 心跳属性配置 -->
-
<!-- <property name="processorCheckPeriod">1000</property>清理前后端空闲、超时、关闭连接的时间间隔,单位为毫秒,默认为1秒-->
-
<!-- <property name="dataNodeIdleCheckPeriod">300*1000</property>对后端连接进行空闲,超时检查的时间间隔,单位为毫秒,默认为300秒-->
-
<!-- <property name="dataNodeHeartbeatPeriod">10*1000</property>对后端所有读写库发起心跳的间隔时间,单位为毫秒,默认为10秒-->
-
-
<!-- 服务相关属性 -->
-
<!-- <property name="bindIp">0.0.0.0</property>mycat服务监听的ip地址,默认为0.0.0.0-->
-
<!-- <property name="serverPort">8066</property>定义mycat使用的端口,默认值为8066-->
-
<!-- <property name="managerPort">9066</property>定义mycat管理的端口,默认值为9066-->
-
-
<!-- 分布式事务开关属性 -->
-
<!-- <property name="handleDistributedTransactions">0</property>0为不过滤分布式事务,1过滤分布式事务,2不过滤分布式事务,但是记录分布式事务日志。主要用户是否允许跨库事务。mycat 1.6版本开始,支持此属性-->
-
-
-
<!-- <property name="useOffHeapForMerge">1</property>配置是否启用非堆内存跨分片结果集,1为开启,0为关闭,mycat1.6开始支持该属性-->
-
-
<!-- 全局表一致性检测 -->
-
<property name="useGlobleTableCheck">0</property> <!--通过添加_MYCAT_OP_TIME字段来进行一致性检测,为BIGINT类型 1为开启全加班一致性检测、0为关闭 -->
-
-
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
-
-
-
<!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
-
<!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
-
-
<!--
-
<property name="processors">1</property>
-
<property name="processorExecutor">32</property>
-
-->
-
<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
-
<property name="processorBufferPoolType">0</property>
-
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
-
<!--<property name="maxStringLiteralLength">65535</property>-->
-
<!--<property name="processorExecutor">16</property>-->
-
<!--
-
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
-
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
-
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
-
<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
-
<property name="handleDistributedTransactions">0</property>
-
-
<!--单位为m-->
-
<property name="memoryPageSize">1m</property>
-
-
<!--单位为k-->
-
<property name="spillsFileBufferSize">1k</property>
-
-
<property name="useStreamOutput">0</property>
-
-
<!--单位为m-->
-
<property name="systemReserveMemorySize">384m</property>
-
-
<!--是否采用zookeeper协调切换 -->
-
<property name="useZKSwitch">true</property>
-
-
</system>
-
-
<!-- 全局SQL防火墙设置 -->
-
<!--
-
<firewall>
-
<whitehost>
-
<host host="127.0.0.1" user="mycat"/>
-
<host host="127.0.0.2" user="mycat"/>
-
</whitehost>
-
<blacklist check="false">
-
</blacklist>
-
</firewall>
-
-->
-
<!-- 定义登录mycat对的用户权限 -->
-
<user name="root">
-
<property name="password">123456</property>
-
<!-- 若要访问TESTDB 必须现在server.xml 中定义,否则无法访问TESTDB-->
-
<property name="schemas">TESTDB</property>
-
<!-- 配置是否允许只读 -->
-
<property name="readOnly">true</property>
-
<!-- 定义限制前端整体的连接数,如果其值为0,或者不设置,则表示不限制连接数量 -->
-
<property name="benchmark">11111</property>
-
<!-- 设置是否开启密码加密功能,默认为0不开启加密,为1则表示开启加密 -->
-
<property name="usingDecrypt">1</property>
-
<!-- 表级 DML 权限设置 -->
-
<!--
-
<privileges check="false">
-
<schema name="TESTDB" dml="0110" >
-
<table name="tb01" dml="0000"></table>
-
<table name="tb02" dml="1111"></table>
-
</schema>
-
</privileges>
-
-->
-
</user>
-
</mycat:server