TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
TiDB数据库在国产数据库3月份排行榜中,依旧是排行榜首:
得益于 TiDB 存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。
数据采用多副本存储,数据副本通过 Multi-Raft 协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略满足不同容灾级别的要求。
提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。
兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。
众所周知,金融行业对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高。传统的解决方案是同城两个机房提供服务、异地一个机房提供数据容灾能力但不提供服务,此解决方案存在以下缺点:资源利用率低、维护成本高、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) 无法真实达到企业所期望的值。TiDB 采用多副本 + Multi-Raft 协议的方式将数据调度到不同的机房、机架、机器,当部分机器出现故障时系统可自动进行切换,确保系统的 RTO <= 30s 及 RPO = 0。
随着业务的高速发展,数据呈现爆炸性的增长,传统的单机数据库无法满足因数据爆炸性的增长对数据库的容量要求,可行方案是采用分库分表的中间件产品或者 NewSQL 数据库替代、采用高端的存储设备等,其中性价比最大的是 NewSQL 数据库,例如:TiDB。TiDB 采用计算、存储分离的架构,可对计算、存储分别进行扩容和缩容,计算最大支持 512 节点,每个节点最大支持 1000 并发,集群容量最大支持 PB 级别。
随着 5G、物联网、人工智能的高速发展,企业所生产的数据会越来越多,其规模可能达到数百 TB 甚至 PB 级别,传统的解决方案是通过 OLTP 型数据库处理在线联机交易业务,通过 ETL 工具将数据同步到 OLAP 型数据库进行数据分析,这种处理方案存在存储成本高、实时性差等多方面的问题。TiDB 在 4.0 版本中引入列存储引擎 TiFlash 结合行存储引擎 TiKV 构建真正的 HTAP 数据库,在增加少量存储成本的情况下,可以同一个系统中做联机交易处理、实时数据分析,极大地节省企业的成本。
当前绝大部分企业的业务数据都分散在不同的系统中,没有一个统一的汇总,随着业务的发展,企业的决策层需要了解整个公司的业务状况以便及时做出决策,故需要将分散在各个系统的数据汇聚在同一个系统并进行二次加工处理生成 T+0 或 T+1 的报表。传统常见的解决方案是采用 ETL + Hadoop 来完成,但 Hadoop 体系太复杂,运维、存储成本太高无法满足用户的需求。与 Hadoop 相比,TiDB 就简单得多,业务通过 ETL 工具或者 TiDB 的同步工具将数据同步到 TiDB,在 TiDB 中可通过 SQL 直接生成报表。
进入官方下载地址,选择社区版下载,以及选择对应的版本好,我这里选择的是最新版4.0.11下载。
https://pingcap.com/download-cn/community/
#创建用户
#adduser tidb
#设置密码
#passwd tidb
编辑/etc/sudoers文件
vim /etc/sudoers
在文件末尾添加
tidb ALL=(ALL) NOPASSWD:ALL
切换用户
su - tidb
执行命令,一直按回车键就行
ssh-keygen -t rsa
切换到tidb用户,新建以下两个目录
mkdir tidb-deploy
mkdir tidb-data
第一步下载的离线包,上传到这个用户的根目录解压:
# tar -zxvf tidb-community-server-${version}-linux-amd64.tar.gz
执行instal文件
sh tidb-community-server-${version}-linux-amd64/local_install.sh
根据完成后提示中的第一点,执行如下命令,具体命令根据提示中的来:
source /home/tidb/.bash_profile
至此,TiDB安装所需的TiUP组件已经安装完成,下面进行安装。
集群初始化配置文件需要手动编写,在tidb用户根目录创建 YAML 格式配置文件,下面是我的配置文件 topology.yaml:
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/home/tidb/tidb-deploy"
data_dir: "/home/tidb/tidb-data"
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
server_configs:
tidb:
log.slow-threshold: 300
tikv:
readpool.storage.use-unified-pool: false
readpool.coprocessor.use-unified-pool: true
pd:
replication.enable-placement-rules: true
replication.location-labels: ["host"]
tiflash:
logger.level: "info"
pd_servers:
- host: 192.168.16.56
tidb_servers:
- host: 192.168.16.56
tikv_servers:
- host: 192.168.16.56
port: 20160
status_port: 20180
config:
server.labels: { host: "logic-host-1" }
- host: 192.168.16.56
port: 20161
status_port: 20181
config:
server.labels: { host: "logic-host-2" }
- host: 192.168.16.56
port: 20162
status_port: 20182
config:
server.labels: { host: "logic-host-3" }
tiflash_servers:
- host: 192.168.16.56
monitoring_servers:
- host: 192.168.16.56
grafana_servers:
- host: 192.168.16.56
部署命令
tiup cluster deploy tidb-test v4.0.11 ./topology.yaml --user tidb -p
如无意外,会出现==successfully==的提示信息。
启动命令
tiup cluster start tidb-test
如无意外,会出现==successfully==的提示信息。
检查集群状态,命令:==tiup cluster display tidb-test==
Starting component `cluster`: /home/ubuntu/.tiup/components/cluster/v1.3.2/tiup-cluster display tidb-test
Cluster type: tidb
Cluster name: tidb-test
Cluster version: v4.0.11
SSH type: builtin
Dashboard URL: http://192.168.16.56:2379/dashboard
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.168.16.56:3000 grafana 192.168.16.56 3000 linux/x86_64 Up - /home/ubuntu/tidb/tidb-deploy/grafana-3000
192.168.16.56:2379 pd 192.168.16.56 2379/2380 linux/x86_64 Up|L|UI /home/ubuntu/tidb/tidb-data/pd-2379 /home/ubuntu/tidb/tidb-deploy/pd-2379
192.168.16.56:9090 prometheus 192.168.16.56 9090 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/prometheus-9090 /home/ubuntu/tidb/tidb-deploy/prometheus-9090
192.168.16.56:4000 tidb 192.168.16.56 4000/10080 linux/x86_64 Up - /home/ubuntu/tidb/tidb-deploy/tidb-4000
192.168.16.56:9000 tiflash 192.168.16.56 9000/8123/3930/20170/20292/8234 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tiflash-9000 /home/ubuntu/tidb/tidb-deploy/tiflash-9000
192.168.16.56:20160 tikv 192.168.16.56 20160/20180 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tikv-20160 /home/ubuntu/tidb/tidb-deploy/tikv-20160
192.168.16.56:20161 tikv 192.168.16.56 20161/20181 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tikv-20161 /home/ubuntu/tidb/tidb-deploy/tikv-20161
192.168.16.56:20162 tikv 192.168.16.56 20162/20182 linux/x86_64 Up /home/ubuntu/tidb/tidb-data/tikv-20162 /home/ubuntu/tidb/tidb-deploy/tikv-20162
Total nodes: 8
以上输出的结果中,可以看到tidb的端口号是4000,pd运维端口是2379。我们通过Navicat这种工具连接数据库是使用4000端口,默认密码为空。
几个关键组件信息:
部署集群的命令为 tiup cluster deploy,一般用法为:
tiup cluster deploy <cluster-name> <version> <topology.yaml> [flags]
集群部署成功后,可以通过 tiup cluster list 命令在集群列表中查看该集群
3. 启动集群
集群部署成功后,可以执行以下命令启动该集群。如果忘记了部署的集群的名字,可以使用 tiup cluster list 命令查看
tiup cluster start prod-cluster
如果想查看集群中每个组件的运行状态,逐一登录到各个机器上查看显然很低效。因此,TiUP 提供了 tiup cluster display 命令,用法如下:
tiup cluster display prod-cluster
其他详细的命令与运维操作,可以在官网文档中查看
因为TiDB内核是MySQL,所以直接用Navicat工具选择连接MySQL就行:
使用Navicat登录进去后,可以看到目前最新版本的TiDB的MySQL内核是:5.7.25
监控控制面板这个工具还是挺好用,其他的就不一一截图了,主要的功能包含有:
给运维人员和开发人员使用都非常的友好。