TiDB 是由 PingCAP 开发的一款开源分布式 SQL 数据库,支持事务处理和实时分析。它与 Kubernetes 的结合使得数据库能够实现云原生化,具备弹性扩展、自动故障转移等特性。

TiDB 是一个分布式数据库系统,具有以下特点:

  • HTAP 支持:同时支持事务处理(OLTP)和分析处理(OLAP)。
  • 高可用性:通过 Raft 协议实现数据强一致性和容错。
  • 云原生架构:适配 Kubernetes,支持自动化管理和弹性扩展。
  • MySQL 兼容:支持 MySQL 协议,易于迁移现有应用。

TiDB 的核心组件包括:

  • TiDB Server:无状态 SQL 层,负责解析 SQL 并协调数据存储。
  • TiKV:分布式事务型键值存储。
  • Placement Driver (PD):负责集群元数据管理和调度。

简要原理

TiDB 采用分层架构

  • TiDB Server: 无状态 SQL 层,负责 SQL 解析和优化
  • TiKV: 分布式键值存储层,负责实际数据存储
    • TiKV 将数据自动分片为多个 Region,每个 Region 负责特定的 Key Range。Region 可以在 TiKV 节点间动态调度,实现负载均衡。
  • Placement Driver (PD): 元数据管理和调度中心

计算和存储得到分离,可以在线添加或删除节点,无需停机。PD 自动进行数据再平衡和负载均衡。

TiDB 使用 [[Raft 算法]]来管理数据复制和一致性。

  • 每个 Region 有多个副本,组成一个 Raft Group
  • Raft 确保只要大多数节点正常,数据就能保持一致
  • 支持自动故障转移,提高可用性

分布式事务

TiDB 采用[两阶段提交]协议和 [[Percolator 算法]]实现分布式事务

  • 使用全局唯一的时间戳作为事务 ID
  • PD 负责生成单调递增的时间戳
  • 支持快照隔离级别,保证 ACID 特性

k8s 部署 TiDB

前提条件

  • 确保 Kubernetes 版本 >= v1.24
  • 安装 Helm 3
  • 安装 Docker (版本 >= 18.09)

部署 TiDB Operator CRD

安装 TiDB Operator CRD:

kubectl create -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.6.1/manifests/crd.yaml

使用 Helm 安装 TiDB Operator:

helm repo add pingcap https://charts.pingcap.org/
helm install tidb-operator pingcap/tidb-operator --version v1.6.1

部署 TiDB 集群

创建 namespace

kubectl create namespace tidb-cluster

下载配置

curl -O https://raw.githubusercontent.com/pingcap/tidb-operator/v1.6.1/examples/advanced/tidb-cluster.yaml

例如 tidb-cluster.yaml ,修改文件内容以满足需求,例如设置副本数、存储大小等。

比如默认的 namespace 修改为 tidb-cluster

使用 kubectl 创建 TiDB 集群:

kubectl -n tidb-cluster apply -f tidb-cluster.yaml

等待所有 Pod 进入 Running 状态

kubectl get pods -n tidb-cluster

TiDB 服务默认通过 NodePort 暴露,可以通过以下命令查看服务端口:

kubectl -n tidb-cluster get svc

端口映射

kubectl port-forward svc/advanced-tidb-tidb 4000:4000 -n tidb-cluster

可以使用 MySQL 客户端连接 TiDB 集群的服务端口。

sudo apt install mysql-client

mysql --host 127.0.0.1 --port 4000 -u root -p --comments

TiDB Operator 会负责管理 TiDB 集群的整个生命周期。