当前位置: 首页 > news >正文

【MySQL | 高级篇 分片规则与管理监控】

摘要:本文详细介绍 MyCat 的 9 种分片规则(范围、取模等,含配置与适用场景),还阐述 MyCat 原理、管理端口与常用命令,以及 MyCat-eye 的安装、访问、配置和监控功能,助力高效管理分布式数据库。

思维导图

1. 分片规则

1.1 范围分片

1). 介绍

根据指定的字段及其配置的范围数据节点的对应情况,来决定该数据属于哪一个分片。

2). 配置

rule.xml分片规则配置:

<tableRule name="auto-sharding-long"><rule><columns>id</columns><algorithm>rang-long</algorithm></rule>
</tableRule>
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong"><property name="mapFile">autopartition-long.txt</property><property name="defaultNode">0</property>
</function>

分片规则配置属性含义:

在rule.xml中配置分片规则时,关联了一个映射配置文件 autopartition-long.txt,该配置文 件的配置如下:

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

autopartition-long.txt 含义:

0-500 万之间的值,存储在 0 号数据节点 (数据节点的索引从 0 开始);500 万 - 1000 万之间的数据存储在 1 号数据节点;1000 万 - 1500 万的数据节点存储在 2 号节点;

该分片规则,主要是针对于数字类型的字段适用

1.2 取模分片

1). 介绍

根据指定的字段值与节点数量进行求模运算,根据运算结果,来决定该数据属于哪一个分片。

2). 配置

rule.xml分片规则配置:

<tableRule name="mod-long"><rule><columns>id</columns><algorithm>mod-long</algorithm></rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod"><property name="count">3</property>
</function>

分片规则属性说明如下:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
count数据节点的数量

该分片规则,主要是针对于数字类型的字段适用。

1.3 一致性 hash 分片

1). 介绍

所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置,有效的解决了分布式数据的拓容问题

2). 配置

rule.xml分片规则配置:

<tableRule name="mod-long"><rule><columns>id</columns><algorithm>mod-long</algorithm></rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod"><property name="count">3</property>
</function>

分片规则属性含义:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
seed创建 murmur_hash 对象的种子,默认 0
count要分片的数据库节点数量,必须指定,否则没法分片
virtualBucketTimes一个实际的数据库节点被映射为这么多虚拟节点,默认是 160 倍,也就是虚拟节点数是物理节点数的 160 倍;virtualBucketTimes*count 就是虚拟结点数量;
weightMapFile节点的权重,没有指定权重的节点默认是 1。以 properties 文件的格式填写,以从 0 开始到 count-1 的整数值也就是节点索引为 key,以节点权重值为值。所有权重值必须是正整数,否则以 1 代替
bucketMapPath用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的 murmur hash 值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西

1.4 枚举分片

1). 介绍

通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,本规则适用于按照省份、性别、状态拆分数据等业务 。

2). 配置

rule.xml分片规则配置:

<tableRule name="sharding-by-intfile"><rule><columns>sharding_id</columns><algorithm>hash-int</algorithm></rule>
</tableRule>
<!-- 自己增加 tableRule -->
<tableRule name="sharding-by-intfile-enumstatus"><rule><columns>status</columns><algorithm>hash-int</algorithm></rule>
</tableRule>
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap"><property name="defaultNode">2</property><property name="mapFile">partition-hash-int.txt</property>
</function>

分片规则属性含义:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
mapFile对应的外部配置文件
type默认值为 0;0 表示 Integer,1 表示 String
defaultNode默认节点;小于 0 标识不设置默认节点,大于等于 0 代表设置默认节点;默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点;如果没有默认值,碰到不识别的则报错 。

1.5 应用指定算法

1). 介绍

运行阶段由应用自主决定路由到那个分片,直接根据字符子串 (必须是数字) 计算分片号。

2). 配置

rule.xml分片规则配置:

<tableRule name="sharding-by-substring"><rule><columns>id</columns><algorithm>sharding-by-substring</algorithm></rule>
</tableRule>
<function name="sharding-by-substring" 
class="io.mycat.route.function.PartitionDirectBySubString"><property name="startIndex">0</property> <!-- zero-based --><property name="size">2</property><property name="partitionCount">3</property><property name="defaultPartition">0</property>
</function>

