MyCat Sharding配置

前言:

MyCat支持大概有20多种分片规则,除了常规的按RANGE、LIST、HASH、DATETIME分片之外,还首创了E-R分片规则,也支持用户自定义分片规则。在Sharing的支持上算是比较全面了。下面我们就以LIST和DATETIME分区为例,来看下如何快速部署分区表。

Sharding关键点:

需要配置的文件有schema.xml, rule.xml, 和rule.xml中function部分指定的txt文件(mapfile)。
使用rule.xml中的拆分规则时,请复制和部分后重新命名。因为规则虽然相同,但是每个Sharding表的拆分会有区别,无法使用同一套mapfile。
拆分规则设置没问题的话,reload @@config就可以成功加载。如果设置不对,重启MyCat会无法启动。
因为一些细节在官方文档中并未详细描述,请在测试环境测试好之后,再搬到线上应用。

Sharding过程:

1.先确定所要使用的Sharding规则

在rule.xml中复制和部分,重新命名。
不要把同一个规则的和放到一起,MyCat会无法读取。

2.配置rule.xml

rule.xml示例:

点击(此处)折叠或打开

  1.        
  2.         tableRule name="sharding-by-nation">
  3.                 rule>
  4.                         columns>nation/columns>
  5.                         algorithm>nation-int/algorithm>
  6.                 /rule>
  7.         /tableRule>

  8.        
  9.         tableRule name="sharding-by-date">
  10.                 rule>
  11.                         columns>create_time/columns>
  12.                         algorithm>partbydate/algorithm>
  13.                 /rule>
  14.         /tableRule>

  15.         function name="nation-int"
  16.                 class="io.mycat.route.function.PartitionByFileMap">
  17.                 property name="mapFile">partition-nation-int.txt/property>
  18.                 property name="type">1/property>
  19.                 property name="defaultNode">0/property>
  20.         /function>

  21.         function name="partbydate"
  22.                 class="io.mycat.route.function.PartitionByDate">
  23.                 property name="dateFormat">yyyy-MM-dd/property>
  24.                 property name="sBeginDate">2017-01-01/property>
  25.                 property name="sEndDate">2017-01-05/property>
  26.                 property name="sPartionDay">1/property>
  27.         /function>

先配置tableRule,以枚举分片为例:
sharding-by-nation是规则名,在schema.xml中会用到。
columns中即是分片的列。
algorithm是我们调用的分片function。

再配置function:
nation-int的命名要和tableRule相对应,否则tableRule就无法调用相关的分片算法。
class即是调用的分片算法的类。
property是根据算法的要求,指定的Sharding规则,每个算法的规则都不相同,这部分的定义要参考官方文档和源代码。

使用枚举值进行拆分:
需要定义一个mapfile。
type的默认值是0,0表示Integer,非零表示String。
defaultNode指默认节点,小于0表示不设置默认节点,大于或等于0表示设置默认节点。从0开始,数字即为默认值写入的节点。
默认节点的作用就是在枚举分片时,如果碰到mapfile中未定义的枚举值,就路由到默认节点。如果不配置默认节点的话,碰到不识别的枚举值会报这个错误:Like this: can't find datanode for sharding column:column_name val:ffffffff

对datetime值进行拆分:
dateFormat指日期格式。
sBeginDate为开始日期。
sEndDate为结束日期。如果配置了sEndDate,则数据达到这个日期之后,后面的日期会在sBeginDate和sEndDate中循环插入。
sPartionDay为分区天数。如果不设置,默认从开始日期计算,每10天一个分区。
配置时要注意开始日期和结束日期之间的分区数量,要和schema.xml中的datenode数量相匹配。否则会抛出datanode不够的错误。
例如sBeginDate为‘‘2017-01-01’’,sEndDate为“2017-12-31”,sPartionDay为1,那么我们就需要365个datanode。

3.配置mapfile

mapfile示例:partition-nation-int.txt

点击(此处)折叠或打开

  1. singapore=0
  2. thailand=1
  3. malaysia=2
  4. *=3
  5. indonesia=4
mapfile中的字符是无需加单引号或双引号的,但是区分大小写。
0-4即是第n个节点。

4.配置schema.xml

schema.xml示例:

点击(此处)折叠或打开

  1.         schema name="xxx" checkSQLschema="false">

  2.                 table name="for_test" dataNode="dn3,dn4,dn5,dn6,dn7" rule="sharding-by-nation" />
  3.                 table name="datetime_test" dataNode="dn3,dn4,dn5,dn6,dn7" rule="sharding-by-date" />

  4.         /schema>


  5.         dataNode name="dn3" dataHost="master_server" database="db0" />
  6.         dataNode name="dn4" dataHost="master_server" database="db1" />
  7.         dataNode name="dn5" dataHost="master_server" database="db2" />
  8.         dataNode name="dn6" dataHost="master_server" database="db3" />
  9.         dataNode name="dn7" dataHost="master_server" database="db4" />


  10.         dataHost name="master_server" maxCon="1000" minCon="10" balance="0"
  11.                           writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
  12.                 heartbeat>show slave status/heartbeat>
  13.                 !-- can have multi write hosts -->
  14.                 writeHost host="hostM1" url="vip:6606" user="xxx" password="xxx" />
  15.         /dataHost>
schema.xml中定义好分片的rule和相应的datanode即可。

5.装载定义好的规则,并进行测试

点击(此处)折叠或打开

  1. root
上一篇:MyCat全局序列号配置


下一篇:mysql监控项整理