1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG001-TiDB分布式架构与核心组件详解

本文档详细介绍TiDB分布式数据库的架构原理与核心组件,包括TiDB、TiKV、PD、TiFlash等组件的功能和作用,以及在生产环境中的部署规划和最佳实践。风哥教程参考TiDB官方文档产品概览和架构设计相关内容,适合DBA和开发人员学习使用。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 TiDB数据库的概念

TiDB是平凯星辰公司自主设计、研发的开源分布式关系型数据库,具有以下特点:

  • 分布式架构:支持水平扩展,无单点故障
  • MySQL兼容性:支持MySQL协议和语法
  • 强一致性:基于Raft协议保证数据一致性
  • 高可用性:多副本机制,自动故障转移
  • HTAP能力:同时支持OLTP和OLAP工作负载
TiDB的核心价值:

  • 解决传统数据库的扩展性问题
  • 提供金融级的数据一致性保证
  • 简化数据库运维复杂度
  • 降低TCO(总体拥有成本)

1.2 TiDB分布式架构原理

TiDB采用分层架构设计,主要分为三层:

  • 计算层(TiDB):负责SQL解析、优化和执行
  • 存储层(TiKV):负责数据的持久化存储
  • 调度层(PD):负责集群调度和元数据管理
# TiDB架构层次关系
– 计算层(TiDB):无状态,可水平扩展
– 存储层(TiKV):分布式键值存储,多副本
– 调度层(PD):集群大脑,负责资源调度
– 分析引擎(TiFlash):列存引擎,加速分析查询

# 数据分片机制
– 按范围分片(Region)
– 自动分裂和合并
– 数据均衡分布

1.3 TiDB核心组件详解

1.3.1 TiDB组件

TiDB是SQL引擎,负责:

  • 接收客户端连接
  • SQL解析和优化
  • 执行计划生成
  • 结果返回

风哥提示:

1.3.2 TiKV组件

TiKV是分布式键值存储,负责:

  • 数据持久化存储
  • 多副本同步(Raft协议)
  • 事务处理
  • 数据压缩和编码

1.3.3 PD组件

PD(Placement Driver)是集群大脑,负责:

  • 集群元数据管理
  • Region调度和负载均衡
  • TiKV节点管理
  • 时间戳分配(TSO)

1.3.4 TiFlash组件

TiFlash是列式存储引擎,负责:

  • 实时数据同步
  • OLAP查询加速
  • 列式存储格式
  • 向量化执行
风哥提示:TiDB的分层架构设计使得各组件可以独立扩展,提高了系统的灵活性和可维护性。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 系统硬件要求

TiDB生产环境的硬件建议:

# TiDB节点硬件要求
– CPU:8-32核,推荐16核以上
– 内存:32-128GB,推荐64GB以上
– 存储:SSD,500GB以上
– 网络:万兆网卡

# TiKV节点硬件要求
– CPU:8-32核,推荐16核以上
– 内存:32-128GB,推荐64GB以上
– 存储:NVMe SSD,1TB以上
– 网络:万兆网卡

# PD节点硬件要求
– CPU:4-8核
– 内存:8-16GB
– 存储:SSD,200GB以上
– 网络:千兆以上

# TiFlash节点硬件要求
– CPU:16-32核
– 内存:64-128GB
– 存储:NVMe SSD,2TB以上
– 网络:万兆网卡

2.2 操作系统环境要求

推荐的操作系统:

  • Oracle Linux 9.3 / RHEL 9.3
  • Oracle Linux 8.x / RHEL 8.x
  • Oracle Linux 7.x / RHEL 7.x
  • 国产麒麟操作系统 Kylin v10 SP3
  • 欧拉操作系统
# 操作系统参数配置
# 关闭透明大页
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
$ echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 关闭NUMA
$ numactl –interleave=all

# 调整文件描述符
$ echo “* soft nofile 65536” >> /etc/security/limits.conf
$ echo “* hard nofile 65536” >> /etc/security/limits.conf

# 调整网络参数
$ echo “net.core.somaxconn = 32768” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_max_syn_backlog = 8192” >> /etc/sysctl.conf
$ sysctl -p

2.3 部署架构规划

生产环境部署架构建议:

# 小规模部署(测试/开发)
– TiDB:1-2节点
– TiKV:3节点
– PD:3节点
– TiFlash:0-1节点学习交流加群风哥QQ113257174

