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

【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://www.xdnf.cn/news/20457.html

相关文章:

  • 从Java全栈到前端框架的全面实战:一次真实面试的深度解析
  • c++ sqlite3库
  • CentOS下Bind服务的安装与故障排查
  • pyAutoGUI 模块主要功能介绍-(1)鼠标功能
  • 从 Excel 趋势线到机器学习:拆解 AI 背后的核心框架​
  • 数位DP -
  • 【明道云】[工作表控件11] 地理位置控件与地图定位应用
  • 用内存顺序实现 三种内存顺序模型
  • 安装es和kibana
  • Linux之Firewalld防火墙实战篇
  • [光学原理与应用-435]:晶体光学 - 晶体的结构-基元/原胞/晶胞/点阵
  • 多次base64编码过滤垃圾字符
  • 讲一下模版特化和偏特化的区别
  • 如何在Kali Linux官网下载历史版本
  • Redis 持久化机制:AOF 日志深度解析
  • Hystrix与Sentinel-熔断限流
  • 创建阿里云ECS实例操作(免费试用版)
  • 【C++】模板和STL
  • Unity的UGUI更改背景以及添加中文字体
  • 【FastDDS】XML profiles
  • AI助力特征工程:智能化数据科学新范式
  • leetcode 912 排序数组
  • 微前端框架性能对比与选型指南:从理论到实践
  • Redis 的三种高效缓存读写策略!
  • 从技术架构、接入路径、应用场景全梳理的智慧地产开源了
  • C++ 并发编程指南 并发设计模式:Actor vs. CSP (生活场景版)
  • [Upscayl图像增强] Electron主进程命令 | 进程间通信IPC
  • Django 项目6:表单与认证系统
  • PostgreSQL与Greenplum数据库的编程语言连接
  • 深入理解 RequestContextHolder、ThreadLocal 与 RequestContextFilter