TiDB 学习笔记(二)

引言

TiDB Academy 提供了 TiDB 的视频学习资源,方便了解这个全新的数据库。在学习过程中,做了这个系列的笔记,方便后期回顾。

TiDB 平台

TiDB Arch

虽说 TiDB 在上层实现了 MySQL 协议,但并不代表它们使用的是相同的源码。之所叫做 TiDB 平台,是因为它是由三个核心部分构成:

  1. TiKV:

    1. 兼容 ACID 的存储层
    2. 支持分布式 Key Value 存储
    3. 支持横向扩展、原生多副本机制保证高可用
    4. 自动基于范围分区,每个范围都称为一个 RegionRegion 会根据需要自动调整,默认最大为 96MB
    5. 每个 Region 默认有三分拷贝,使用 Raft 保证一致性
    6. 当然,实际上 TiKV 也可以独立部署,并直接使用它的 KV API 访问数据
  2. TiDB:

    1. 支持 MySQL 协议,自动转换成分布式请求到 TiKV
    2. 无状态、不存储数据
    3. 易于水平扩展,高可用
    4. 类似一个 Translator,但是这里面的协同处理很有意思
  3. Placement Driver (PD):

    1. 集群管理器,就是整个平台的大脑
    2. 管理 TiKV Region 负载均衡(比如热点检查、Region 合并)
    3. 元数据管理(如 SQL DDL)
    4. 时间同步(分布式事务中很关键的一点就是准确的时间)
  4. 可选组件:TiSpark:

    1. 越过 SQL 层,让 Apache Spark 直接与 TiKV 连接
    2. 方便执行复杂的 OLAP 查询、机器学习任务

从 TiDB 平台这种组件化的架构设计可以看到,你可以直接通过不同的方式(Spark、MySQL 协议、Key-Value API 等)访问同样的数据(位于 TiKV 中),而无需走传统的 ETL (Extract-Transform-Load) 那套。

有了 TiDB 平台,就可以同时支持 OLAP 和 OLTP 场景了(传说中的混合模式 HATP)。这样,原先我们用 MySQL 应付 OLTP 场景,用 Hadoop, HBase 或者 Cassandra 等应付 OLAP 场景,都可以在 TiDB 这一个平台完成,从而简化设计和维护工作(真的吗?)。

KOST 技术栈

KOST 是指:Kubernetes, Operator, SparkTiDB。K8S 可以帮助我们一步到位搞定 TiDB 平台部署。

在 GKE 上部署 TiDB

直接看这个部署教程

一些提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. Watch tidb-cluster up and running
watch kubectl get pods --namespace tidb -l app.kubernetes.io/instance=tidb -o wide
2. List services in the tidb-cluster
kubectl get services --namespace tidb -l app.kubernetes.io/instance=tidb
3. Wait until tidb-initializer pod becomes completed
watch kubectl get po --namespace tidb -l app.kubernetes.io/component=tidb-initializer
4. Get the TiDB password
PASSWORD=$(kubectl get secret -n tidb demo-tidb -o jsonpath="{.data.password}" | base64 -d | awk '{print $6}')
echo ${PASSWORD}
5. Access tidb-cluster using the MySQL client
kubectl port-forward -n tidb svc/demo-tidb 4000:4000 &
mysql -h 127.0.0.1 -P 4000 -u root -D test -p
6. View monitor dashboard for TiDB cluster
kubectl port-forward -n tidb svc/demo-grafana 3000:3000
Open browser at http://localhost:3000. The default username and password is admin/admin.

使用 MySQL 客户端连接:

1
2
3
4
5
kubectl run -n tidb mysql-client --rm \
-i --tty --image mysql -- mysql \
-P 4000 -u root -h $(kubectl get \
svc demo-tidb -n tidb --output \
json | jq -r '.spec.clusterIP')

或者建立隧道:

1
2
3
4
5
6
7
kubectl -n tidb port-forward \
demo-tidb-0 4000:4000 &>/dev/null \
&

sudo apt-get install -y mysql-client \
&&
mysql -h 127.0.0.1 -u root -P 4000

貌似现在根本连接不上了,总是提示需要密码,但是默认不是不需要密码的吗?看来需要重建集群,然后首次进入就设置好密码。用户管理参考:TiDB User Account Management

0%