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>

全文解释;

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  <!-- - - Licensed under the Apache License, Version 2.0 (the "License");
  3.  - you may not use this file except in compliance with the License. - You
  4.  may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
  5.  - - Unless required by applicable law or agreed to in writing, software -
  6.  distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
  7.  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
  8.  License for the specific language governing permissions and - limitations
  9.  under the License. -->
  10.  <!DOCTYPE mycat:server SYSTEM "server.dtd">
  11.  <mycat:server xmlns:mycat="http://io.mycat/">
  12.  <system>
  13.  <!-- 配置该属性的时候一定要保证mycat的字符集和mysql 的字符集是一致的 -->
  14.  <property name="charset">utf8</property>
  15.  <!-- 指定每次分配socker direct buffer 的值,默认是4096字节 -->
  16.  <property name="processorBufferChunk">4096/property>
  17.  <!-- 配置系统可用的线程数量,默认值为CPU核心X每个核心运行线程的数量 -->
  18.  <property name="processors">4/property>
  19.   
  20.  <!-- 指定BufferPool 的计算比例 默认值为bufferChunkSize(4096)X processors X 1000
  21.  <property name="processorBufferPool">100000000/property> -->
  22.   
  23.  <!-- 用来控制ThreadLocalPool 分配Pool的比例大小,默认值为100
  24.  <property name="processorBufferLocalPercent">100/property> -->
  25.   
  26.  <!-- 用来指定Mycat全局序列类型,0为本地文件,1为数据库方式,2为时间戳列方式,默认使用本地文件方式,文件方式主要用于测试
  27.  <property name="sequnceHandlerType">0/property> -->
  28.   
  29.  <!-- TCP 参数配置,mycat在每次建立前后端连接时候,都会使用这些参数初始化TCP属性,详细可以查看Java API 文档:http://docs.oracle.com/javase/7/docs/api/net/StandardSocketOptions.html
  30.  <property name="frontSocketSoRcvbuf">1024*1024/property>
  31.  <property name="frontSocketSoSndbuf">4*1024*1024/property>
  32.  <property name="frontSocketNoDelay">1/property>
  33.  <property name="backSocketSoRcvbuf">4*1024*1024/property>
  34.  <property name="backSocketSoSndbuf">1024*1024/property>
  35.  <property name="backSocketNoDelay">1/property> -->
  36.   
  37.  <!-- mysql 连接相关配置 -->
  38.  <!-- <property name="packetHeaderSize">4</property> 指定mysql协议中的报文头长度,默认4个字节-->
  39.  <!-- <property name="maxPacketSize">1024*1024*16</property> 配置可以携带的数据量最大值,默认16M-->
  40.  <!-- <property name="idleTimeout">1024*1024*16</property> 指定连接的空闲时间超时长度,如果某个连接空闲时间超过该值,则将连接关闭并回收,单位为毫秒,默认值为30分钟-->
  41.  <!-- <property name="txIsolation">3</property> 初始化前端连接事务的隔离级别有:
  42.  READ_UNCOMMITTED=1
  43.  READ_COMMITTED=2
  44.  REPEATED_READ=3
  45.  SERIALIZABLE=4
  46.  默认为3-->
  47.  <!-- <property name="sqlExecuteTimeout">3</property>执行sql超时时间,默认为300秒-->
  48.   
  49.   
  50.  <!-- 心跳属性配置 -->
  51.  <!-- <property name="processorCheckPeriod">1000</property>清理前后端空闲、超时、关闭连接的时间间隔,单位为毫秒,默认为1秒-->
  52.  <!-- <property name="dataNodeIdleCheckPeriod">300*1000</property>对后端连接进行空闲,超时检查的时间间隔,单位为毫秒,默认为300秒-->
  53.  <!-- <property name="dataNodeHeartbeatPeriod">10*1000</property>对后端所有读写库发起心跳的间隔时间,单位为毫秒,默认为10秒-->
  54.   
  55.  <!-- 服务相关属性 -->
  56.  <!-- <property name="bindIp">0.0.0.0</property>mycat服务监听的ip地址,默认为0.0.0.0-->
  57.  <!-- <property name="serverPort">8066</property>定义mycat使用的端口,默认值为8066-->
  58.  <!-- <property name="managerPort">9066</property>定义mycat管理的端口,默认值为9066-->
  59.   
  60.  <!-- 分布式事务开关属性 -->
  61.  <!-- <property name="handleDistributedTransactions">0</property>0为不过滤分布式事务,1过滤分布式事务,2不过滤分布式事务,但是记录分布式事务日志。主要用户是否允许跨库事务。mycat 1.6版本开始,支持此属性-->
  62.   
  63.   
  64.  <!-- <property name="useOffHeapForMerge">1</property>配置是否启用非堆内存跨分片结果集,1为开启,0为关闭,mycat1.6开始支持该属性-->
  65.   
  66.  <!-- 全局表一致性检测 -->
  67.  <property name="useGlobleTableCheck">0</property> <!--通过添加_MYCAT_OP_TIME字段来进行一致性检测,为BIGINT类型 1为开启全加班一致性检测、0为关闭 -->
  68.   
  69.  <property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
  70.   
  71.   
  72.  <!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
  73.  <!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
  74.   
  75.  <!--
  76.  <property name="processors">1</property>
  77.  <property name="processorExecutor">32</property>
  78.  -->
  79.  <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
  80.  <property name="processorBufferPoolType">0</property>
  81.  <!--默认是65535 64K 用于sql解析时最大文本长度 -->
  82.  <!--<property name="maxStringLiteralLength">65535</property>-->
  83.  <!--<property name="processorExecutor">16</property>-->
  84.  <!--
  85.  <property name="serverPort">8066</property> <property name="managerPort">9066</property>
  86.  <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
  87.  <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
  88.  <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
  89.  <property name="handleDistributedTransactions">0</property>
  90.   
  91.  <!--单位为m-->
  92.  <property name="memoryPageSize">1m</property>
  93.   
  94.  <!--单位为k-->
  95.  <property name="spillsFileBufferSize">1k</property>
  96.   
  97.  <property name="useStreamOutput">0</property>
  98.   
  99.  <!--单位为m-->
  100.  <property name="systemReserveMemorySize">384m</property>
  101.   
  102.  <!--是否采用zookeeper协调切换 -->
  103.  <property name="useZKSwitch">true</property>
  104.   
  105.  </system>
  106.   
  107.  <!-- 全局SQL防火墙设置 -->
  108.  <!--
  109.  <firewall>
  110.  <whitehost>
  111.  <host host="127.0.0.1" user="mycat"/>
  112.  <host host="127.0.0.2" user="mycat"/>
  113.  </whitehost>
  114.  <blacklist check="false">
  115.  </blacklist>
  116.  </firewall>
  117.  -->
  118.  <!-- 定义登录mycat对的用户权限 -->
  119.  <user name="root">
  120.  <property name="password">123456</property>
  121.  <!-- 若要访问TESTDB 必须现在server.xml 中定义,否则无法访问TESTDB-->
  122.  <property name="schemas">TESTDB</property>
  123.  <!-- 配置是否允许只读 -->
  124.  <property name="readOnly">true</property>
  125.  <!-- 定义限制前端整体的连接数,如果其值为0,或者不设置,则表示不限制连接数量 -->
  126.  <property name="benchmark">11111</property>
  127.  <!-- 设置是否开启密码加密功能,默认为0不开启加密,为1则表示开启加密 -->
  128.  <property name="usingDecrypt">1</property>
  129.  <!-- 表级 DML 权限设置 -->
  130.  <!--
  131.  <privileges check="false">
  132.  <schema name="TESTDB" dml="0110" >
  133.  <table name="tb01" dml="0000"></table>
  134.  <table name="tb02" dml="1111"></table>
  135.  </schema>
  136.  </privileges>
  137.  -->
  138.  </user>
  139. </mycat:server
posted @ 2023-04-27 10:59  忧伤恋上了快乐  阅读(652)  评论(0编辑  收藏  举报