一. TiDB特点

TiDB 是用 GO语言开发的一款国产的分布式的关系型数据库,其官方介绍为 : 是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品,TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

二.TiDB 定位

TiDB 主要应用在大规模,高可用的场景下, 主要为解决 Mysql 单表数据量过大,需要分库分表的场景下数据查询和维护困难的痛点,其底层直接用分片和合并技术进行存储,可以做到弹性扩展。

三.TiDB底层架构

TiDB 官方架构图如下:

image.png
主要由四部分组成:
1. TiDB Server : SQL 语句连接和解析层,类似于Mysql , 不存储数据,主要作用是SQL解析和优化
2. PD Server : TiDB 的集群管理中心,主要作用为进行调度和管理TiKV 节点功能,还提供分布式事务ID生成
3. TiKV Server : 负责存储数据, 类似于 innoDB, TiKV这里也分为两部分,一是采用Nosql 的KV存储方式加快查询速度 ,二是持久化到磁盘采用了RockDB,RockDB负责持久化,其底层采用了LSM_tree的数据结构, 顺序写时会有非常大的写入速度
4. Ti Flash : 这个有点特殊,采用了列式存储方式,类型于 ClickHouse, 主要用于大数据的分析查询
可以看到, TiDB 基本上把 Mysql, Nosql, ClickHouse 的优点都结合了起来, 在应对超大规模数据分析上可以直接进行替换

四. 与Mysql的兼容性

官方宣称与Mysql 能达到90%以上的兼容性,包括客户端连接,SQL查询语句,基本可以做到不用修改代码就能直接替换Mysql, 事实上也确实如此,主流的客户端工具 Navicat、MySQL Workbench 基本上直接把端口改掉,就能连接成功,对库表的操作也与Mysql 操作无异, 可以做到平滑切换,不过有些特性是不支持的, 如存储过程和触发器等,不过这些其实也很少用,所以影响不是很大。

五. 部署难度

因为TiDB 定位是分布式数据库, 所以需要集群部署才能发挥到TiDB的优势 ,同时自带了监控管理平台,使得TiDB集群的配置比较复杂,如官方自带的安装包里除了包括自带的 tidb-server, tikv-server, pd-server ,还包括了 prometheus, grafana, node_exporter, playground等监控管理
平台, 使得整套系统需要大量的资源,所以官方也在强调 “ 强烈推荐使用更高的配置” 。
一套完整的分布式系统需要开放以下端口, 可以看出对资源的使用是相当高的

组件 默认端口 说明
TiDB 4000 应用及 DBA 工具访问通信端口
TiDB 10080 TiDB 状态信息上报通信端口
TiKV 20160 TiKV 通信端口
TiKV 20180 TiKV 状态信息上报通信端口
PD 2379 提供 TiDB 和 PD 通信端口
PD 2380 PD 集群节点间通信端口
TiFlash 9000 TiFlash TCP 服务端口
TiFlash 8123 TiFlash HTTP 服务端口
TiFlash 3930 TiFlash RAFT 服务和 Coprocessor 服务端口
TiFlash 20170 TiFlash Proxy 服务端口
TiFlash 20292 Prometheus 拉取 TiFlash Proxy metrics 端口
TiFlash 8234 Prometheus 拉取 TiFlash metrics 端口
Pump 8250 Pump 通信端口
Drainer 8249 Drainer 通信端口
CDC 8300 CDC 通信接口
Monitoring 9090 Prometheus 服务通信端口
Monitoring 20120 NgMonitoring 服务通信端口
Node_exporter 9100 TiDB 集群每个节点的系统信息上报通信端口
Blackbox_exporter 9115 Blackbox_exporter 通信端口,用于 TiDB 集群端口监控
Grafana 3000 Web 监控服务对外服务和客户端(浏览器)访问端口
Alertmanager 9093 告警 web 服务端口
Alertmanager 9094 告警通信端口

六 , 应用

服务器离线情况下,可以先下载离线包,tidb-community-server-v6.0.0-linux-amd64.tar.gz 和
tidb-community-toolkit-v6.0.0-linux-amd64.tar.gz(可选), 然后解压,会得到一个local_install.sh 文件, 直接 执行,会设置系统环境变量, 即把tiup 可执行程序 加入到环境变量中
然后执行 tiup playground
直接执行tiup playground 仅限本地机器访问, 如果需要远程访问,需要 tiup playground —host 192.168.1.83 ,
同时可以指定 tidb, tikv 的节点数
tiup playground v4.0.0 —db 2 —pd 3 —kv 3 —monitor
v4.0.0 为指定tidb版本号,离线一般不用

tiup playground —host 192.168.1.83 —db 1 —pd 1 —kv 3 —monitor
Waiting for tidb instances ready
192.168.1.83:4000 … Error
To view the dashboard: http://192.168.1.83:2379/dashboard
PD client endpoints: [192.168.1.83:2379]
To view the Prometheus: http://192.168.1.83:9090
To view the Grafana: http://192.168.1.83:3000
启动后, 监控运维平台是 http://192.168.1.83:2379/dashboard,也就是pd的启动服务
tidb 为 192.168.1.83:4000 , 对外连接 IP和端口,
tikv 里面的端口就不用管了

用户名和密码
mysql:root/空
dashboard: root/空
Prometheus: 不需要
Grafana:admin/admin