与传统的单机数据库相比,TiDB 具有以下优势:
1)纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
2)支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL
3)默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
4)支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账
5)具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景
TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。
PD (Placement Driver) Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。
存储节点
1)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 中的数据都会自动维护多副本(默认为三副本),天然支持高可用和自动故障转移。
2)TiFlash:TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。
帮助文档:https://docs.pingcap.com/zh/
社区版地址:https://cn.pingcap.com/product-community
#创建用户
adduser tidb
#设置密码
passwd tidb
配置免密登录
编辑/etc/sudoers文件,文末加入:
tidb ALL=(ALL) NOPASSWD:ALL
如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令,
或者允许某些用户使用sudo时不需要输入密码,一般修改/etc/sudoers文件
cat >> /etc/sudoers << "EOF"
tidb ALL=(ALL) NOPASSWD:ALL
EOF
切换用户
su - tidb
执行命令,一直按回车键就行
ssh-keygen -t rsa
解压安装包安装
1.切换到tidb用户,新建以下两个目录
mkdir tidb-deploy
mkdir tidb-data
2.解压Tidb server安装包
chmod +x tidb-community*
tar -zxvf tidb-community-server-v6.3.0-linux-amd64.tar.gz
3.执行instal文件
sh /home/tidb/tidb-community-server-v6.3.0-linux-amd64/local_install.sh
根据完成后提示中的第一点,执行如下命令,具体命令根据提示中的来:
1. source /home/tidb/.bash_profile
2. Have a try: tiup playground
至此,TiDB安装所需的组件已经安装完成
配置初始化参数文件
1)集群初始化配置文件需要手动编写,在tidb用户根目录创建 YAML 格式配置文件, 下面是我的配置文件 topology.yaml
2)第二种方法; 执行如下命令,生成集群初始化配置文件: tiup cluster template > topology.yaml
cat >> /home/tidb/topology.yaml << "EOF"
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/home/tidb/tidb-deploy"
data_dir: "/home/tidb/tidb-data"
server_configs: {}
pd_servers:
- host: 192.168.1.54
tidb_servers:
- host: 192.168.1.54
tikv_servers:
- host: 192.168.1.54
monitoring_servers:
- host: 192.168.1.54
grafana_servers:
- host: 192.168.1.54
alertmanager_servers:
- host: 192.168.1.54
EOF
--以下为生产集群部署命令
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
server_configs: {}
pd_servers:
- host: 10.0.1.4
- host: 10.0.1.5
- host: 10.0.1.6
tidb_servers:
- host: 10.0.1.7
- host: 10.0.1.8
- host: 10.0.1.9
tikv_servers:
- host: 10.0.1.1
- host: 10.0.1.2
- host: 10.0.1.3
monitoring_servers:
- host: 10.0.1.4
grafana_servers:
- host: 10.0.1.4
alertmanager_servers:
- host: 10.0.1.4
部署集群
部署命令
tiup cluster deploy tidb-test v6.3.0 ./topology.yaml --user tidb -p Cluster tidb-test deployed successfully, you can start it with command: tiup cluster start tidb-test --init
参数说明:
1) 通过 TiUP cluster 部署的集群名称为 tidb-test
2)部署版本为 v6.3.0,其他版本可以执行 tiup list tidb 获取
[tidb@jeames ~]$ tiup list tidb
Available versions for tidb:
Version Installed Release Platforms
------- --------- ------- ---------
v6.3.0 YES 2022-09-30T11:00:18+08:00 linux/amd64
3)初始化配置文件为 topology.yaml
4)--user tidb:通过 tidb 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。
5) [-i] 及 [-p]:非必选项,如果已经配置免密登陆目标机,则不需填写。否则选择其一即可,[-i] 为可登录到部署机 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码
如无意外,会出现successfully的提示信息
命令 tiup cluster deploy 用于部署一个全新的集群。
Enabling component pd
Enabling instance 192.168.1.54:2379
Enable instance 192.168.1.54:2379 success
Enabling component tikv
Enabling instance 192.168.1.54:20160
Enable instance 192.168.1.54:20160 success
Enabling component tidb
Enabling instance 192.168.1.54:4000
Enable instance 192.168.1.54:4000 success
Enabling component prometheus
Enabling instance 192.168.1.54:9090
Enable instance 192.168.1.54:9090 success
Enabling component grafana
Enabling instance 192.168.1.54:3000
Enable instance 192.168.1.54:3000 success
Enabling component alertmanager
Enabling instance 192.168.1.54:9093
Enable instance 192.168.1.54:9093 success
Enabling component node_exporter
Enabling instance 192.168.1.54
Enable 192.168.1.54 success
Enabling component blackbox_exporter
Enabling instance 192.168.1.54
Enable 192.168.1.54 success
Cluster `tidb-test` deployed successfully, you can start it with command: `tiup cluster start tidb-test --init`
启动集群:
tiup cluster start tidb-test --init
检查集群状态,命令:tiup cluster display tidb-test
tiup cluster display tidb-test
以上输出的结果中,可以看到tidb的端口号是4000,pd运维端口是2379。我们通过Navicat这种工具连接数据库是使用4000端口,默认密码上面已经提示: The new password is: 'Z2h^q6tBV7058bn&=%'
连接测试:
几个关键组件信息:
1)Pd:元数据及控制调度组件
2)Tikv:存储组件
3)Tidb:数据库实例组件
4)Tiflash:闪存组件
Tidb虽然和mysql类似,但是它厉害在分布式,如果要使用mysql,数据库变大后,要思考虑分库分表、使用mycat等数据路由工具,Tidb设计从底层一开始分布式,类似hdfs的存储架构,将分布式做成一种原生的架构。
因为TiDB内核是MySQL,所以直接用Navicat工具选择连接MySQL就行: 使用Navicat登录进去后,可以看到目前最新版本的TiDB的MySQL内核是:5.7.25
集群命令:
集群部署成功后,可以通过 tiup cluster list 命令在集群列表中查看该集群
启动: tiup cluster start tidb-test
检查状态:tiup cluster display tidb-test