MyCat Sharding配置

简介: 前言: MyCat支持大概有20多种分片规则,除了常规的按RANGE、LIST、HASH、DATETIME分片之外,还首创了E-R分片规则,也支持用户自定义分片规则。在Sharing的支持上算是比较全面了。

前言:

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. taiwan=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
相关文章
|
8月前
|
SQL Cloud Native API
NSDI'24 | 阿里云飞天洛神云网络论文解读——《Poseidon》揭秘新型超高性能云网络控制器
NSDI‘24于4月16-18日在美国加州圣塔克拉拉市举办,汇聚全球网络系统领域的专家。阿里云飞天洛神云网络的两篇论文入选,标志着其创新能力获广泛认可。其中,《Poseidon: A Consolidated Virtual Network Controller that Manages Millions of Tenants via Config Tree》介绍了波塞冬平台,该平台通过统一控制器架构、高性能配置计算引擎等技术,实现了对超大规模租户和设备的高效管理,显著提升了云网络性能与弹性。实验结果显示,波塞冬在启用EIP时的完成时间比Top 5厂商分别快1.8至55倍和2.6至4.8倍。
945 146
|
关系型数据库 MySQL Linux
Centos7 yum如何下载离线安装包?(详解)
相信大家也遇到过这种问题,在没有外网的情况下,想安装一个服务却安装不了,这期我就教大家如何如何下载离线安装包,在内网中使用;
2489 0
Centos7 yum如何下载离线安装包?(详解)
|
Ubuntu Linux 应用服务中间件
在Linux中,如何管理服务的自启动?
在Linux中,如何管理服务的自启动?
|
11月前
|
Kubernetes 调度 算法框架/工具
NVIDIA Triton系列02-功能与架构简介
本文介绍了NVIDIA Triton推理服务器的功能与架构,强调其不仅适用于大型服务类应用,还能广泛应用于各类推理场景。Triton支持多种模型格式、查询类型和部署方式,具备高效的模型管理和优化能力,确保高性能和系统稳定性。文章详细解析了Triton的主从架构,包括模型仓库、客户端应用、通信协议和推理服务器的核心功能模块。
478 1
NVIDIA Triton系列02-功能与架构简介
|
11月前
|
运维 供应链 安全
SD-WAN分布式组网:构建高效、灵活的企业网络架构
本文介绍了SD-WAN(软件定义广域网)在企业分布式组网中的应用,强调其智能化流量管理、简化的网络部署、弹性扩展能力和增强的安全性等核心优势,以及在跨国企业、多云环境、零售连锁和制造业中的典型应用场景。通过合理设计网络架构、选择合适的网络连接类型、优化应用流量优先级和定期评估网络性能等最佳实践,SD-WAN助力企业实现高效、稳定的业务连接,加速数字化转型。
SD-WAN分布式组网:构建高效、灵活的企业网络架构
|
消息中间件 缓存 负载均衡
秒杀系统优化:用解耦提升系统性能的秘诀!
大家好,我是小米,一个热爱分享技术经验的29岁程序员。本文主要探讨了解耦的概念及其在秒杀系统中的应用,特别是如何通过解耦提升系统的扩展性和容错能力。文中对比了HTTP/RPC同步调用和消息队列两种方式,分析了各自的优缺点及适用场景,帮助大家更好地选择合适的解耦方案。希望本文能让大家对解耦有更深入的理解。
203 8
秒杀系统优化:用解耦提升系统性能的秘诀!
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
3808 0
|
12月前
|
缓存 关系型数据库 MySQL
MySQL数据库优化:提升性能和扩展性的关键技巧
MySQL数据库优化:提升性能和扩展性的关键技巧
363 2
|
12月前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
138 3
|
SQL 缓存 关系型数据库
【Mycat】mycat综述(附安装配置)
【Mycat】mycat综述(附安装配置)
918 0