首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【赵渝强老师】TiDB的底层存储机制

【赵渝强老师】TiDB的底层存储机制

原创
作者头像
赵渝强老师
发布2025-09-29 10:51:46
发布2025-09-29 10:51:46
1730
举报
文章被收录于专栏:TiDBTiDB

在内核设计上,TiDB分布式数据库将整体架构拆分成了多个模块,各模块之间互相通信,组成完整的TiDB系统。对应的架构图如下:

与传统的单机数据库相比,TiDB具有以下优势:

  • 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
  • 支持SQL,对外暴露MySQL的网络协议,并兼容大多数MySQL的语法,在大多数场景下可以直接替换MySQL
  • 默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
  • 支持ACID事务,对于一些有强一致需求的场景友好,例如:银行转账
  • 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景

视频讲解如下:

一、 TiDB与RocksDB

TiDB最终将数据写入底层的RocksDB中。RocksDB是由Facebook基于LevelDB开发的一款提供键值存储与读写功能的LSM-tree架构引擎。用户写入的键值对会先写入磁盘上的WAL(Write Ahead Log),然后再写入内存中的跳表(Skip List,这部分结构又被称作MemTable)。LSM-tree引擎由于将用户的随机修改(插入)转化为了对WAL文件的顺序写,因此具有比B树类存储引擎更高的写吞吐。内存中的数据达到一定阈值后,会刷到磁盘上生成SST文件(Sorted String Table),SST又分为多层(默认至多6层),每一层的数据达到一定阈值后会挑选一部分SST合并到下一层,每一层的数据是上一层的10倍(因此90%的数据存储在最后一层)。

每个TiKV实例中有两个RocksDB实例,一个用于存储Raft日志(通常被称为raftdb),另一个用于存储用户数据以及MVCC信息(通常被称为kvdb)。kvdb中有四个Column Family:raft、lock、default和write,具体说明如下表所示。

二、 使用二进制包离线部署TiDB数据库集群

在一些企业的生产环境中无法访问外部的网络,此时如果部署TiDB数据库集群就需要使用二进制包方式进行部署。在TiDB的官方网站上提供不同版本的二进制包,如下图所示。

从这里可以看出,目前TiDB最新的版本是v8.5.1。需要下载以下两个安装包文件:

代码语言:powershell
复制
tidb-community-server-v8.5.1-linux-amd64.tar.gz
tidb-community-toolkit-v8.5.1-linux-amd64.tar.gz

TiDB的离线部署与在线部署类型非常类似,唯一的区别就是:离线部署模式下需要将TiDB的镜像源设置为本地目录;而在线部署模式下TiDB的镜像源为官方仓库地址。下面命令的输出信息展示了在线部署模式下TiDB的镜像源地址。

代码语言:powershell
复制
tiup mirror show

# 输出信息如下:
https://tiup-mirrors.pingcap.com

下表展示了TiDB全分布式集群中包含的实例信息。

与伪分布集群部署类似,在部署全分布集群时需要配置中控节点与其余各节点的免密码登录。以下步骤均在中控节点上执行。

(1)将离线包发送到目标集群的中控机后,执行以下命令安装TiUP组件。

代码语言:powershell
复制
tar xzvf tidb-community-server-v8.5.1-linux-amd64.tar.gz && \
sh tidb-community-server-v8.5.1-linux-amd64/local_install.sh && \
source /root/.bash_profile

local_install.sh 脚本会自动执行命令:
tiup mirror set tidb-community-server-v8.5.1-linux-amd64
将当前镜像地址设置为 tidb-community-server-v8.5.1-linux-amd64。

(2)执行命令确定TiDB镜像地址是否为本地目录。

代码语言:powershell
复制
tiup mirror show

# 输出信息如下:
/root/tools/tidb-community-server-v8.5.1-linux-amd64

(3)执行下面的命令将tidb-community-toolkit-v8.5.1-linux-amd64.tar.gz合并到本地镜像地址中。

代码语言:powershell
复制
tar xf tidb-community-toolkit-v8.5.1-linux-amd64.tar.gz
ls -ld tidb-community-server-v8.5.1-linux-amd64 tidb-community-toolkit-v8.5.1-linux-amd64
cd tidb-community-server-v8.5.1-linux-amd64/
cp -rp keys ~/.tiup/
tiup mirror merge ../tidb-community-toolkit-v8.5.1-linux-amd64

(4)部署TiDB集群的yaml文件如下:

代码语言:yaml
复制
# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
 user: "tidb"
 ssh_port: 22
 deploy_dir: "/tidb-deploy"
 data_dir: "/tidb-data"

# # Monitored variables are applied to all the machines.
monitored:
 node_exporter_port: 9100
 blackbox_exporter_port: 9115

server_configs:
 tidb:
   instance.tidb_slow_log_threshold: 300
 tikv:
   readpool.storage.use-unified-pool: false
   readpool.coprocessor.use-unified-pool: true
 pd:
   replication.enable-placement-rules: true
   replication.location-labels: ["host"]
 tiflash:
   logger.level: "info"

pd_servers:
 - host: 192.168.79.11
 - host: 192.168.79.12
 - host: 192.168.79.13

tidb_servers:
 - host: 192.168.79.11
   port: 4000
   status_port: 10080
   
 - host: 192.168.79.12 
   port: 4001
   status_port: 10081

tikv_servers:
 - host: 192.168.79.11
   config:
     server.labels: { host: "Beijing" }   

 - host: 192.168.79.12
   config:
     server.labels: { host: "Shanghai" }   

 - host: 192.168.79.13
   config:
     server.labels: { host: "Chongqing" }   

tiflash_servers:
 - host: 192.168.79.14

monitoring_servers:
 - host: 192.168.79.14
   port: 7788

grafana_servers:
 - host: 192.168.79.14

(5)当准备好了topo.yaml文件后,执行下面的命令部署TiDB数据库集群。

代码语言:powershell
复制
tiup cluster deploy mytidb-cluster v8.5.1 ./topo.yaml --user root

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 TiDB与RocksDB
  • 二、 使用二进制包离线部署TiDB数据库集群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档