外观
TiDB 容量监控
关键容量指标
存储容量指标
TiKV 存储容量
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
tikv_store_size_bytes | TiKV 存储总容量 | 字节 | 使用率 > 80% 警告,> 90% 严重 |
tikv_store_available_bytes | TiKV 可用存储容量 | 字节 | 剩余空间 `< 20% 警告,< 10% 严重 |
tikv_store_utilization | TiKV 存储使用率 | % | >` 80% 警告,> 90% 严重 |
tikv_region_count | TiKV 节点上的 Region 数量 | 个 | > 100000 警告,> 200000 严重 |
tikv_region_size_bytes | Region 平均大小 | 字节 | < 64MB 或 > 192MB 警告 |
TiFlash 存储容量
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
tiflash_storage_size_bytes | TiFlash 存储总容量 | 字节 | 使用率 > 80% 警告,> 90% 严重 |
tiflash_storage_available_bytes | TiFlash 可用存储容量 | 字节 | 剩余空间 `< 20% 警告,< 10% 严重 |
tiflash_storage_utilization | TiFlash 存储使用率 | % | >` 80% 警告,> 90% 严重 |
tiflash_segment_count | TiFlash 段数量 | 个 | 根据实际情况调整 |
PD 存储容量
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
pd_storage_size_bytes | PD 存储总容量 | 字节 | 使用率 > 80% 警告,> 90% 严重 |
pd_storage_available_bytes | PD 可用存储容量 | 字节 | 剩余空间 `< 20% 警告,< 10% 严重 |
计算资源指标
CPU 使用率
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
process_cpu_seconds_total | CPU 总使用时间 | 秒 | 使用率 >` 80% 警告,> 95% 严重 |
tikv_thread_cpu_seconds_total | TiKV 线程 CPU 使用率 | 秒 | 单个线程使用率 > 90% 警告 |
tidb_server_cpu_seconds_total | TiDB Server CPU 使用率 | 秒 | 使用率 > 80% 警告,> 95% 严重 |
内存使用率
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
process_resident_memory_bytes | 进程内存使用量 | 字节 | 使用率 > 80% 警告,> 90% 严重 |
tikv_memory_usage_bytes | TiKV 内存使用量 | 字节 | 使用率 > 80% 警告,> 90% 严重 |
tidb_server_memory_bytes | TiDB Server 内存使用量 | 字节 | 使用率 > 80% 警告,> 90% 严重 |
磁盘 I/O 指标
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
disk_read_bytes_total | 磁盘读取字节数 | 字节 | 根据磁盘性能调整 |
disk_write_bytes_total | 磁盘写入字节数 | 字节 | 根据磁盘性能调整 |
disk_read_iops | 磁盘读取 IOPS | 次/秒 | 根据磁盘性能调整 |
disk_write_iops | 磁盘写入 IOPS | 次/秒 | 根据磁盘性能调整 |
disk_io_time_seconds_total | 磁盘 I/O 耗时 | 秒 | 使用率 > 80% 警告,> 90% 严重 |
网络容量指标
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
network_receive_bytes_total | 网络接收字节数 | 字节 | 根据网络带宽调整 |
network_transmit_bytes_total | 网络发送字节数 | 字节 | 根据网络带宽调整 |
network_receive_packets_dropped_total | 网络接收丢包数 | 个 | > 0 警告 |
network_transmit_packets_dropped_total | 网络发送丢包数 | 个 | > 0 警告 |
tikv_grpc_message_sent_bytes_total | TiKV gRPC 发送字节数 | 字节 | 根据实际情况调整 |
tikv_grpc_message_received_bytes_total | TiKV gRPC 接收字节数 | 字节 | 根据实际情况调整 |
集群规模指标
| 指标名 | 描述 | 单位 | 告警阈值建议 |
|---|---|---|---|
tidb_cluster_total_region_count | 集群总 Region 数量 | 个 | 根据集群规模调整 |
tidb_server_connection_count | TiDB Server 连接数 | 个 | > 最大连接数的 80% 警告 |
tikv_store_count | TiKV 存储节点数量 | 个 | 根据集群规模调整 |
tidb_server_count | TiDB Server 节点数量 | 个 | 根据集群规模调整 |
pd_server_count | PD Server 节点数量 | 个 | < 3 警告(生产环境) |
容量监控工具
Prometheus + Grafana
Prometheus 和 Grafana 是 TiDB 官方推荐的监控解决方案,可以监控 TiDB 集群的各种指标,包括容量指标。
配置 Prometheus
- 确保 Prometheus 已正确配置 TiDB 集群的数据源
- 配置 Prometheus 抓取 TiDB、TiKV、PD 等组件的指标
- 设置合理的抓取间隔和数据保留时间
示例 Prometheus 配置:
yaml
scrape_configs:
- job_name: 'tidb'
static_configs:
- targets: ['10.0.0.1:10080', '10.0.0.2:10080']
scrape_interval: 15s
- job_name: 'tikv'
static_configs:
- targets: ['10.0.0.3:20180', '10.0.0.4:20180', '10.0.0.5:20180']
scrape_interval: 15s
- job_name: 'pd'
static_configs:
- targets: ['10.0.0.6:2379', '10.0.0.7:2379', '10.0.0.8:2379']
scrape_interval: 15s使用 Grafana 监控容量
- 导入 TiDB 官方提供的 Grafana 仪表盘
- 关注容量相关的面板,如:
- TiKV 存储容量使用情况
- TiFlash 存储容量使用情况
- 集群 Region 数量趋势
- 计算资源使用率
- 网络带宽使用情况
推荐的 Grafana 仪表盘:
- TiDB-Overview:集群概览,包含容量相关指标
- TiKV-Details:TiKV 详细指标,包含存储容量
- TiFlash-Details:TiFlash 详细指标,包含存储容量
- PD-Details:PD 详细指标,包含集群规模
TiDB Dashboard
TiDB Dashboard 提供了可视化的容量监控功能,包括:
集群信息
- 显示集群的节点数量、Region 数量等基本信息
- 展示集群的拓扑结构
- 显示各组件的版本信息
存储容量监控
- 展示各 TiKV 节点的存储使用情况
- 显示存储容量的变化趋势
- 提供存储容量的详细统计
性能监控
- 显示 CPU、内存、磁盘 I/O 等资源的使用情况
- 展示网络带宽的使用情况
- 提供资源使用的历史趋势
访问 TiDB Dashboard
通过浏览器访问 TiDB Dashboard:
http://<tidb-ip>:2379/dashboardtiup cluster display
使用 tiup cluster display 命令查看集群的基本信息和状态:
bash
tiup cluster display <cluster-name>输出示例:
Starting /home/tidb/.tiup/components/cluster/v1.13.1/cluster display <cluster-name>
TiDB Cluster: <cluster-name>
TiDB Version: v7.1.0
Deploy user: root
SSH type: builtin
Dashboard URL: http://10.0.0.6:2379/dashboard
Grafana URL: http://10.0.0.9:3000
ID Role Host Ports Status Data Dir Deploy Dir
-- ---- ---- ----- ------ -------- ----------
10.0.0.1:9090 prometheus 10.0.0.1 9090/9093 Up /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090
10.0.0.1:3000 grafana 10.0.0.1 3000 Up - /tidb-deploy/grafana-3000
10.0.0.6:2379 pd 10.0.0.6 2379/2380 Up|L|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379
10.0.0.7:2379 pd 10.0.0.7 2379/2380 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
10.0.0.8:2379 pd 10.0.0.8 2379/2380 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
10.0.0.3:4000 tidb 10.0.0.3 4000/10080 Up - /tidb-deploy/tidb-4000
10.0.0.4:4000 tidb 10.0.0.4 4000/10080 Up - /tidb-deploy/tidb-4000
10.0.0.5:4000 tidb 10.0.0.5 4000/10080 Up - /tidb-deploy/tidb-4000
10.0.0.9:20160 tikv 10.0.0.9 20160/20180 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
10.0.0.10:20160 tikv 10.0.0.10 20160/20180 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
10.0.0.11:20160 tikv 10.0.0.11 20160/20180 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160自定义监控脚本
可以编写自定义脚本监控 TiDB 集群的容量情况,例如:
监控存储容量的脚本
bash
#!/bin/bash
# 监控 TiKV 存储容量
for tikv_ip in 10.0.0.9 10.0.0.10 10.0.0.11; do
store_size=$(curl -s http://${tikv_ip}:20180/metrics | grep tikv_store_size_bytes | awk '{print $2}')
available_size=$(curl -s http://${tikv_ip}:20180/metrics | grep tikv_store_available_bytes | awk '{print $2}')
utilization=$(echo "scale=2; (${store_size} - ${available_size}) / ${store_size} * 100" | bc)
echo "TiKV ${tikv_ip} storage utilization: ${utilization}%"
done监控集群规模的脚本
bash
#!/bin/bash
# 监控集群 Region 数量
region_count=$(curl -s http://10.0.0.6:2379/pd/api/v1/regions/count)
echo "Cluster region count: ${region_count}"
# 监控 TiDB 连接数
tidb_connections=$(curl -s http://10.0.0.3:10080/metrics | grep tidb_server_connection_count | awk '{print $2}')
echo "TiDB connections: ${tidb_connections}"容量预测方法
基于历史数据的预测
使用历史容量数据预测未来的容量需求,常用的方法包括:
线性回归
假设容量增长是线性的,根据历史数据拟合线性模型,预测未来的容量需求。
指数平滑
考虑时间序列的趋势和季节性,使用指数平滑方法预测未来的容量需求。
机器学习方法
使用机器学习算法(如 ARIMA、LSTM 等)分析历史数据,预测未来的容量需求。
基于业务增长的预测
根据业务增长情况预测容量需求:
- 了解业务的用户增长趋势
- 分析业务的数据增长速度
- 考虑新功能对容量的影响
- 结合市场预测和业务规划
容量预测工具
Prometheus 表达式
使用 Prometheus 表达式进行简单的容量预测:
# 预测 TiKV 存储容量在 30 天后的使用情况
tikv_store_size_bytes + (rate(tikv_store_size_bytes[7d]) * 30 * 24 * 3600)Grafana 预测功能
Grafana 提供了预测功能,可以基于历史数据预测未来的容量需求:
- 在 Grafana 面板中编辑图表
- 开启 "Predictions" 功能
- 设置预测参数,如预测时间范围、置信区间等
- 查看预测结果
第三方工具
- InfluxDB Kapacitor:支持时间序列预测
- Elasticsearch ML:提供机器学习预测功能
- Prophet:Facebook 开源的时间序列预测工具
容量告警配置
告警规则设置
Prometheus 告警规则
在 Prometheus 中配置容量告警规则:
示例告警规则文件:
yaml
groups:
- name: tidb-capacity-alerts
rules:
# TiKV 存储容量告警
- alert: TiKVStorageUtilizationHigh
expr: (tikv_store_size_bytes - tikv_store_available_bytes) / tikv_store_size_bytes > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "TiKV storage utilization is high"
description: "TiKV instance {{ $labels.instance }} has high storage utilization ({{ $value | humanizePercentage }})"
- alert: TiKVStorageUtilizationCritical
expr: (tikv_store_size_bytes - tikv_store_available_bytes) / tikv_store_size_bytes > 0.9
for: 5m
labels:
severity: critical
annotations:
summary: "TiKV storage utilization is critical"
description: "TiKV instance {{ $labels.instance }} has critical storage utilization ({{ $value | humanizePercentage }})"
# TiDB 连接数告警
- alert: TiDBConnectionCountHigh
expr: tidb_server_connection_count > 0.8 * tidb_server_max_connections
for: 5m
labels:
severity: warning
annotations:
summary: "TiDB connection count is high"
description: "TiDB instance {{ $labels.instance }} has high connection count ({{ $value }}/{{ $value | withMetric "tidb_server_max_connections" }})"
# 集群 Region 数量告警
- alert: ClusterRegionCountHigh
expr: sum(tikv_region_count) > 100000
for: 5m
labels:
severity: warning
annotations:
summary: "Cluster region count is high"
description: "Cluster has high region count ({{ $value }})"告警级别划分
根据告警的严重程度划分告警级别:
| 级别 | 描述 | 处理时间要求 |
|---|---|---|
| 严重(critical) | 容量即将耗尽,可能导致业务中断 | 立即处理(30 分钟内) |
| 警告(warning) | 容量使用超过阈值,需要关注 | 24 小时内处理 |
| 信息(info) | 容量使用正常,但需要监控 | 定期关注 |
告警通知方式
配置多种告警通知方式,确保告警能够及时送达:
- 邮件通知:发送告警邮件给相关人员
- 短信通知:发送告警短信给相关人员
- 即时通讯工具:通过 Slack、钉钉、企业微信等发送告警
- 电话通知:对于严重告警,触发电话通知
- 告警平台集成:集成到企业的告警平台
容量优化策略
存储优化
数据压缩
- 启用 TiKV 的数据压缩功能
- 选择合适的压缩算法(如 zstd、snappy 等)
- 根据数据类型调整压缩级别
配置示例:
yaml
tikv_servers:
- host: 10.0.0.9
config:
storage:
block-cache:
capacity: "4GB"
compressor:
default: "zstd"
level: 3数据清理
- 定期清理过期数据
- 归档历史数据
- 删除无用的数据表和索引
分区表优化
- 使用分区表存储时间序列数据
- 定期删除旧分区
- 优化分区策略
计算资源优化
资源隔离
- 使用 TiDB 的资源组功能隔离不同业务的资源
- 为关键业务分配更多资源
- 限制非关键业务的资源使用
配置示例:
sql
-- 创建资源组
CREATE RESOURCE GROUP critical_business WITH RU_PER_SEC = 10000;
CREATE RESOURCE GROUP normal_business WITH RU_PER_SEC = 5000;
-- 将用户分配到资源组
ALTER USER 'critical_user'@'%' RESOURCE GROUP critical_business;
ALTER USER 'normal_user'@'%' RESOURCE GROUP normal_business;查询优化
- 优化慢查询,减少资源消耗
- 合理使用索引,提高查询效率
- 避免全表扫描和大表连接
连接池优化
- 配置合适的连接池大小
- 减少不必要的数据库连接
- 及时关闭空闲连接
网络优化
网络拓扑优化
- 优化集群的网络拓扑
- 确保节点之间的网络延迟较低
- 使用高速网络设备
流量控制
- 限制单个查询的网络流量
- 优化数据传输方式
- 使用压缩传输
集群规模优化
水平扩展
- 根据容量需求添加新节点
- 平衡集群的负载
- 扩展 TiKV、TiDB、PD 等组件
垂直扩展
- 升级节点的硬件配置
- 增加 CPU、内存、磁盘等资源
- 优化硬件配置
Region 合并
- 合并过小的 Region,减少集群的 Region 数量
- 调整 Region 分裂阈值
- 优化 PD 调度策略
配置示例:
yaml
pd_servers:
- host: 10.0.0.6
config:
replication:
split-size: "64MB"
schedule:
max-merge-region-size: "20MB"
max-merge-region-keys: 200000容量监控最佳实践
监控频率设置
- 实时监控:对于关键指标(如存储容量、CPU 使用率),监控频率设置为 15-30 秒
- 定期监控:对于非关键指标,监控频率设置为 5-15 分钟
- 历史数据:保留足够的历史数据,便于趋势分析和容量预测
数据保留策略
- 短期数据:最近 7 天的数据,保留原始采样频率
- 中期数据:最近 30 天的数据,降低采样频率
- 长期数据:超过 30 天的数据,进一步降低采样频率或汇总存储
定期容量评估
- 每日评估:查看当日的容量使用情况,处理告警
- 每周评估:分析周容量变化趋势,调整告警规则
- 每月评估:进行全面的容量评估,制定容量规划
- 季度评估:结合业务规划,制定长期容量规划
容量规划流程
- 收集数据:收集当前的容量使用数据
- 分析趋势:分析容量的变化趋势
- 预测需求:预测未来的容量需求
- 制定计划:制定容量扩展或优化计划
- 执行计划:执行容量扩展或优化操作
- 验证效果:验证容量扩展或优化的效果
- 调整计划:根据实际情况调整容量规划
文档化容量监控
- 记录容量监控的配置和规则
- 记录容量评估的结果和结论
- 记录容量扩展和优化的操作
- 建立容量监控的知识库
常见问题(FAQ)
Q1: 如何确定 TiKV 存储容量的告警阈值?
A1: 告警阈值的设置应考虑以下因素:
- 磁盘的实际容量
- 数据增长速度
- 扩容所需的时间
- 业务的重要程度
建议设置两级告警:
- 警告阈值:80%,用于提醒关注容量变化
- 严重阈值:90%,需要立即处理
Q2: 如何监控 TiFlash 的容量?
A2: 可以通过以下方式监控 TiFlash 容量:
- 使用 Prometheus 监控
tiflash_storage_size_bytes指标 - 通过 TiDB Dashboard 查看 TiFlash 容量
- 使用
tiup cluster display命令查看 TiFlash 节点状态
Q3: 如何预测集群的容量需求?
A3: 容量预测可以结合以下方法:
- 基于历史数据的趋势分析
- 基于业务增长的预测
- 使用机器学习方法进行预测
- 结合市场预测和业务规划
Q4: 如何处理 TiKV 存储容量不足的问题?
A4: 处理 TiKV 存储容量不足的步骤:
- 确认存储容量告警的准确性
- 分析存储容量增长的原因
- 考虑数据清理和归档
- 进行 TiKV 节点扩容
- 调整告警阈值(如果需要)
Q5: 如何优化集群的 Region 数量?
A5: 优化 Region 数量的方法:
- 调整 Region 分裂阈值,增加单个 Region 的大小
- 合并过小的 Region
- 优化 PD 调度策略,减少 Region 数量
- 考虑使用 TiDB 4.0+ 的 Region 合并功能
Q6: 如何监控 TiDB 的连接数?
A6: 可以通过以下方式监控 TiDB 连接数:
- 监控
tidb_server_connection_count指标 - 通过 TiDB Dashboard 查看连接数
- 使用
SHOW PROCESSLIST命令查看当前连接
Q7: 如何设置合理的容量告警通知方式?
A7: 建议设置多种告警通知方式:
- 邮件通知:用于所有告警
- 即时通讯工具:用于警告和严重告警
- 电话通知:仅用于严重告警
- 告警平台集成:便于统一管理
Q8: 如何评估容量扩展的效果?
A8: 评估容量扩展效果的指标:
- 存储容量使用率是否下降
- 计算资源使用率是否下降
- 业务性能是否提升
- 告警数量是否减少
Q9: 如何处理突发的容量增长?
A9: 处理突发容量增长的步骤:
- 确认容量增长的原因
- 评估是否为正常业务增长
- 考虑临时扩容方案
- 制定长期容量规划
- 调整监控和告警策略
Q10: 如何建立完善的容量监控体系?
A10: 建立容量监控体系的步骤:
- 确定需要监控的容量指标
- 选择合适的监控工具
- 配置监控和告警规则
- 建立容量预测机制
- 制定容量规划流程
- 定期评估和优化
- 文档化和知识共享