# 中规模部署(生产)
– TiDB:3-6节点
– TiKV:3-9节点
– PD:3节点
– TiFlash:2-3节点

# 大规模部署(核心业务)
– TiDB:6-12节点
– TiKV:9-15节点
– PD:3节点
– TiFlash:3-6节点

# 网络规划
– 管理网络:千兆以上
– 业务网络:万兆以上
– 存储网络:万兆以上(建议独立)

生产环境建议:根据业务规模和性能要求选择合适的部署架构,确保高可用性和性能。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 核心组件配置

3.1.1 TiDB配置示例

# TiDB配置文件 (tidb.toml)
[server]
port = 4000
status_port = 10080

[log]
level = “info”

[performance]
max-procs = 16

[prepared-plan-cache]
enable = true
capacity = 1000

3.1.2 TiKV配置示例

# TiKV配置文件 (tikv.toml)
[server]
grpc-compression-type = “gzip”

[storage]
data-dir = “/tidb/fgdata/tikv”

[raftstore]
raftdb-path = “/tidb/fgdata/tikv/raft”

[rocksdb]
max-open-files = 4096

[performance]
max-procs = 16

3.1.3 PD配置示例

# PD配置文件 (pd.toml)
[server]
leader-priority = 1

[pd]
data-dir = “/tidb/fgdata/pd”

[schedule]
max-snapshot-count = 3
max-pending-peer-count = 16

3.2 网络配置要求

网络配置要点:

  • 所有节点之间网络互通
  • 开放必要的端口:TiDB(4000, 10080)、TiKV(20160, 20180)、PD(2379, 2380)
  • 关闭防火墙或配置相应规则
  • 配置主机名解析
# 配置主机名解析
$ cat >> /etc/hosts << EOF 192.168.1.101 fgedu-tidb-01.fgedu.net.cn 192.168.1.102 fgedu-tidb-02.fgedu.net.cn 192.168.1.103 fgedu-tikv-01.fgedu.net.cn 192.168.1.104 fgedu-tikv-02.fgedu.net.cn 192.168.1.105 fgedu-tikv-03.fgedu.net.cn 192.168.1.106 fgedu-pd-01.fgedu.net.cn 192.168.1.107 fgedu-pd-02.fgedu.net.cn 192.168.1.108 fgedu-pd-03.fgedu.net.cn EOF # 测试网络连通性 $ ping fgedu-tidb-01.fgedu.net.cn $ telnet fgedu-tidb-01.fgedu.net.cn 4000

3.3 安全考虑因素

安全配置要点:

  • 设置强密码
  • 限制访问IP
  • 启用SSL/TLS
  • 定期备份
  • 监控和审计
风哥提示:在生产环境中,安全配置是必不可少的,应根据企业安全规范进行配置。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 架构实战案例

4.1.1 三节点TiKV集群部署

# 查看集群状态
$ tiup cluster display fgedu-tidb-cluster

Cluster type: tidb
Cluster name: fgedu-tidb-cluster
Cluster version: v7.5.0
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.168.1.101:2379/dashboard

ID Role Host Ports Status Data Dir
— —- —- —– —— ——–
192.168.1.101:9000 pd 192.168.1.101 2379/2380 Up /tidb/fgdata/pd
192.168.1.102:9000 pd 192.168.1.102 2379/2380 Up /tidb/fgdata/pd
192.168.1.103:9000 pd 192.168.1.103 2379/2380 Up /tidb/fgdata/pd
192.168.1.104:9000 tikv 192.168.1.104 20160/20180/20190/20200/20210/20220 Up /tidb/fgdata/tikv
192.168.1.105:9000 tikv 192.168.1.105 20160/20180/20190/20200/20210/20220 Up /tidb/fgdata/tikv
192.168.1.106:9000 tikv 192.168.1.106 20160/20180/20190/20200/20210/20220 Up /tidb/fgdata/tikv
192.168.1.107:9000 tidb 192.168.1.107 4000/10080 Up /tidb/fgdata/tidb
192.168.1.108:9000 tidb 192.168.1.108 4000/10080 Up /tidb/fgdata/tidb

4.1.2 查看TiKV节点状态

# 查看TiKV节点状态
$ curl http://192.168.1.104:20180/status
{
“server”: {
“version”: “7.5.0”,
“git_hash”: “abcdef1234”,
“start_timestamp”: 1709289600,
“uptime”: “1d 2h 3m 4s”
},
“store”: {
“id”: 1,
“state”: “Up”,
“capacity”: “1.82 TiB”,
“available”: “1.5 TiB”,
“leader_count”: 1234,
“leader_weight”: 1,
“region_count”: 4567,
“region_weight”: 1
}
}

