在现代数据库管理系统中,资源管控是优化系统性能、提高用户密度和降低成本的关键因素之一。TiDB 作为一个具有存算分离架构的分布式数据库,面临着在动态业务环境下如何高效管理资源的挑战。自TiDB 7.1 版本引入资源管控功能以来,社区通过大量测试验证了其在资源使用隔离上的有效性。然而,随着业务的不断发展和集群规模的变化(如扩容和缩容),如何评估 TiDB 的动态容量,以及构建何种架构才能最大化资源管控的能力,成为亟待解决的问题。
本文将从业务角度切入,通过对不同类型业务(OLTP 和 OLAP)在资源管控下的表现进行详尽分析,探讨在动态发展模式下,如何优化TiDB 的资源管理策略。我们将深入研究同一计算节点和不同计算节点上的压力测试结果,揭示资源管控在不同业务类型之间的相互影响并提出最佳实践架构建议,以实现更稳定高效的系统性能。通过这篇文章,读者将了解到在实际运维中,如何通过精细的资源管控来提升TiDB 的整体表现和用户体验。
TiDB 是一个存算分离的架构,资源管控对这种分离的架构来说实现确实有非常大的难度,TiDB 从 7.1 版本开始引入资源管控的概念,在社区也有不少伙伴测试,测试结果大部分在 RU 的隔离上得到了验证,资源管控在业务上带来的价值是利用提高用户密度的方式来降低成本,同时还可以通过资源管控的方式抑制不同类型的业务来避免集群抖动,但是随着我们业务在不断发展,用户在增加,集群的资源也在变化(缩容,扩容),在这种动态发展的模式下,如何评估我们的 TiDB 动态容量,以及什么架构才能发挥资源管控的最大能力是本文讨论的点,本文会从业务的角度作为切入点来反向观察集群的状态。
最小化部署 3PD,3TiDB,3TiKV
TiDB 节点:为了公平 PD 和 TiDB 为混合部署,所有组件类如 Prometheus grafana alertmanager PD(L|UI)都放在一个 pd 机器上,让剩余的两个 TiDB 的计算节点负载相同
TiKV 节点:单机多实例部署,每个实例在部署 tikv 时都做了资源隔离,这样做的意义在于当 tikv 节点跑满时,最多用到 16c
resource_control: memory_limit: 150G cpu_quota: 1600%
TiDB 是存算分离的分布式数据库,多种不同类别的 SQL 难免会集中到一个 tidb 的计算节点上,而数据库中我们分为 OLTP 类业务和 OLAP 类业务,在这里我想说明下这两种业务的区别
OLTP 类的业务特点是短小的 SQL 语句,考验的是数据库处理高并发量的能力,常用的模拟工具有 sysbench,tpcc 等工具; OLAP 类的业务特点是计算型的 SQL 语句,考验的是数据库优化器的能力,常用的模拟工具有 tpch 等工具;
综上所述,我们可以到如下集中测试的基本场景
再下来我们设计一下压测的样例,压测需要有如下的限制和数据
压测过程和数据篇幅较长,可点击 https://tidb.net/blog/bc405c21 查看“压测过程”章节实验结论
这个 TiDB 架构应该是我理解的最佳实践了,从实验数据我们可以看到,即使我们开启了资源管控,两种不同业务类型同时请求同一个计算节点时,对其他的用户也是有一些抖动的,而从运维层面来说,要么降低租户的 RU,要么在计算节点进行隔离,从架构的角度出发,计算资源用 VIP 隔离开来,来达到专机专用的目的,存储节点通过 RU 来进行限制 IO,两层保护对稳定性有正向收益。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。