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本地文件方式
1数据库方式
2时间戳序列方式
3分布式ZK ID生成器
4 ZK递增ID生成

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不过滤分布式事务
1过滤分布式事务
2不过滤分布式事务但记录分布式事务日志

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小姐姐的主要内容,如果未能解决你的问题,请参考以下文章

二撩小姐姐MYCAT

MYCAT的初恋

20行Python代码!把B站直播间的小姐姐占为己有

20行Python代码!把B站直播间的小姐姐占为己有

20行Python代码!把B站直播间的小姐姐占为己有

60 行代码,10000 个虎牙小姐姐视频来袭!