Skip to content

TiDB 集群规划最佳实践 ​

TiDB 集群规划是确保集群高效、可靠运行的基础。本文将详细介绍 TiDB 集群规划的最佳实践,包括架构设计、硬件选择、网络规划、容量规划和部署模式。

架构设计 ​

1. 组件角色规划 ​

组件角色功能部署建议
TiDBSQL 层,处理客户端请求2-5 个节点,根据并发量扩展
TiKV存储层,数据持久化3-100+ 个节点,根据数据量扩展
PD调度层,集群管理3 或 5 个节点,奇数个确保高可用
TiFlash列式存储,OLAP 加速1-3 个节点,根据分析需求扩展
TiCDC变更数据捕获,实时同步1-3 个节点,根据同步需求扩展

2. 拓扑结构设计 ​

单数据中心部署 ​

适用于对容灾要求不高的场景:

跨数据中心部署 ​

适用于对容灾要求较高的场景:

3. 副本策略设计 ​

  • 默认配置:3 个副本,分布在不同节点
  • 跨可用区部署:副本分布在不同可用区,配置 replication.location-labels = ["zone", "rack", "host"]
  • 跨数据中心部署:副本分布在不同数据中心,根据距离调整副本优先级
  • 特殊场景:对数据安全性要求极高的场景,可配置 5 个副本

硬件选择 ​

1. TiDB 服务器 ​

配置项建议配置说明
CPU16-32 核高并发场景建议 32 核
内存64-128 GB内存越大,SQL 执行缓存效果越好
磁盘SSD 1-2 TB主要存储日志和临时文件
网卡10 GbE 或更高确保网络带宽充足

2. TiKV 服务器 ​

配置项建议配置说明
CPU16-32 核建议使用高主频 CPU
内存64-256 GB内存越大,RocksDB 缓存效果越好
磁盘NVMe SSD 2-8 TB推荐使用 NVMe SSD,单盘容量不宜过大
网卡25 GbE 或更高确保副本同步和数据迁移速度

3. PD 服务器 ​

配置项建议配置说明
CPU8-16 核PD 计算需求相对较低
内存16-64 GB内存越大,元数据缓存效果越好
磁盘SSD 500 GB-1 TB存储集群元数据,建议使用 SSD
网卡10 GbE 或更高确保与其他组件通信顺畅

4. TiFlash 服务器 ​

配置项建议配置说明
CPU32-64 核分析查询对 CPU 要求较高
内存128-512 GB内存越大,列式存储缓存效果越好
磁盘SSD 4-16 TB推荐使用 NVMe SSD,容量根据数据量规划
网卡25 GbE 或更高确保数据同步和查询速度

网络规划 ​

1. 网络架构 ​

  • 三层网络架构:核心层、汇聚层、接入层
  • 网络隔离:生产环境建议使用独立的 VLAN
  • 带宽规划:根据节点数量和数据量规划足够的带宽
  • 延迟要求:TiKV 节点之间延迟建议 < 1 ms,PD 节点之间延迟建议 < 500 μs

2. 端口规划 ​

组件默认端口用途
TiDB4000MySQL 协议端口
TiDB10080HTTP API 端口
TiKV20160TiKV 服务端口
TiKV20180TiKV 状态端口
PD2379PD 客户端端口
PD2380PD 节点间通信端口
TiFlash9000TiFlash 服务端口
TiFlash8123TiFlash HTTP 端口
TiFlash3930TiFlash MySQL 端口
TiFlash20170TiFlash Raft 端口
TiCDC8300TiCDC HTTP 端口

3. 网络优化 ​

  • 关闭防火墙:生产环境建议关闭防火墙或开放必要端口
  • 禁用 SELinux:避免不必要的安全限制
  • 优化 TCP 参数:调整 TCP 缓冲区大小、超时时间等
  • 使用 RDMA:高性能场景可考虑使用 RDMA 网络

容量规划 ​

1. 数据量估算 ​