分片规则属性含义:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
startIndex字符子串起始索引
size字符长度
partitionCount分区 (分片) 数量
defaultPartition默认分片 (在分片数量定义时,字符标示的分片编号不在分片数量内时,使用默认分片)

示例说明:

id=05-100000002,在此配置中代表根据 id 中从 startIndex=0 开始,截取 size=2 位数字即 05,05 就是获取的分区,如果没找到对应的分片则默认分配到 defaultPartition

1.6 固定分片 hash 算法

1). 介绍

该算法类似于十进制的求模运算,但是为二进制的操作

  • 分片字段必须为数字类型。

  • 可以均匀分配,也可以非均匀分配。

  • 如果是求模,连续的值,分别分配到各个不同的分片;但是此算法会将连续的值可能分配到相同的分片,降低事务处理的难度。

2). 配置

rule.xml分片规则配置:

<tableRule name="sharding-by-long-hash"><rule><columns>id</columns><algorithm>sharding-by-long-hash</algorithm></rule>
</tableRule>
<!-- 分片总长度为1024,count与length数组长度必须一致; -->
<function name="sharding-by-long-hash" 
class="io.mycat.route.function.PartitionByLong"><property name="partitionCount">2,1</property><property name="partitionLength">256,512</property>
</function>

分片规则属性含义:

属性描述
columns标识将要分片的表字段名
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
partitionCount分片个数列表
partitionLength分片范围列表

1.7 字符串 hash 解析算法

1). 介绍

截取字符串中的指定位置的子字符串进行 hash 算法,算出分片。

2). 配置

rule.xml分片规则配置:

<tableRule name="sharding-by-stringhash"><rule><columns>name</columns><algorithm>sharding-by-stringhash</algorithm></rule>
</tableRule>
<function name="sharding-by-stringhash" 
class="io.mycat.route.function.PartitionByString"><property name="partitionLength">512</property> <!-- zero-based --><property name="partitionCount">2</property><property name="hashSlice">0:2</property>
</function>

分片规则属性含义:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
partitionLengthhash 求模基数;length*count=1024 (出于性能考虑)
partitionCount分区数
hashSlicehash 运算位,根据子字符串的 hash 运算;0 代表 str.length (),-1 代表 str.length ()-1,大于 0 只代表数字自身;可以理解为 substring ( start , end ),start 为 0 则只表示 0

1.8 按天分片算法

1). 介绍

按照日期及对应的时间周期来分片。

2). 配置

rule.xml分片规则配置:

<tableRule name="sharding-by-date"><rule><columns>create_time</columns><algorithm>sharding-by-date</algorithm></rule>
</tableRule>
<function name="sharding-by-date" 
class="io.mycat.route.function.PartitionByDate"><property name="dateFormat">yyyy-MM-dd</property><property name="sBeginDate">2022-01-01</property><property name="sEndDate">2022-01-30</property><property name="sPartionDay">10</property>
</function>
<!--从开始时间开始,每10天为一个分片,到达结束时间之后,会重复开始分片插入配置表的 dataNode 的分片,必须和分片规则数量一致,例如 2022-01-01 到 2022-12-31 ,每
10天一个分片,一共需要37个分片。-->

分片规则属性含义:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
dateFormat日期格式
sBeginDate开始日期
sEndDate结束日期,如果配置了结束日期,则代码数据到达了这个日期的分片后,会重复从开始分片插入
sPartionDay分区天数,默认值 10,从开始日期算起,每个 10 天一个分区

1.9 自然月分片

1). 介绍

使用场景为按照月份来分片, 每个自然月为一个分片。

2). 配置

rule.xml分片规则配置:

