首先 TiDB 是开源分布式关系型数据库,据官方说法它是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库。
很重要的一点是TiDB 兼容 MySQL 5.7 协议和 MySQL 生态等重要特性,对于DBA 和开人员来说学习成本较低。
但是也有以下不兼容的特性:
不支持存MySQL 储过程,函数,触发器,外键
不支持全文索引,空间函数,create table ... as select 用法
在内核设计上,TiDB 分布式数据库将整体架构拆分成了多个模块,各模块之间互相通信,组成完整的 TiDB 系统。对应的架构图如下:
TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。
TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址。
客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。
TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。
TiDB 100% 兼容MySQL 5.7 链接协议,支持mysql 客户端链接,workbench 也可以链接。
PD (Placement Driver) Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构。
提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。
此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。
存储节点
TiKV Server:负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。
TiKV 的 API 在 KV 键值对层面提供对分布式事务的原生支持,默认提供了 SI (Snapshot Isolation) 的隔离级别,这也是 TiDB 在 SQL 层面支持分布式事务的核心。
TiDB 的 SQL 层做完 SQL 解析后,会将 SQL 的执行计划转换为对 TiKV API 的实际调用。所以,数据都存储在 TiKV 中。
另外,TiKV 中的数据都会自动维护多副本(默认为三副本),天然支持高可用和自动故障转移。
TiFlash:TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。
TiDB 支持 Intel 架构服务器环境、ARM 架构的服务器环境及主流虚拟化环境,并支持绝大多数的主流硬件网络。
TiDB 支持主流的 Linux 操作系统环境,在 v7.1 LTS 版本中,针对不同操作系统和 CPU 架构的组合,TiDB 提供不同级别质量标准的支持。
在以下操作系统以及对应的 CPU 架构组合上,TiDB 可满足企业级生产质量的要求,产品特性经过全面且系统化的验证:
TiDB 安装简介
安装按环境基于Vmwar 虚拟机环境,资源配置较低,只作为功能性演示。
总共建立了10个虚拟机:192.168.31.101 ~ 192.168.31.110,root 用户设置为相同密码。
192.168.31.101 用来安装MySQL 8.0.34 做一些辅助测试。
192.168.31.102 ~ 192.168.31.110 用来安装 TiDB 数据库集群,节点规划见 topology.yaml.
安装方式使用tiup 在线安装,tiup 工具起源TiDB 4.0 版本,既可用于安装部署 TiDB 集群,也可以用于管理TiDB集群。
安装tiup 工具
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
导入环境变量
source /root/.bash_profile
安装cluster 组件
tiup cluster
生成模板
tiup cluster template > topology.yaml
节点规划:
TiDB server:2 节点,PD server:3节点,Tikv server:3节点,Tiflash :1节点
监控服务器部署在 192.168.31.103 。
共计9个节点,每个节点2cpu,2GB RAM ,50GB disk.
更具规划修改配置文件
vi topology.yaml
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
tidb_servers:
- host: 192.168.31.102
- host: 192.168.31.103
pd_servers:
- host: 192.168.31.104
- host: 192.168.31.105
- host: 192.168.31.106
tikv_servers:
- host: 192.168.31.107
- host: 192.168.31.108
- host: 192.168.31.109
tiflash_servers:
- host: 192.168.31.110
data_dir: /tidb-data/tiflash-9000
deploy_dir: /tidb-deploy/tiflash-9000
monitoring_servers:
- host: 192.168.31.103
grafana_servers:
- host: 192.168.31.103
alertmanager_servers:
- host: 192.168.31.103
运行下面的命令检查集群是否符合安装条件:
tiup cluster check ./topology.yaml --user root -p
常见不符有:
1.THP特性没有禁用
禁用THP:
[root@localhost ~]# vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
2.irqbalance 无法启动,numactl 没有安装
yum install numactl -y
在单核虚拟机上irqbalance 无法启动,添加为双核恢复正常
3.数据分区挂在特性没有添加 noatime
vi /etc/fstab 添加 noatime
其他不符合的条件,通常可以通过自动修复命令自动修复:
tiup cluster check ./topology.yaml --apply --user root -p
修复后再次检测
tiup cluster check ./topology.yaml --user root -p
部署 TiDB 集群(当前最新版本是v7.1.1):
tiup cluster deploy tidb-test v6.1.0 ./topology.yaml --user root -p
查看已经安装的集群:
tiup cluster list
tiup is checking updates for component cluster ...
Starting component `cluster`: /root/.tiup/components/cluster/v1.12.5/tiup-cluster list
Name User Version Path PrivateKey
---- ---- ------- ---- ----------
tidb-test tidb v6.1.0 /root/.tiup/storage/cluster/clusters/tidb-test /root/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa
安全启动tidb 集群,提示中包含初始密码:
tiup cluster start tidb-test --init
Started cluster `tidb-test` successfully
The root password of TiDB database has been changed.
The new password is: 's_DBef2*@8wh67-J51'.
查看集群状态
tiup cluster display tidb-test
Cluster name: tidb-test
Cluster version: v6.1.0
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.168.31.106:2379/dashboard ##tidb dashboard 运行在PD 节点上,端口是2379
Grafana URL: http://192.168.31.103:3000 ##监控地址是,默认用户名和密码都是admin
关闭集群:
tiup cluster stop tidb-test
禁止开机启动集群
tiup cluster disable tidb-test
TiDB 集群启动顺序
+ [ Serial ] - StartCluster
Starting component pd
Starting component tikv
Starting component tidb
Starting component tiflash
Starting component prometheus
Starting component grafana
Starting component alertmanager
Starting component node_exporter
Starting component blackbox_exporter
+ [ Serial ] - UpdateTopology: cluster=tidb-test
Started cluster `tidb-test` successfully
TiDB 的关闭顺序
+ [ Serial ] - StopCluster
Stopping component alertmanager
Stopping component grafana
Stopping component prometheus
Stopping component tiflash
Stopping component tidb
Stopping component tikv
Stopping component pd
Stopping component node_exporter
Stopping component blackbox_exporter
Stopped cluster `tidb-test` successfully
tiup cluster destroy tidb-test
用于销毁集群
先停止集群
对于每个服务节点,删除其日志目录,部署目录,数据目录
如果各个服务的数据目录/部署目录的父目录是由 tiup-cluster 创建的,也一并删除
tiup cluster clean tidb-test
用于清空重置数据库
它会停止集群,然后删除集群上的数据。
手工重启集群之后,就能得到一个全新的集群了。