总存储容量 = 原始数据量 × 副本数 × 2 (压缩和索引开销) × 1.5 (预留空间)

2. 节点数量规划 ​

  • TiDB 节点:根据并发连接数和 QPS 规划,每节点支持约 1000-2000 并发连接
  • TiKV 节点:根据数据量规划,每节点支持约 5-10 TB 数据
  • PD 节点:固定 3 或 5 个节点
  • TiFlash 节点:根据分析查询需求规划,通常为 TiKV 节点数的 1/3-1/2

3. 扩展性规划 ​

  • 水平扩展:支持在线水平扩展,无需停机
  • 垂直扩展:支持在线垂直扩展,部分组件需要重启
  • 扩展策略:制定清晰的扩展触发条件和流程

部署模式 ​

1. 物理机部署 ​

适用场景:对性能要求极高的生产环境

优势:

  • 更高的性能和资源利用率
  • 更稳定的运行环境
  • 更好的硬件控制

劣势:

  • 部署和维护成本较高
  • 资源弹性较差

2. 虚拟机部署 ​

适用场景:对资源弹性要求较高的场景

优势:

  • 资源弹性好,支持快速扩容缩容
  • 部署和维护成本较低
  • 更好的资源隔离

劣势:

  • 性能比物理机略低
  • 依赖虚拟化平台

3. Kubernetes 部署 ​

适用场景:云原生环境或需要高度自动化管理的场景

优势:

  • 高度自动化的部署和管理
  • 优秀的资源弹性和扩展性
  • 更好的故障自愈能力
  • 支持混合云部署

劣势:

  • 学习曲线较陡
  • 依赖 Kubernetes 生态
  • 性能开销略高

配置规划 ​

1. 系统配置 ​

  • 操作系统:推荐使用 CentOS 7.6+ 或 Ubuntu 18.04+
  • 文件系统:推荐使用 ext4 或 xfs
  • 磁盘调度器:SSD 推荐使用 noop 或 none
  • 内存管理:调整 vm.swappiness 为 0,关闭透明大页
  • 网络参数:调整 TCP 缓冲区大小、超时时间等

2. 组件配置 ​

TiDB 配置 ​

toml
[server]
max_connections = 8000

[log]
level = "info"

[performance]
txn-total-size-limit = 1073741824
stmt-count-limit = 5000

TiKV 配置 ​

toml
[server]
grpc-concurrency = 8

[storage]
enable-pre-handle = true

[raftstore]
raftdb-max-bg-flushes = 2
raftdb-max-bg-compactions = 4

[rocksdb]
max-background-jobs = 8
max-open-files = 40960

PD 配置 ​

toml
[schedule]
leader-schedule-limit = 4
region-schedule-limit = 20
replica-schedule-limit = 64
max-replicas = 3
location-labels = ["zone", "rack", "host"]

监控与告警规划 ​

1. 监控架构 ​

  • Prometheus:部署至少 2 个节点,实现高可用
  • Grafana:部署至少 2 个节点,使用负载均衡
  • Alertmanager:部署至少 2 个节点,实现高可用
  • Node Exporter:每个服务器部署一个

2. 关键告警指标 ​

组件关键告警指标阈值建议
TiDB连接数> 80% 最大连接数
TiDBSQL 执行错误率> 0.1%
TiDB慢查询数> 10 个/分钟
TiKV磁盘使用率> 80%
TiKVRaft 日志落后> 1000
TiKVCPU 使用率> 80%
PDLeader 切换频率> 3 次/小时
PD集群 Region 数增长率异常
系统服务器 CPU 使用率> 85%
系统服务器内存使用率> 90%

3. 告警级别 ​

  • Critical:严重告警,需要立即处理,如节点故障
  • Warning:警告告警,需要关注,如资源使用率过高
  • Info:信息告警,仅作参考,如配置变更

备份与恢复规划 ​

