作者: cchouqiang 原文来源:https://tidb.net/blog/d4e59eac
背景
TiDB 数据库是一款云原生的分布式数据库,本身具备负载均衡机制,默认会将业务负载均匀地分布到不同计算或存储节点上,更好地利用上整体系统资源。但是,在某些场景下会出现业务负载不能被很好地分散,节点间的负载不均衡,从而影响性能。
TiDB 数据库是计算存储分离的,负载不均衡可能出现在计算节点,也可能出现在存储节点,本文只介绍出现在存储节点上出现负载不均衡的处理方式。
TiKV 存储节点负载不均衡案例分析
对 TiDB 数据库进行 TPC-C 测试,观察 grafana 面板中 tikv CPU 使用情况,发现 6 个 tikv 节点的 CPU 使用并不均衡,CPU 使用率差别很大。如下图所示:
观察 Overview 中 tikv 主机的 CPU 使用率,CPU 使用率最高的节点能达到 2251%,而 CPU 使用率最低的节点只有 1151%,说明存储节点的负载不均衡。
观察 tikv 的 leader 分布情况,leader 最多的节点有 429 个,leader 最低的节点有 389 个,差距在 10% 左右
通过如下 sql,查看表的 region leader 所在的存储节点上的数量,发现这张表在每个 tikv 节点上的 leader 数量不均衡。
select trs.table_name,tss.address,count(trp.region_id) leader_region_count
from TIKV_STORE_STATUS tss,TIKV_REGION_PEERS trp,(select distinct region_id,table_name,db_name from TIKV_REGION_status where is_index=0) trs
where trs.region_id=trp.region_id and trp.store_id=tss.store_id and trp.is_leader=1 and trs.table_name='tab1'
and trs.db_name='db1' group by trs.table_name,tss.address order by trs.table_name,tss.address;
复制代码
region leader 重分布方法
对表 region leader 重分布,有两种方式:
通过 TiDB 的 API 接口进行打散
执行如下命令,可以对表的 region leader 进行打散,结合上一章节的 sql 脚本进行校验。
curl http://192.168.1.1:10081/tables/tpcc/bmsql_config/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_customer/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_district/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_history/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_new_order/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_item/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_oorder/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_order_line/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_stock/scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_warehouse/scatter
复制代码
通过如上命令对表进行打散后,需要手动关闭,命令如下:
curl http://192.168.1.1:10081/tables/tpcc/bmsql_config/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_customer/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_district/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_history/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_new_order/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_item/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_oorder/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_order_line/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_stock/stop-scatter
curl http://192.168.1.1:10081/tables/tpcc/bmsql_warehouse/stop-scatter
复制代码
通过 SQL 命令 split table 进行打散
参考官网链接:
https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region#%E8%AF%AD%E6%B3%95%E5%9B%BE
通过如上方式,对region leader 打散后,再次执行TPCC,发现存储节点的CPU使用率相差无几,每个存储节点的负载都均衡。
复制代码
评论