写点什么

TiDB v7.1.0 版本 Resource Control 体验

  • 2023-06-16
    北京
  • 本文字数:4936 字

    阅读完需:约 16 分钟

作者: Ming 原文来源:https://tidb.net/blog/8abfaa25

简介

近期迎来了 TiDB v7.1.0 版本,也是 2023 年首发的 LTS(Long-Term Support Release)版本,相比于之前的 v6.5.0 LTS 版本已经过去了很长时间,在该版本当中,引入了之前 v6.6.0-DMR 与 v7.0.0-DMR 的新功能,并进行了改进,那其中,最让人值得注意的就是,在 v6.6.0 版本的时候 资源管控(Resource Control)作为实验特性加入之前版本,现如今到 v7.1.0 版本已经正式 GA,该功能的实现,对 TiDB 来说具有里程碑的意义,它可以把 TiDB 集群分割成多个小的逻辑单元,即使某些单元过度使用资源,也不会影响其他单元所需资源的使用。这种分割可以使数据库更加稳定和可靠,因为单元之间的互相独立性能够保证故障不会影响整个数据库集群。那么也就是说,我们在该功能的加持下,可以做到在不影响业务的情况下,合并其他业务,保证互不影响,这样可以说是大幅度的降低了成本。

使用场景

既然说该功能对于 TiDB 来说具有里程碑的意义,那么它必然存在它的道理,接下来我们来看一下它的使用场景都有哪些:



通过观察上图可以发现,我们只要有足够的资源支持,可以把多个中小业务,去合并到一起来管理,并且呢,合并到一起后还不会出现资源争抢的状况,只需要设置好各自的资源与优先级就可以了,这样大大的降低了运维难度与管理成本。

功能讲解

TiDB 的 Resource Control 功能的实现方式,主要是通过两层结构来实现的,分别是 TiDB 的流控和 TiKV 的优先级调度。


1、TiDB 的流控


什么是流控?在数据库当中,流控是指在高并发场景下,为了保证数据库的稳定性和可靠性,对访问数据库的请求进行限制和控制的一种机制,在 Resource Control 特性里,对 TiDB 做流控是采取的 * 令牌桶算法 * 实现的。


什么是令牌桶算法?令牌桶算法是一种基于令牌的流量控制算法,可以用来平滑的去限制流量和请求的达速率,从而免受突发流量和攻击的影响。在一段时间内为用户或客户端分配一个令牌桶,每个令牌表示允许进行一次请求或数据包的传输。当用户需要发送请求时,需要从令牌桶中获取一个令牌,如果令牌桶没有令牌,则无法发送请求。同时,令牌桶会以一定的速率往令牌桶中添加新的令牌,从而控制请求的到达速率,保护系统免受突发流量的冲击。优点就是可以平滑地调节流量和请求的到达速率,有效避免了系统过载和崩溃的问题。



开关控制参数(系统变量):tidb_enable_resource_control


MySQL [(none)]> SHOW VARIABLES LIKE "tidb_enable_resource_control";+------------------------------+-------+| Variable_name                | Value |+------------------------------+-------+| tidb_enable_resource_control | ON    |+------------------------------+-------+
复制代码


2、TiKV 的优先级调度


什么是 TiKV 的优先级调度?当开启 TiKV 调度特性后,TiKV 会根据每个存储组的 RU_PER_SEC 值来映射每个存储组的读写请求优先级。在存储层使用优先级队列进行调度,以确保高优先级的请求优先处理,进而提高整体数据服务的响应速度和吞吐量。


什么是 Request Unit(RU)?RU 是 TiDB 中对系统资源的抽象单位,目前 RU 的话包括了 CPU、IOPS、IO 带宽三个指标,这三个指标的消耗会按照一定的比例统一到 RU 单位上。官网提供了用户请求对 TiKV 存储层 CPU 和 IO 资源消耗与 RU 权重,如下:



开关控制参数(TiKV 配置文件参数):resource-control-enabled