<tableRule name="sharding-by-month"><rule><columns>create_time</columns><algorithm>partbymonth</algorithm></rule>
</tableRule><function name="partbymonth" class="io.mycat.route.function.PartitionByMonth"><property name="dateFormat">yyyy-MM-dd</property><property name="sBeginDate">2022-01-01</property><property name="sEndDate">2022-03-31</property>
</function>
<!-- 从开始时间开始,一个月为一个分片,到达结束时间之后,会重复开始分片插入配置表的 dataNode 的分片,必须和分片规则数量一致,例如 2022-01-01 到 2022-12-31 ,一
共需要12个分片。
-->

分片规则属性含义:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与 function 的对应关系
class指定该分片算法对应的类
dateFormat日期格式
sBeginDate开始日期
sEndDate结束日期,如果配置了结束日期,则代码数据到达了这个日期的分片后,会重复从开始分片插入

2 MyCat 管理及监控

2.1 MyCat 原理

在 MyCat 中,当执行一条 SQL 语句时,MyCat 需要进行 SQL 解析、分片分析、路由分析、读写分离分析等操作,最终经过一系列的分析决定将当前的 SQL 语句到底路由到那几个(或哪个)节点数据库,数据库将数据执行完毕后,如果有返回的结果,则将结果返回给 MyCat,最终还需要在 MyCat 中进行结果合并、聚合处理、排序处理、分页处理等操作,最终再将结果返回客户端。

而在 MyCat 的使用过程中,MyCat 官方也提供了一个管理监控平台 MyCat-Web(MyCat-eye)。Mycat-web 是 Mycat 可视化运维的管理和监控平台,弥补了 Mycat 在监控上的空白。帮 Mycat 分担统计任务和配置管理任务。Mycat-web 引入了 ZooKeeper 作为配置中心,可以管理多个节点。Mycat-web 主要管理和监控 Mycat 的流量、连接、活动线程和内存等,具备 IP 白名单、邮件告警等模块,还可以统计 SQL 并分析慢 SQL 和高频 SQL 等,为优化 SQL 提供依据。

2.2 MyCat 管理

Mycat 默认开通 2 个端口,可以在 server.xml 中进行修改:

  • 8066:数据访问端口,即进行 DML 和 DDL 操作;

  • 9066:数据库管理端口,即 mycat 服务管理控制功能,用于管理 mycat 的整个集群状态。

连接 MyCat 的管理控制台

执行如下指令连接:

mysql -h 192.168.200.210 -p 9066 -uroot -p123456

常用管理命令

命令含义
show @@help查看 Mycat 管理工具帮助文档
show @@version查看 Mycat 的版本
reload @@config重新加载 Mycat 的配置文件
show @@datasource查看 Mycat 的数据源信息
show @@datanode查看 MyCat 现有的分片节点信息
show @@threadpool查看 Mycat 的线程池信息
show @@sql查看执行的 SQL
show @@sql.sum查看执行的 SQL 统计

2.3 MyCat-eye

2.3.1 介绍

Mycat-web(Mycat-eye)是对 mycat-server 提供监控服务,功能不局限于对 mycat-server 使用。它通过 JDBC 连接对 Mycat、Mysql 监控,监控远程服务器(目前仅限于 linux 系统)的 cpu、内存、网络、磁盘。Mycat-eye 运行过程中需要依赖 zookeeper,因此需要先安装 zookeeper。

2.3.2 安装

1. zookeeper 安装;

2. Mycat-eye 安装。

具体的安装步骤省略。

2.3.3 访问

在浏览器中输入如下地址访问 Mycat-eye 管理界面:

http://192.168.200.210:8082/mycat

3.6.3.4 配置

1. 开启MyCat的实时统计功能(server.xml)

<property name="useSqlStat">1</property> <!-- 1为开启实时统计、0为关闭 -->

在 Mycat 监控界面配置服务地址

2.3.5 测试

配置好之后,通过 MyCat 执行一系列增删改查操作,等待一段时间后,打开 mycat-eye 的管理界面,可查看以下监控数据:

1.性能监控:包括 Mycat 流量分析、连接分析、活动线程分析、缓冲队列分析、TPS 分析等。

2.物理节点:查看 Mycat 关联的各个数据库物理节点的状态信息,包括最后活动时间等。

