写点什么

TiDB 数据冷热存储分离测试

  • 2022 年 10 月 07 日
    北京
  • 本文字数:3087 字

    阅读完需:约 10 分钟

作者: h5n1 原文来源:https://tidb.net/blog/45a5b07e


1     前言

       随着业务的发展累积的历史数据越来越多,对于常用业务范围外的历史数据查询很少 ,有些历史数据可以通过归档到其他数据库方式进行解决,在不改造现有业务的前提下,维护人员可通过查询归档库解决。但是对于有些历史数据可能业务使用很少且不适合进行应用改造的情况下就需要将历史数据和近期的业务数据保存在同一库中。这样就会形成了一个数据库内既有近期经常使用的热数据和长期很少使用的冷数据,对于冷的数据适合使用大容量的 SAS 磁盘进行存储,以降低系统成本。

2     TiDB 冷热存储分离实现

    TiDB 4.0 版本开始推出 Placement Rule(放置规则) 功能,是用于控制 region 副本调度的一套规则系统,通过 Placement Rule 可以控制某段连续数据的副本数、位置、region 类型等,以满足不同的数据分布需求。Placement Rules 配置使用 pd-ctl 工具较为复杂、友好性较差,因此从 5.3 版本开始支持 Placement Rules in SQL 功能,即通过一条 SQL 命令即可定义库、表、分区不同级的数据放置规则,比如在 create table 时指定表的放置规则、使用 alter table 改变表的放置规则等。


       TiDB 支持 tikv 存储节点 label 标签设置,通过多级 label 可以实现不同级别的 region 副本隔离,以保证数据的安全性,比如保证同一 region 不同副本在不同的数据中心、机房、机架或服务器上。TiDB 的冷热存储方案就是利用每个 tikv 存储节点设置不同的 label 标签实现,通过 Placement Rules in SQL 功能来进行自定义的数据放置。


    冷热存储分离实际使用时常见的有以下 2 种方式:


   (1)直接使用 alter 命令将历史表或分区 (比如按天建立) 迁移到冷数据存储节点。


   (2)历史表数据直接建立在冷数据存储节点,根据业务规则将历史数据从生产表写入历史表。


                    ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884721582.png) 
复制代码

3     冷热分离配置

    本环境中使用 3 台物理机,数据库版本 v6.2.0,每台物理上配置 2 个 tikv 实例,共 6 个实例,分别使用 2 块不同的磁盘 (sdb 和 sdc) 分别模拟 SSD 和 HDD 磁盘。使用{city、host、disk} 3 级标签,设置使用 sdb 磁盘的 tikv 实例 disk: ssd 标签 (对应端口 20162), 表示使用高性能 SSD 磁盘。设置使用 sdc 磁盘的 tikv 实例 disk: hdd 标签 (对应端口 20163),表示使用普通 HDD 磁盘。



       使用下面的命令创建 2 条数据放置策略用于在不同的磁盘上存储不同的数据, onssd 策略: 所有的数据副本存储到 disk 标签为 ssd 的 tikv,onhdd 策略: 所有的数据副本存储到 disk 标签为 hdd 的 tikv。


    CREATE PLACEMENT POLICY  onssd CONSTRAINTS="[+disk=ssd]";
复制代码


    CREATE PLACEMENT POLICY  onhdd CONSTRAINTS="[+disk=hdd]";
复制代码


    放置策略创建完成后就可以在库、表、分区级设置放置策略。


    Alter  table test PLACEMENT POLICY = onssd;
复制代码


    也可以在建表时直接指定表的放置策略。


    Create table test (id bigint auto_increment  primary key, name varchar(10)) PLACEMENT POLICY = onssd;
复制代码

4     冷热分离测试

4.1    冷热资源隔离

  • 测试内容


       使用 sysbench 初始化了 3 张 10 亿条记录的表,之后调整表的放置策略为 onssd,数据应仅存在指定的 tikv 节点,不会被调度到其他 tikv 节点。使用 sysbench 进行 128 线程读写压测,应仅有 3 个 tikv 的 CPU、IO 出现增高的情况,另外 3 个 tikv 保持很低的利用率。


  • 测试结果


    使用 show placment 命令查看目前放置策略,此时放置策略调度状态为 SCHEDULED,表示已经完成调度。完成调度后可以看到 3 张表的 region 全部在 3 个 ssd 磁盘 tikv 上。


            ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884769924.png)
复制代码


    3 张表的 region peer 在 tikv 节点的具体分布数量如下:


                              ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884779351.png)
复制代码


    通过监控页面也可以看到目前的 region 分布情况:


                 ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884792561.png)
复制代码


    通过监控可以看到压测期间仅使用 ssd 磁盘的 tikv 实例的 CPU、IO 利用率有增高而 HDD 磁盘几乎无压力,说明通过设置数据放置策略能够很好的实现资源隔离,相互之间无影响。


        ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884810419.png)
复制代码


4.2    冷热数据迁移

  • 测试内容


       使用 alter 命令更改 3 张表的存储策略为 onhdd,模拟整表冷数据迁移到 hdd 磁盘过程,迁移完成后原 ssd 存储上的数据副本数量应为 0。


  • 测试结果


       通过 SQL 命令更改数据放置位置为 HDD 盘后,数据开始进行调度往 hdd 盘上迁移,调度状态为 INPROGRESS,表示调度正在进行。


                       ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884829048.png)
复制代码


    通过 region 监控可以看到整个迁移过程



    完成调度后各节点数据副本数量


                             ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884849987.png)
复制代码

4.3    region 优化测试

       TiDB 将数据以 range 范围方式划分成多个 region ,每个 region 默认 96M,通过负载均衡策略在 tikv 节点点均衡 region 分布,region 间和 PD 控制节点保持心跳,当数据量很大时大量的心跳请求可能会对 PD 造成压力。开启静默 region 特性后降低心跳数量,减少压力。除此之外还可以通过增大 region 大小,减少 region 数量从而减少心跳数量。


  • 测试内容


    3 个 tikv 实例使用 144M region-max-size,另外 3 个 tikv 实例使用 384M region-max-size,分别使用 sysbench 初始化 10 张 1 亿的表,每种 region size 配置下使用 128 线程连续 3 次进行多种类型测试,每种类型压测 20 分钟,检查 TPS 和平均延时是否有明显降低。调整的参数如下:


        coprocessor.region-max-size: 384MB,region 的最大大小。


       coprocessor.region-max-keys: 3839999,region 的最大 key 数量,以默认数量为基础,按照设置最大 region_size 和默认 region_size 的比例计算。


        coprocessor.region-split-size: 256MB,region 分裂后默认大小。


        raftstore.region-split-check-diff: 32MB,触发 region 分裂检查的写入阈值。


                       ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884862690.png)
复制代码


  • 测试结果


不同 max-region-size 下的 region 数量如下:


                ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1664884870314.png)
复制代码


    sysbench 压测 TPS 和平均延迟如下:



    通过上面的测试结果可以看到在没有热点的情况下,大 region-size 对高并发 TPS 和延迟几乎无影响,同时随着压测的持续进行 TPS 在不断增长,这也反应了 TiDB 的自动负载均衡能力。

5     总结

    前面对 TiDB 冷热存储分离方式的资源隔离性、迁移的便捷性、大 region 优化下性能进行了测试,测试结果都符合预期,冷热存储使用方式也很简单,在使用时应在库级包括 mysql 设置放置策略为 ssd 盘,以避免 region 分散到 hdd 盘而影响性能。


发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB 数据冷热存储分离测试_实践案例_TiDB 社区干货传送门_InfoQ写作社区