MySQL [(none)]> SHOW CONFIG WHERE NAME LIKE "resource-control.enabled";+------+-----------------------+--------------------------+-------+| Type | Instance              | Name                     | Value |+------+-----------------------+--------------------------+-------+| tikv | 192.168.146.132:20160 | resource-control.enabled | true  || tikv | 192.168.146.130:20160 | resource-control.enabled | true  || tikv | 192.168.146.131:20160 | resource-control.enabled | true  |+------+-----------------------+--------------------------+-------+
复制代码


该参数与上述提到的系统变量需要配合使用,组合效果图如下:


功能体验

1、集群配置信息


Cluster type:       tidbCluster name:       tidb-testCluster version:    v7.1.0Deploy user:        tidbSSH type:           builtinDashboard URL:      http://192.168.146.130:2379/dashboardGrafana URL:        http://192.168.146.130:3000ID                     Role          Host             Ports        OS/Arch       Status  Data Dir                                             Deploy Dir--                     ----          ----             -----        -------       ------  --------                                             ----------192.168.146.130:9093   alertmanager  192.168.146.130  9093/9094    linux/x86_64  Up      /home/tidb/tidb-cluster/tidb-data/alertmanager-9093  /home/tidb/tidb-cluster/tidb-deploy/alertmanager-9093192.168.146.130:3000   grafana       192.168.146.130  3000         linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/grafana-3000192.168.146.130:2379   pd            192.168.146.130  2379/2380    linux/x86_64  Up|UI   /home/tidb/tidb-cluster/tidb-data/pd-2379            /home/tidb/tidb-cluster/tidb-deploy/pd-2379192.168.146.131:2379   pd            192.168.146.131  2379/2380    linux/x86_64  Up|L    /home/tidb/tidb-cluster/tidb-data/pd-2379            /home/tidb/tidb-cluster/tidb-deploy/pd-2379192.168.146.132:2379   pd            192.168.146.132  2379/2380    linux/x86_64  Up      /home/tidb/tidb-cluster/tidb-data/pd-2379            /home/tidb/tidb-cluster/tidb-deploy/pd-2379192.168.146.130:9090   prometheus    192.168.146.130  9090/12020   linux/x86_64  Up      /home/tidb/tidb-cluster/tidb-data/prometheus-8249    /home/tidb/tidb-cluster/tidb-deploy/prometheus-8249192.168.146.130:4000   tidb          192.168.146.130  4000/10080   linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/tidb-4000192.168.146.131:4001   tidb          192.168.146.131  4001/10081   linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/tidb-4000192.168.146.132:4002   tidb          192.168.146.132  4002/10082   linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/tidb-4000192.168.146.130:20160  tikv          192.168.146.130  20160/20180  linux/x86_64  Up      /home/tidb/tidb-cluster/data1/tidb-data/tikv-20160   /home/tidb/tidb-cluster/data1/tidb-deploy/tikv-20160192.168.146.131:20160  tikv          192.168.146.131  20160/20180  linux/x86_64  Up      /home/tidb/tidb-cluster/data1/tidb-data/tikv-20160   /home/tidb/tidb-cluster/data1/tidb-deploy/tikv-20160192.168.146.132:20160  tikv          192.168.146.132  20160/20180  linux/x86_64  Up      /home/tidb/tidb-cluster/data1/tidb-data/tikv-20160   /home/tidb/tidb-cluster/data1/tidb-deploy/tikv-20160
复制代码


2、确认开启资源管控特性


MySQL [(none)]>  SHOW CONFIG WHERE NAME LIKE "%resource-control%";+------+-----------------------+--------------------------+-------+| Type | Instance              | Name                     | Value |+------+-----------------------+--------------------------+-------+| tikv | 192.168.146.132:20160 | resource-control.enabled | true  || tikv | 192.168.146.130:20160 | resource-control.enabled | true  || tikv | 192.168.146.131:20160 | resource-control.enabled | true  |+------+-----------------------+--------------------------+-------+MySQL [(none)]> SHOW VARIABLES LIKE "%tidb_enable_resource_control%";+------------------------------+-------+| Variable_name                | Value |+------------------------------+-------+| tidb_enable_resource_control | ON    |+------------------------------+-------+
复制代码