4.2 组件管理实战

4.2.1 查看PD集群状态

# 查看PD集群状态
$ pd-ctl -u http://192.168.1.101:2379 cluster
{
“id”: “fgedu-tidb-cluster”,
“members”: [
{
“name”: “pd-1”,
“id”: 1,
“peerURLs”: [“http://192.168.1.101:2380”],
“clientURLs”: [“http://192.168.1.101:2379”],
“leader”: true
},
{
“name”: “pd-2”,
“id”: 2,
“peerURLs”: [“http://192.168.1.102:2380”],
“clientURLs”: [“http://192.168.1.102:2379”],
“leader”: false
},
{
“name”: “pd-3”,
“id”: 3,
“peerURLs”: [“http://192.168.1.103:2380”],
“clientURLs”: [“http://192.168.1.103:2379”],
“leader”: false
}
]
}

4.2.2 查看TiDB节点状态

# 查看TiDB节点状态
$ curl http://192.168.1.107:10080/status
{
“connections”: 10,
“version”: “7.5.0”,
“git_hash”: “abcdef1234”,
“uptime”: “1d 2h 3m 4s”,
“grpc_connections”: 5,
“idle_connections”: 8,
“txn_total”: 123456,
“query_total”: 789012
}

4.3 性能调优实战

4.3.1 查看慢查询

# 查看慢查询
$ curl http://192.168.1.107:10080/info/slow-queries
[
{
“ts”: “2026-04-09 10:00:00”,
“query”: “SELECT * FROM fgedu_users WHERE age > 30”,
“duration”: 1000,
“plan”: “…”
}
]

4.3.2 查看执行计划

# 连接TiDB并查看执行计划
$ mysql -h 192.168.1.107 -P 4000 -u root -p

mysql> EXPLAIN SELECT * FROM fgedu_users WHERE age > 30;
+————————+———-+———–+—————+——————————–+
| id | estRows | task | access object | operator info |
+————————+———-+———–+—————+——————————–+
| TableReader_7 | 10000.00 | root | | data:Selection_6 |
| └─Selection_6 | 10000.00 | cop[tikv] | | gt(fgedu_users.age, 30) |
| └─TableScan_5 | 50000.00 | cop[tikv] | table:fgedu_users | keep order:false, stats:pseudo |
+————————+———-+———–+—————+——————————–+
3 rows in set (0.00 sec)

生产环境建议:定期监控慢查询,优化执行计划,确保系统性能稳定。from tidb视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 生产最佳实践

TiDB生产环境最佳实践:

  • 架构设计:根据业务规模选择合适的部署架构
  • 硬件选型:优先选择NVMe SSD和万兆网络
  • 参数调优:根据实际负载调整各组件参数
  • 监控告警:部署Prometheus和Grafana监控
  • 备份策略:制定完善的备份和恢复方案
  • 容灾方案:考虑多机房部署和异地灾备

5.2 常见问题与解决方案

5.2.1 TiKV节点磁盘满

# 问题现象:TiKV节点磁盘使用率高
# 解决方案:
1. 清理过期数据
2. 调整数据保留策略
3. 扩容TiKV节点
4. 检查是否有异常大的表

# 预防措施:
– 监控磁盘使用率
– 定期清理过期数据
– 合理规划存储容量

5.2.2 PD集群 leader 选举失败

# 问题现象:PD集群无法选举leader
# 解决方案:
1. 检查网络连接
2. 检查PD节点状态
3. 重启故障节点
4. 重建PD集群(最坏情况)

# 预防措施:
– 确保PD节点网络稳定
– 配置PD节点高可用
– 监控PD集群状态

TiDB技术发展趋势:

  • HTAP能力增强:进一步提升OLAP性能
  • 云原生支持:更好的Kubernetes集成
  • 智能运维:自动化故障检测和处理
  • 多租户支持:更好的资源隔离
  • 生态系统完善:更多工具和集成方案
风哥提示:TiDB作为国产分布式数据库的代表,正在不断发展壮大,建议持续关注其新特性和最佳实践。

持续学习:TiDB技术发展迅速,建议定期查看官方文档和社区动态,不断提升运维和开发技能。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息