3.SQL 统计:统计指定时间段内Mycat 执行的 SQL 情况,包括 SQL 执行时间分布、读次数等。

4.SQL 表分析:查看不同表(如 tb_app、tb_datepart、tb_longhash 等)的 SQL 操作情况。

5.SQL 监控:展示具体 SQL 语句的执行详情,包括 SQL 内容、耗时(ms)、执行时间等。

6.高频 SQL:统计指定时间段内执行频率较高的 SQL,包括 SQL 内容、平均耗时、最大耗时等。


大功告成!


文章转载自:

http://yUFk7TZa.fkxkk.cn
http://bvMk9jJB.fkxkk.cn
http://hzkj0iTf.fkxkk.cn
http://zPXpOb0P.fkxkk.cn
http://y7TgB2Q3.fkxkk.cn
http://mLcgL0nF.fkxkk.cn
http://LEGWP0K6.fkxkk.cn
http://VxUuoHN7.fkxkk.cn
http://If7BIVWv.fkxkk.cn
http://LbbWBxyE.fkxkk.cn
http://uGZ6uHx9.fkxkk.cn
http://kPeCCXEU.fkxkk.cn
http://DE7hprhE.fkxkk.cn
http://zxaEAabW.fkxkk.cn
http://GNEejvj2.fkxkk.cn
http://W0Kg4Xfm.fkxkk.cn
http://w1WzlBvE.fkxkk.cn
http://yOfGnIJs.fkxkk.cn
http://ShxkOaZU.fkxkk.cn
http://pEvOKANn.fkxkk.cn
http://HUSfDVMX.fkxkk.cn
http://2HTKOL1R.fkxkk.cn
http://QFPrmErU.fkxkk.cn
http://7TRBcp96.fkxkk.cn
http://8tRuh9Lx.fkxkk.cn
http://V8l97Kzk.fkxkk.cn
http://TzAPYDW7.fkxkk.cn
http://tiheBEly.fkxkk.cn
http://IDh61DPS.fkxkk.cn
http://Jn1TPXNO.fkxkk.cn
http://www.dtcms.com/a/370338.html

相关文章:

  • 小杰机器学习(two)——导数、损失函数、斜率极值最值、微分规则、切平面与偏导数、梯度。
  • MATLAB R2025a安装配置及使用教程(超详细保姆级教程)
  • Linux/UNIX系统编程手册笔记:POSIX
  • 8.FC平台模块梳理
  • 对接gemini-2.5-flash-image-preview教程
  • ModelScope概述与实战
  • 【Bluedroid】A2dp Source播放流程源码分析(7):蓝牙音频流启动流程深度解析(btif_av_stream_start)
  • Docker 本地开发环境搭建(MySQL5.7 + Redis7 + Nginx + 达梦8)- Windows11 版 2.0
  • phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2014-8959)
  • MathJax - LaTeX:WordPress 公式精准呈现方案
  • 深入剖析Spring Boot自动配置原理
  • 用Android studio运行海外极光推送engagelab安卓的SDK打apk安装包
  • 记录一下k佬 lvgl micropython的sdcard初始化问题
  • Nmap使用手册
  • HTB devvortex
  • FakeYou:语音克隆/个性化语音生成工具
  • 木棉EZ100-Pro 15.5G矿机参数解析:Etchash算法与高效能耗
  • OpenAI新论文:Why Language Models Hallucinate
  • Compose笔记(四十九)--SwipeToDismiss
  • Coze源码分析-资源库-删除插件-前端源码-核心组件实现
  • 主流的开源协议(MIT,Apache,GPL v2/v3)
  • 计算机原理(二)
  • 算法题(200):最大子段和(动态规划)
  • vue3图标终极方案【npm包推荐】vue3-icon-sui(含源码详解)
  • 当小智 AI 遇上数字人,我用 WebRTC 打造实时音视频应用
  • 后端(JDBC)学习笔记(CLASS 1):基础篇(一)
  • 3分钟快速入门WebSocket
  • ElasticSearch 基础内容深度解析
  • 行为式验证码技术解析:滑块拼图、语序选词与智能无感知
  • CAN总线学习