3、创建资源组,并绑定用户


CREATE RESOURCE GROUP IF NOT EXISTS app1 RU_PER_SEC = 200;CREATE RESOURCE GROUP IF NOT EXISTS app2 RU_PER_SEC = 300;CREATE RESOURCE GROUP IF NOT EXISTS app3 RU_PER_SEC = 400;ALTER USER app1 RESOURCE GROUP app1;ALTER USER app2 RESOURCE GROUP app2;MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;+---------+------------+----------+-----------+| NAME    | RU_PER_SEC | PRIORITY | BURSTABLE |+---------+------------+----------+-----------+| app1    | 200        | MEDIUM   | NO        || app2    | 300        | MEDIUM   | NO        || app3    | 400        | MEDIUM   | NO        || default | UNLIMITED  | MEDIUM   | YES       |+---------+------------+----------+-----------+
复制代码


4、使用 sysbench 进行压测


(1)总共三个库,app_schema1 \ app_schema2 \ app_schema3 构建相同数据命令:sysbench --config-file=config oltp_point_select --tables=5 --table-size=1000000 prepare(2)读写同时用三个用户分别压测三个库:sysbench --config-file=config oltp_point_select --tables=5 --table-size=1000000 --db-ps-mode=auto --rand-type=uniform run
复制代码


5、观察监控指标


(1)RU 分别为 200、300、400 的监控指标



(2)运行途中更改 RU 值的监控指标


命令简介

1、预估容量


(1)指定时间对实际负载查看RU容量CALIBRATE RESOURCE START_TIME '2023-04-18 08:00:00' END_TIME '2023-04-18 08:20:00';(2)指定WORKLOAD查看RU容量,TPCC默认CALIBRATE RESOURCE;
复制代码


2、资源组管理


(1)创建资源组CREATE RESOURCE GROUP IF NOT EXISTS appn RU_PER_SEC = 500 BURSTABLE PRIORITY = HIGH;;appn = 资源组名RU_PER_SEC = 每秒限额BURSTABLE = 允许超额PRIORITY = 优先级(LOW|MEDIUM|HIGH) 默认MEDIUM(2)查看资源组SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;(3)创建用户并绑定资源组CREATE USER 'usr1'@'%' IDENTIFIED BY '123' RESOURCE GROUP rg1;(4)将已有用户绑定到资源组ALTER USER usr2 RESOURCE GROUP rg2;(5)删除资源组DROP RESOURCE GROUP IF EXISTS rg1;这里需要注意,删除资源组需要先将绑定的用户去掉(6)会话级别绑定资源组SET RESOURCE GROUP rg1;(7)语句级别绑定资源组SELECT /*+ RESOURCE_GROUP(rg1) */ * FROM t limit 10;(8)关闭资源管控SET GLOBAL tidb_enable_resource_control = 'OFF';将TiKV参数resource-control.enabled设为flase
复制代码

总结

优点:


(1)该功能将资源利用高效,通过控制应用、会话、SQL 放入到对应的资源组中,保证了响应时间与负载不受其他事项的影响,最大化的利用了系统资源。

(2)系统可扩展性强,在系统负载较低的情况下,繁忙应用即使超过设定的 RU,也仍然可以获得所需的系统资源,从而提高了系统的可扩展性

(3)运维难度低,在合理利用资源管控特性的情况下,减少应用集群数量,降低运维难度及管理成本


缺点:


(1)集群系统复杂度变高,由于采用资源管控特性,需要对集群进行划分和管理,会对性能有一定的影响并且增加系统的复杂度,维护难度变高

(2)划分策略难以确定,如何准确的划分资源组是该特性使用过程中需要考虑的问题,通过 CALIBRATE RESOURCE 可以预估容量,但在制定合适的划分策略的时候,也需要运维人员有很高的技术和经验


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

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

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

评论

发布
暂无评论
TiDB v7.1.0 版本 Resource Control体验_新版本/特性解读_TiDB 社区干货传送门_InfoQ写作社区