本文共 6004 字,大约阅读时间需要 20 分钟。
MyCAT核心配置详解
###server.xml文件,几乎保存了所有mycat需要的系统配置(属性)信息,和用户信息和防火墙信息。###1.system标签(系统属性配置信息)- charset属性:字符集设置(默认utf8),如果配置特殊字符集请使用index_to_charset.peoperties中配置。- defalutSqlParser属性:指定mycat的sql解析器- processors属性:指定系统可用线程数,默认为机器的核心线程数。- processorBufferChunk属性:指定每次分配Scoket Direct Buffer的大小。默认是4096字节- processorBufferPool属性:设置bufferPool缓冲池大小- ....其他一系列属性###2.user标签name:指定mycat用户名password:指定mycat密码schemas:执行该用户的逻辑库,可以配置多个。readOnly:是否是只读用户benchmark:连接服务降级处理usingDecrypt是否对密码进行加密。###3.user标签的子节点privileges节点此节点是:对该用户的schema及下级的table进行精细化的DML权限控制,privileges节点中check属性用于标识是否开启DML权限检查,默认false不开启权限检查。可以配置多个privliges对应schemas中定义的逻辑库。dml上属性描述参数 | 说明 | 示例(禁止增删该查) ------- | ------- | ------- dml | insert,update,select,delete | 0000 配置示例:###3.mycat防火墙配置示例:白名单和 SQL 黑名单说明 111111 TESTDB,TESTDB1
ip 白名单 用户对应的可以访问的 ip 地址 false sql黑名单允许的 权限 后面为默认
log4j2.xml中定义了,日志的输出级别及日志文件的输出格式。是日志的级别,生成环境下建议将级别调整为 info/ware,如果是研究测试,特别是碰到异常可以通过开启debug 模式观察日志的信息查找异常原因。logs文件夹中的warpper日志:mycat启动过程的日志信息,通过查看此文件查看mycat启动失败原因。
rule.xml里面定义了我们对表进行查分所涉及的规则定义。我们可以对表进行灵活的分片算法示例:name:指定唯一规则名称,用于标识不同的表规则。rule:指定对物理表中的那一列进行拆分和使用什么路由算法。columns:指定要拆分的列名称algorithm:连接表规则和具体的路由方法,多个表可以使用同一个路由算法。 id func1 name:指定算法名称class::指定路由算法具体类的名字property:执行具体算法需要用到的一些属性。 partition-hash-int.txt
###1.枚举分片:通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如需要按照省份或区县来做保存,而全国省份区县是固定的,这类业务的配置规则如下user_id hash-int partition-hash-int.txt 配置:10000=012110010=1DEFAULT_NODE=1###2.固定hash分片算法本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取 id 的二进制低 10 位,即 id 二进制&1111111111。此算法的优点在于如果按照 10 进制取模运算,在连续插入 1-10 时候 1-10 会被分到 1-10 个分片,增大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。###3.范围约定分片算法此分片适用于,提前规划好分片字段某个范围属于哪个分片,###4.取模分片算法此规则为对分片字段求摸运算。###5.按日期(天)分片此规则为按天分片。###6.取模范围约束分片算法此种规则是取模运算与范围约束的结合,主要为了后续数据迁移做准备,即可以自主决定取模后数据的节点分布。###7.截取数字做 hash 求模范围约束分片算法###8.应用指定分片算法:此规则是在运行阶段有应用自主决定路由到那个分片。###9.截取数字 hash 解析分片算法:此规则是截取字符串中的 int 数值 hash 分片。###10.一致性 hash:###11.按单月小时拆分:此规则是单月内按照小时拆分,最小粒度是小时,可以一天最多 24 个分片,最少 1 个分片,一个月完后下月从头开始循环。每个月月尾,需要手工清理数据。###12.范围求模分片:先进行范围分片计算出分片组,组内再求模优点可以避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题综合了范围分片和求模分片的优点,分片组内使用求模可以保证组内数据比较均匀,分片组之间是范围分片可以兼顾范围查询。最好事先规划好分片的数量,数据扩容时按分片组扩容,则原有分片组的数据不需要迁移。由于分片组内数据比较均匀,所以分片组内可以避免热点数据问题。###13.日期范围 hash 分片###14.冷热数据分片:根据日期查询日志数据 冷热数据分布 ,最近 n 个月的到实时交易库查询,超过 n 个月的按照 m 天分片。###15.自然月分片:按月份列分区 ,每个自然月一个分片,格式 between 操作解析的范例。 partition-hash-int.txt 0 0
##注意:
mycat全局表配置mycaER 分片表配置
schema.xml主要配置了,mycat的逻辑库,逻辑表,分片规则,dataNode以及dataSource属性。
参数说明查看官方说明文档
table 标签的相关属性:
name 属性:定义逻辑表的表名,这个名字就如同我在数据库中执行 create table 命令指定的名字一样,同个 schema 标签中定义的名字必须唯一。dataNode 属性:定义这个逻辑表所属的 dataNode, 该属性的值需要和 dataNode 标签中 name 属性的值相互对应。rule 属性:该属性用于指定逻辑表要使用的规则名字,规则名字在 rule.xml 中定义,必须与 tableRule 标签中 name 属性属性值一一对应。ruleRequired 属性:该属性用于指定表是否绑定分片规则,如果配置为 true,但没有配置具体 rule 的话 ,程序会报错。primaryKey 属性:该逻辑表对应真实表的主键,例如:分片的规则是使用非主键进行分片的,那么在使用主键查询的时候,就会发送查询语句到所有配置的 DN 上,如果使用该属性配置真实表的主键。难么 MyCat 会缓存主键与具体 DN 的信息,那么再次使用非主键进行查询的时候就不会进行广播式的查询,就会直接发送语句给具体的 DN,但是尽管配置该属性,如果缓存并没有命中的话,还是会发送语句给具体的 DN,来获得数据。type 属性:该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和”普通表”两种类型。autoIncrement 属性:。。。。。。。。。subTables:使用方式添加 subTables="t_order$1-2,t_order3"。目前分表 1.6 以后开始支持 并且 dataNode 在分表条件下只能配置一个,分表条件下不支持各种条件的join 语句。needAddLimit 属性:指定表是否需要自动的在每个语句后面加上 limit 限制。由于使用了分库分表,数据量有时会特别巨大。这时候执行查询语句,如果恰巧又忘记了加上数量限制的话。那么查询所有的数据出来,也够等上一小会儿的。所以,mycat 就自动的为我们加上 LIMIT 100。当然,如果语句中有 limit,就不会在次添加了。dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。
dataNode 标签的相关属性:
name 属性:定义数据节点的名字,这个名字需要是唯一的,我们需要在 table 标签上应用这个名字,来建立表与分片对应的关系。dataHost 属性:该属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性database 属性:该属性用于定义该分片属性哪个具体数据库实例上的具体库,因为这里使用两个纬度来定义分片,就是:实例+具体的库。因为每个库上建立的表和表结构是一样的。所以这样做就可以轻松的对表进行水平拆分。作为 Schema.xml 中最后的一个标签,该标签在 mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。select user()
dataHost 标签的相关属性
name 属性:唯一标识 dataHost 标签,供上层的标签使用。maxCon 属性:指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的 writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数。minCon 属性:指定每个读写实例连接池的最小连接,初始化连接池的大小。balance 属性:负载均衡类型,目前的取值有 3 种:1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双 主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载 均衡。 3. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。 4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压 力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有
writeType 属性:负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties . 2. writeType="1",所有写操作都随机的发 送到配置的 writeHost,1.5 以后废弃不推荐。switchType 属 性 - -1 表示不自动切换。 - 1 默认值,自动切换。 - 2 基于 MySQL 主从同步的状态决定是否切换。
dbType 属性:指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。
dbDriver 属性:指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。switchType 属性:-1 表示不自动切换1 默认值,自动切换 2 基于 MySQL 主从同步的状态决定是否切换 心跳语句为 show slave status 3 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1) 心跳语句为 show status like ‘wsrep%’
tempReadHostAvailable 属性:如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。
转载地址:http://fgbeo.baihongyu.com/