MyCat关键配置说明
来源:互联网 发布:淘宝店铺营销技巧 编辑:程序博客网 时间:2024/06/05 15:16
一、 引言
Mycat作为现在最流行的分布式数据库中间件,已经在很多的生产项目中实施,随着时间的推移会有更多的生产项目中会用到Mycat。
本文主要是介绍MyCat主要配置文件,以及笔者对这些配置的一些理解。
二、 前言
本文主要分析的有server.xml,schema.xml,rule.xml三个最常用的文件。
三、 Server.xml
Server.xml保存了mycat需要的所有的系统配置信息,代码映射为SystemConfig类。
标签主要有四个:
system,user,firewarll,cluster.
接下来对四个标签进行说明
1. user标签
内容: <user name="test">
说明用户名是test。
子标签:
property,privileges.
1) property标签
内容:
<property name="password">test</property>
用户密码是test <property name="schemas">db1, db2</property>
可访问的schema有db1,db2 <property name="readOnly">true</property>
是否只读 <property name="benchmark">11111</property>
连接上限,降级权值。 <property name="usingDecrypt">1</property>
是否开启加密。2) privileges标签
对用户的 schema以及表进行精细化的DML权限控制。
<privileges check="false">
check表示是否开启DML权限检查。默认是关闭。
server.dtd文件中 <!ELEMENT privileges (schema)*>
说明可以有多个schema的配置。
dml顺序说明:
insert,update,select,delete
<schema name="db1" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table></schema>
db1的权限是update,select。
tb01的权限是啥都不能干。
tb02的权限是insert,update,select,delete。
其他表默认是udpate,select。
2. system标签
这个标签内嵌套的所有 property 标签都与系统配置有关。
<property name="charset">utf8</property>
字符集
<property name="processors">1</property>
处理线程数量,默认是cpu数量。
<property name="processorBufferChunk">4096</property>
每次读取留的数量,默认4096。
<property name="processorBufferPool">409600</property>
创建共享buffer需要占用的总空间大小。processorBufferChunk*processors*100。
<property name="processorBufferPoolType">0</property>
默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。
<property name="processorBufferLocalPercent">100</property>
二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。
<property name="sequnceHandlerType">100</property>
全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。
<property name="useCompression">1</property>
是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。
<property name="packetHeaderSize">4</property>
指定 Mysql 协议中的报文头长度。默认 4。
<property name="maxPacketSize">16M</property>
指定 Mysql 协议可以携带的数据最大长度。默认 16M。
<property name="idleTimeout">1800000</property>
指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。
<property name="txIsolation">3</property>
前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
<property name="sqlExecuteTimeout">300</property>
SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。
<property name="processorCheckPeriod">1000</property>
清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单
位毫秒。
<property name="dataNodeIdleCheckPeriod">300000</property>
对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
<property name="dataNodeHeartbeatPeriod">10000</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="fakeMySQLVersion">5.6</property>
mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6,5.7 版本,其他版本可能会有问题。
<property name="useSqlStat">0</property>
是否开启实时统计。1为开启;0为关闭 。
<property name="useGlobleTableCheck">0</property>
是否开启全局表一致性检测。1为开启;0为关闭 。
<property name="handleDistributedTransactions">0</property>
分布式事务开关。0为不过滤分布式事务;1为过滤分布式事务;2 为不过滤分布式事务,但是记录分布式事务日志。
<property name="maxStringLiteralLength">65535</property>
默认是65535。 64K 用于sql解析时最大文本长度
以上举例的属性仅仅是一部分,可以配置的变量很多,具体可以查看SystemConfig这个类的属性内容。
System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。
3. Firewall标签
顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问
<firewall> <whitehost> <host host="127.0.0.1" user="mycat"/> <host host="127.0.0.2" user="mycat"/> </whitehost> <blacklist check="false"> </blacklist></firewall>
设置很简单,很容易理解,只要设置了白名单,表示开启了防火墙,只有白名单的连接才可以进行连接。
4. Cluster标签
待完善。
四、 Schema.xml
这个文件是MyCat最重要的配置文件,负责管理库,表,分片规则,DataNode ,DataSource。因此这个配置是需要很清楚各部分的含义的。
schema.dtd
<!ELEMENT mycat:schema (schema*,dataNode*,dataHost*)>
可以看到包含的标签有:
Schema、dataNode、dataHost。
接下来将对每个标签逐一的进行详解。
1. Schema标签
<schema name="db1" checkSQLschema="false" sqlMaxLimit="100"></schema>
schema 标签用于定义 MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用 schema 标签来划分这些不同的逻辑库。
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"></schema><schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100"></schema>
如上所示的配置就配置了两个不同的逻辑库,逻辑库的概念和 MYSQL 数据库中 Database 的概念相同,我们在查询这两个不同的逻辑库中表的时候需要切换到该逻辑库下才可以查询到所需要的表。
checkSQLschema这个属性默认就是false,官方文档的意思就是是否去掉表前面的数据库的名称,”select * from db1.testtable” ,设置为true就会去掉db1。但是如果db1的名称不是schema的名称,那么也不会被去掉,因此官方建议不要使用这种语法。同时默认设置为false。
sqlMaxLimit当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行”select * from test_table”,则效果为“selelct * from test_table limit 100”.
注意:如果运行的 schema 为非拆分库的,那么该属性不会生效。
1) Table标签
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" ></table>
Table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。
table 标签的相关属性:
2) childTable标签
<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile"> <childTable name="c_a" primaryKey="ID" joinKey="customer_id" parentKey="id" /></table>
childTable 标签用于定义 E-R 分片的子表。通过标签上的属性与父表进行关联。
属性说明:
2. dataNode标签
dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。
<dataNode name="dNode1" dataHost="dHost128" database="db1" ></dataNode>
例子中所表述的意思为:使用名字为 dHost128数据库实例上的 db1 物理数据库,这就组成一个数据分片,最后,我们使用名字 dNode1标识这个分片。
dataNode 标签的相关属性:
3. dataHost标签
该标签定义了具体的数据库实例、读写分离配置和心跳语句。
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="localhost:3306" user="root" password="123456"></writeHost></dataHost>
dataHost 标签的相关属性:
1) heartbeat 标签
这个标签内指明用于和后端数据库进行心跳检查的语句。
例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
2) writeHost /readHost 标签
这两个标签都指定后端数据库的相关配置,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例。
在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机,系统会自动的检测到,并切换到备用的 writeHost 上去。这两个标签的属性相同,这里就一起介绍。
五、 Rule.xml
rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。
包含的标签 tableRule 和 function。
1. tableRule 标签
这个标签定义表规则。
定义的表规则,在 schema.xml:
<tableRule name="rule1"> <rule> <columns>id</columns> <algorithm>func1</algorithm> </rule></tableRule>
name 属性指定唯一的名字,用于标识不同的表规则。
内嵌的 rule 标签则指定对物理表中的哪一列进行拆分和使用什么路由算法。
columns 内指定要拆分的列名字。
algorithm 使用 function 标签中的 name 属性。连接表规则和具体路由算法。当然,多个表规则可以连接到
同一个路由算法上。table 标签内使用。让逻辑表使用这个规则进行分片。
2. function 标签
<function name="hash-int" class="org.opencloudb.route.function.PartitionByFileMap"> <property name="mapFile">partition-hash-int.txt</property></function>
name 指定算法的名字。
class 制定路由算法具体的类名字。
property 为具体算法需要用到的一些属性。
六、 后记
至此,MyCat三个主要的配置文件的说明已经完成,过程中参考了一些文章,在此不进行一一列举,同时参考了MyCat的源代码,以及官方文档。
- MyCat关键配置说明
- Mycat 配置
- FastDFS关键配置说明,包括文件同步和安全设置。
- mycat简单介绍以及安装和配置说明(mysql集群为例)
- mycat 分库配置(mybatis连接mycat)
- mycat介绍02-mycat高可用配置
- mycat读写分离配置
- MyCat简易配置
- mycat的安装配置
- mycat读写分离配置
- Windows配置mycat
- MyCat介绍与配置
- Windows配置mycat
- mycat安装&配置 学习
- Mycat 配置详解
- Mycat配置读写分离
- Mycat 安装和配置
- Centos 关键参数说明
- 关于composer和yii安装的问题
- LZOI-二分图判断例题
- 2.使用DShow进行摄像头预览
- 图文并茂!8 张 Gif 图学会 Flexbox
- XZ安装方法
- MyCat关键配置说明
- Macx mysql5.7安装
- 各排序算法链接
- react 单元测试入门
- 操作系统原理:页式存储管理
- linux一些网络命令
- echarts3 地图只显示南沙群岛
- 解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题(转)
- 【推荐】Bootstrap相关优质项目