mycat小姐姐
Posted 海鲨数据库架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mycat小姐姐相关的知识,希望对你有一定的参考价值。
mycat小姐姐的SERVER连衣裙,白色蕾丝有点镂空范
白色特性 USER 标签
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="benchmark">11111</property>
<property name="usingDecrypt">1</property>
<privileges check="false">
<schema name="TESTDB" dml="0010" >
<table name="tbl_user" dml="0110"></table>
<table name="tbl_dynamic" dml="1111"></table>
</schema>
</privileges>
</user>
name:定义个连接用户名字
密码为:test
可以访问逻辑库:testdb
多个逻辑库 <property name="schemas">TESTDB,db1,db2</property>
readOnly :表示只读
benchmark:表示当前端整体连接数超过此值时,就拒绝该用户的连接请求。
usingDecrypt:表示对密码加密0否 1是,1需要配置加密程序
privileges 节点中的 check 属性是用于标识是否开启 DML 权限检查, 默认 false 标识不检查。
<schema name="TESTDB" dml="0010" > 表示对逻辑库TESTDB的DML操作限制为0010.
那么什么是0010呢? 0表示否,1表示可以。4个位置分别代表 Insert,Update,Select,Delete。
这里的DML 表示默认下面逻辑表的DML权限。0010 不可插,不可更新,可以查询,不可删除。符合只读账号属性。
而下面有定义两个表的DML权限
<table name="tbl_dynamic" dml="1111"></table>
其中tbl_dynamic 却可以增删改查。 这样可以精细化对每个表进行DML权限限制。
蕾丝花边SYSTEM
<system> <property name="charset">utf8</property> </system>
定义字符集,必须与后端mysql一致,可以通过变量来查询:
show variables like 'collation_%';
show variables like 'character_set_%';
defaultSqlParser 属性 sql 解析器,目前一般都使用 druidparser。
processors 属性:这个属性主要用于指定系统可用的线程数,默认值为机器 CPU 核心线程数。
processorBufferChunk 属性:这个属性指定每次分配 Socket Direct Buffer 的大小,默认是 4096 个字节。这个属性也影响 buffer pool 的
长度。如果一次性获取的数过大 buffer 不够用 经常出现警告,则可以适当调大。
processorBufferPool 属性:这个属性指定 bufferPool 计算 比例值。由于每次执行 NIO 读、写操作都需要使用到 buffer,系统初始化的
时候会建立一定长度的 buffer 池来加快读、写的效率,减少建立 buffer 的时间。
值为: 默认 bufferChunkSize(4096) * processors 属性 * 1000
BufferPool 的总长度 = bufferPool / bufferChunk。
processorBufferLocalPercent 属性:这个属性就是用来控制分配这个 pool 的大小用的,但其也并不是一个准确的值,也是一个比例值。 这个属性默认值为 100。
线程缓存百分比 = bufferLocalPercent / processors 属性。
例如,系统可以同时运行 4 个线程,使用默认值,则根据公式每个线程的百分比为 25。 最后根据这个百分比
来计算出具体的 ThreadLocalPool 的长度公式如下:
ThreadLocalPool 的长度 = 线程缓存百分比 * BufferPool 长度 / 100
假设 BufferPool 的长度为 4000,其他保持默认值。
那么最后每个线程建立上的 ThreadLocalPool 的长度为: 1000 = 25 * 4000 / 100
<property name="processorBufferPoolType">0</property>
默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。2 NettyBufferPool
sequnceHandlerType 属性
指定使用 Mycat 全局序列的类型。 0 为本地文件方式, 1 为数据库方式, 2 为时间戳序列方式, 3 为分布式
ZK ID 生成器, 4 为 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 的大小。
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 秒,单位毫秒。
全局表一致性检测
<property name="useGlobleTableCheck">0</property>
<!-- 1 为开启全加班一致性检测、 0 为关闭 -->
原理通过在全局表增加_MYCAT_OP_TIME 字段来进行一致性检测,类型为 bigint, create 语句通过 mycat
执行会自动加上这个字段,其他情况请自己手工添加。
分布式事务
<property name="handleDistributedTransactions">0</property>
<!--分布式事务开关, 0 为不过滤分布式事务, 1 为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤), 2 为不过滤分布式事务,但是记录分布式事务日志-->
主要应用场景,主要为了控制是否允许跨库事务。
<property name="useOffHeapForMerge">1</property>
1.使用非堆内存(Direct Memory)处理跨分片结果集的 Merge/order by/group by/limit。
2.通过 server.xml 中的 useOffHeapForMerge 参数配置是否启用非堆内存处理跨分片结果集
3.Mycat 内存分层管理:
a.结果集处理内存;
b.系统预留内存;
c.网络处理内存共三块。
其中网络处理内存部分全部为 Direct Memory,结果集内存分为 Direct Memory 和 HeapMemory。
但目前仅使用 Direct Memory。系统预留内存为 On Heap Memory。
JVM 参数,必须设置-
XX:MaxDirectMemorySize 和 -Xmx
例如:-Xmx1024m -Xmn512m -XX:MaxDirectMemorySize=2048m -Xss256K -XX:+UseParallelGC
上述分层可以避免 OOM 问题,以及减少 Full GC 回收时间,提高 mycat 响应速度。
property name="useCompression">1</property>
是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。
<property name="useSqlStat">0</property>
是否开启实时统计。1为开启;0为关闭 。
最后我们总结下SYSTEM的属性
属性 |
说明 |
备注 |
useSqlStat |
开启实时统计 |
1为开启,0为关闭 |
useGlobleTableCheck |
全局表一致性检测 |
1为开启,0为关闭 |
sequnceHandlerType |
Mycat全局ID类型 |
0本地文件方式 |
useCompression |
mysql压缩协议 |
1为开启,0为不开启 |
fakeMySQLVersion |
伪装的MySQL版本号 |
|
processorBufferChunk |
每次分配Socket Direct Buffer大小 |
默认4096字节 |
processors |
系统可用线程数 |
默认Runtime.getRuntime().availableProcessors()返回值 |
processorExecutor |
NIOProcessor共享businessExecutor线程池大小 |
|
processorBufferPoolType |
每次分配Socket Direct Buffer大小 |
默认是4096个字节 |
maxStringLiteralLength |
sql解析时最大文本长度 |
默认是65535(即64K) |
backSocketNoDelay |
TCP连接相关属性 |
默认值1 |
frontSocketNoDelay |
TCP连接相关属性 |
默认值1 |
serverPort |
指定服务端口 |
默认8066 |
managerPort |
制定管理端口 |
默认9066 |
idleTimeout |
连接空闲时间 |
默认30分钟,单位毫秒 |
bindIp |
||
frontWriteQueueSize |
前端连接写队列长度 |
为了让用户知道是否队列过长(SQL结果集返回太多)。当超过指定阀值后,会产生一个告警日志 |
handleDistributedTransactions |
分布式事务开关 |
0不过滤分布式事务 |
useOffHeapForMerge |
是否让Mycat开启非堆内存 |
1 开启,0关闭 |
memoryPageSize |
内存分页大小 |
|
useStreamOutput |
是否使用流输出 |
|
systemReserveMemorySize |
系统保留内存大小 |
|
useZKSwitch |
是否采用zookeeper协调切换 |
true/false |
Firewall标签
<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小姐姐的主要内容,如果未能解决你的问题,请参考以下文章