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 集群的整个生命周期。