1. 备份策略 ​

  • 全量备份:每天或每周执行一次,使用 BR 工具
  • 增量备份:每小时或每 30 分钟执行一次,使用 TiCDC 或 binlog
  • 备份存储:备份数据存储在独立的存储系统,如对象存储
  • 备份验证:定期验证备份数据的完整性和可恢复性

2. 恢复策略 ​

  • RTO 目标:根据业务需求设置,通常为分钟到小时级
  • RPO 目标:根据业务需求设置,通常为秒到分钟级
  • 恢复演练:定期进行恢复演练,验证恢复流程
  • 多版本备份:保留多个版本的备份数据,防止逻辑错误

安全规划 ​

1. 访问控制 ​

  • 用户认证:启用 MySQL 原生认证或 LDAP 认证
  • 权限管理:遵循最小权限原则,定期审计权限
  • IP 白名单:配置允许访问的 IP 地址范围
  • SSL/TLS:启用 SSL/TLS 加密通信

2. 数据安全 ​

  • 数据加密:启用传输加密和存储加密
  • 敏感数据处理:对敏感数据进行脱敏或加密存储
  • 审计日志:启用审计日志,记录所有操作
  • 漏洞扫描:定期进行漏洞扫描和安全评估

3. 操作安全 ​

  • 变更管理:所有配置变更和升级操作需要经过审批
  • 操作审计:记录所有管理操作
  • 灾难恢复:制定详细的灾难恢复计划
  • 定期演练:定期进行灾难恢复演练

常见问题(FAQ) ​

Q1: 如何选择 TiDB 集群的部署模式? ​

A1: 选择部署模式应考虑以下因素:

  • 性能要求:物理机 > 虚拟机 > Kubernetes
  • 资源弹性:Kubernetes > 虚拟机 > 物理机
  • 管理复杂度:物理机 > 虚拟机 > Kubernetes
  • 成本:物理机 > 虚拟机 > Kubernetes(公有云)
  • 技术栈:根据团队的技术栈选择合适的部署模式

Q2: TiKV 节点的磁盘容量多大合适? ​

A2: TiKV 节点的磁盘容量建议:

  • 单盘容量不宜过大,推荐 2-8 TB
  • 每节点建议使用 1-4 块磁盘
  • 预留足够的空间,建议使用率不超过 80%
  • 考虑数据增长趋势,预留 3-6 个月的增长空间

Q3: 如何规划 TiDB 集群的网络带宽? ​

A3: 网络带宽规划建议:

  • 单节点网络带宽:TiDB 节点建议 10 GbE,TiKV 节点建议 25 GbE
  • 集群总带宽:根据节点数量和数据量规划
  • 跨数据中心部署:考虑数据同步和副本复制的带宽需求
  • 预留足够的带宽,避免网络成为瓶颈

Q4: 如何设置合理的告警阈值? ​

A4: 设置告警阈值应考虑:

  • 业务需求:根据业务的重要性和敏感度设置
  • 历史数据:分析历史数据,找出正常范围
  • 资源利用率:通常设置为 80-85% 资源使用率
  • 告警频率:避免设置过低的阈值导致告警风暴
  • 分级告警:设置不同级别的告警阈值

Q5: 如何规划 TiDB 集群的扩展性? ​

A5: 扩展性规划建议:

  • 水平扩展优先:TiDB 设计为水平扩展架构,优先考虑水平扩展
  • 提前规划:根据业务增长趋势,提前规划扩展策略
  • 测试扩展流程:定期测试扩展流程,确保可以顺利扩展
  • 监控容量:设置容量告警,及时发现容量瓶颈
  • 考虑成本:平衡扩展成本和业务需求

Q6: 如何确保 TiDB 集群的安全性? ​

A6: 确保集群安全性的建议:

  • 启用多层安全防护:认证、授权、加密、审计
  • 定期进行安全审计和评估
  • 及时更新版本,修复安全漏洞
  • 制定详细的安全应急预案
  • 对团队成员进行安全培训

通过遵循以上最佳实践,可以构建一个高效、可靠、安全的 TiDB 集群,满足业务的需求。