一、TiDB功能和核心特性
大家也熟识过国产化开源数据库。我先用一种DBA介绍方式向大家介绍该数据名字。
select name from 国产数据库;
>>name
>>I am TiDB 。哈哈。
今天向大家介绍一款开源分布式关系型数据库,大名叫"TiDB"。当然提到关系型数据库,大家一定会问mysql,oracle这些主流产品。但目前新生一代关系型数据库,在技术领域上已发展十分成熟。今天向大家介绍 TiDB 就是其中一员。
TiDB 是 PingCAP公司自主设计,开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品。能平顺水平扩容和收缩,实现高可用。各项关系型数据库基本功能它都具备。并且它自身还有 五大核心功能。
大家重点记住它有五个核心特性
序号 | 特性内容 |
---|---|
one | 一键水平扩缩容。横向扩展简单,方便数据增长扩容,保持数据一致性。 |
two | 金融级高可用。(数据采用多副本存储。能部署不同地理区域,实现异地容灾。) |
three | HTAP |
four | 云原生的分布式数据库。具有云端架构优势,让业务可以实现分布式部署架构。 |
five | 兼容 MySQL,让MySQL业务平顺迁移到TiDB变成现实,TiDB保持原来MySQL对接应用继续稳定使用。 |
二、企业对国产化改造的需求描述
关系数据库领军代表mysql 一直占领市场比较大份额。当企业过去几十年关系型数据库中都有一定份额在mysql上,国产化数据库出现是一种新业务场景到来。国外数据库多年来为企业业务提供数据基础业务,但国际环境千变万化,一但国际影响企业业务,将给企业带来一定风险。向国产化转变就成为企业数字化转型必须长远思想的需求。
TiDB 高度兼容 MySQL 协议,以及 MySQL 5.7 和 MySQL 8.0 常用的功能及语法。TiDB这样可以更好,并且快速融合mysql 用户群体是一个战略性部署。TiDB由于能兼容mysql ,很多在mysql 使用工具就可以平顺过度到 TiDB 数据库。例如: PHPMyAdmin、Navicat、MySQL Workbench、DBeaver等。因为TiDB 高度兼容 MySQL ,就给企业国产化数据库转型带来机会。过去企业业务平顺迁移到 TiDB 变成可能实现的事。并且TiDB 和mysql有很多相近地方,企业技术人员学习成本变低,能快速过渡到TiDB 平台。企业过去对接mysql 应用不用过多修改,继续保持TiDB 平台使用,让企业国产化数据库成本得到大大降低。
企业对国产化改造需求实际可以总结是业务保持稳定,降低成本,业务横向扩容方便,长远数字化转型收效明显等方面。
三、TiDB 部署实践和体验新版本
TiDB要求软硬资源是有那些?TiDB对于部署企业场景体验是如何?带着实践需求,我以下向大家介绍TiDB部署和新版本体验。
硬件:能很好运行部署在 在 Intel 架构服务器环境、ARM 架构的服务器环境及主流虚拟化环境。
软件:TiDB 只支持 Red Hat 兼容内核 (RHCK) 的 Oracle Enterprise Linux,不支持 Oracle Enterprise Linux 提供的 Unbreakable Enterprise Kernel。建议推荐部署操作系统 CentOS Stream 8 和 Ubuntu 18.04 或更高版本。
TiDB 是一个分布式系统。最基础的 TiDB 最小拓扑架构集群通常由 2 个 TiDB 实例、3 个 TiKV 实例、3 个 PD 实例和 1个 Monitoring & Grafana。
如何安装?我为大家展示一个快速安装方法,让TiDB快速展现在DBA眼前。
1、下载并安装 TiDB,一起体验新版本 v8.5.1
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
大家说这个安装是不是快速?对比各个关系型数据库,一般是yum ,rpm ,二进制编译方式,操作比较复杂。TiDB安装部署一句命令完成,提供一个方便快速安装方法,让大家更加简便和智能化。
2、正确姿势声明全局环境变量。
source ${your_shell_profile} # 需要将 ${your_shell_profile} 修改为 Shell profile 文件的实际位置。
本例操作:
source /root/.bash_profile
3、安装后,如何启动?我有方法,请看以下介绍
在当前session 启动集群
tiup playground # 直接运行 tiup playground 命令会运行最新版本的 TiDB 集群,其中 TiDB、TiKV、PD 和 TiFlash 实例各 1 个
或者指定实例个数方法以下,要启动是 v8.5.1 版本的。
tiup playground v8.5.1 --db 2 --pd 2 --kv 3
本例启动
tiup playground --host 0.0.0.0 --tag tidb-test
备注:默认host为127.0.0.1,要通过外部访问 --host 0.0.0.0,大家要记好这个运维实践中小经验。
现在要查看部署 TiDB 版本,我也有方法,这样操作就可以了
tiup list tidb
4、TiDB 集群能访问?我可以直接回答一定可以访问,如何正确姿势访问,我告诉你。
连接 TiDB 数据库
tiup client
访问 Prometheus 管理界面:http://192.168.3.57:9090
访问 TiDB Dashboard 页面:http://192.168.3.57:2379/dashboard ,默认用户名为 root,密码为空。 (如何设置密码登录,下面章节有方法,请继续阅读)
访问 Grafana 界面:http://192.168.3.57:3000,默认用户名和密码都为 admin。
四、用 TiDB 进行国产化替代的业务实践(应用场景、迁移方案等)
DBA 如何对数据库业务从mysql 迁移到 TiDB,要考虑业务保持性,业务持续性等方面。并且数据库安全要求能否符合也是关键。以下通过实践场景介绍TiDB国产化替代mysql 完整迁移过程。从TiDB安全加固,到数据库业务从mysql 迁移到 TiDB等详细实践。
大家需要留意一点,TiDB 不支持 MySQL 复制协议,这个复制是我们后面会重点实践一个内容。做DBA应该很清楚,新数据库如果落地使用,必须要把旧数据库数据平顺迁移到新库。不同厂商数据库互相迁移是一个十分值得关注技术点。现在我先向大家抛砖引玉提一下这个技术。
这样 TiDB 到 MySQL , MySQL 到 TiDB 有什么工具可以使用呢?以下两个方向先告诉大家
1)从 MySQL 到 TiDB 复制:TiDB Data Migration (DM) 是将 MySQL/MariaDB 数据迁移到 TiDB 的工具。后续章节会演示。
2)从 TiDB 到 MySQL 复制:TiCDC 是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,可通过 MySQL sink 将 TiDB 增量数据复制到 MySQL。
其中 DM 工具在日常运维中会遇到。我在后面会进行演示操作。把一个 MySQL 到 TiDB 复制运维案例记录分享。
1)TiDB安全加固篇
企业使用TiDB部署,首先要关注安全问题,从其他关系数据库迁移业务到 TiDB平台,业务数据安全性是首要条件。谈安全先谈密码。默认安装后,TiDB集群中root 用户是密码为 “空”,这样当然是风险大,很多实验环境,只谈安装,不谈安全。安全关键第一关是密码。我们做DBA江湖风险大,密码要设置。
避免这个空root 密码风险。我们部署过程就要注意root密码设置。以下我给大家方法,要记得设置密码关键步骤。
在部署时关键在集群启动时操作。大多数人 这样输入:
tiup cluster 安装集群,这样出来root 当然是空密码,危险不要做。
我告诉你以下才是安全的,安全启动: tiup cluster start tidb-new --tidb-test # 备注: tidb-test 是集群名
预期结果如下,表示启动成功。
Started cluster `tidb-test` successfully.
The root password of TiDB database has been changed.
The new password is: 'c_+3kam=*eWz2771s2'.
Copy and record it to somewhere safe, it is only displayed once, and will not be stored.
The generated password can NOT be got again in future.
把输出c_+3kam=*eWz2771s2这段密码记录好,就是root 登录要使用到。这样数据库就安全起来了。大家通过我方法,可以掌握一个设置root密码招式。
TiDB得到安全加固部署后,企业对其他关系型数据库迁移到 TiDB场景才可以稳定进行。
2)用 TiDB 进行国产化替代mysql 的业务实践
过去很多企业说mysql 是王道。但出了 TiDB后想转到 TiDB 不是说说就可以。迁移数据是一个重要环节,不会迁移不是问题,关键如何迁移,如何把迁移变得简单,才是关键。因为一个不同厂家数据库,数据可以安全简单迁移。该数据库产品就赢得市场认同。DBA操作不是风险,是操作工具,所以TiDB数据迁移工具作为以下重点探索内容。
我探索工具是 DM ,适用场景是 从 MySQL 协议兼容的数据库迁移到 TiDB。可以迁移源数据库是 MySQL,MariaDB,Aurora等。本次探索是 MySQL进行迁移。迁移目标数据库是 TiDB 。该工具优点是 实现一体化的数据迁移任务管理工具,支持全量迁移和增量同步。支持对表与操作进行过滤,分库分表的合并迁移等。以下是迁移方案拓扑图:
DM 工具我们进行安装 要先找一台新linux 服务器来安装的。我使用centos 7.9 操作系统。
以下几条命令就可以安装DM了。请继续阅读,我的探索之旅。
wget https://tiup-mirrors.pingcap.com/install.sh
sh install.sh
source .bash_profile
# 升级到最新版本
tiup update --self
#安装DM并更新
tiup install dm dmctl && tiup update dm dmctl
#编辑配置文件, 生成MD配置模版
tiup dm template >topology.yaml
# 创建配置目录
mkdir /data/tidb/dm/deploy -p
mkdir /data/tidb/dm/date -p
# 修改配置文件
vim topology.yaml
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/data/tidb/dm/deploy"
data_dir: "/data/tidb/dm/data"
master_servers:
- host: 192.168.3.59
worker_servers:
- host: 192.168.3.59
monitoring_servers:
- host: 192.168.3.59
grafana_servers:
- host: 192.168.3.59
alertmanager_servers:
- host: 192.168.3.59
#接着关键一招是部署启动DM。
# 查看dm版本
tiup list dm-master
# 指定版本安装DM集群并启动
tiup dm deploy dm-test 7.5.0 /root/topology.yaml --user root -p # ssh的root密码,dm-test为集群名称
# 启动DM集群
tiup dm start dm-test
# 查看DM集群信息
tiup dm list
# 查看dm-test集群详细信息
tiup dm display dm-test
DM成功部署后,按迁移拓扑图我们详细描述整个从 MySQL 到 TiDB迁移过程。在我们开始一个mysql 迁移TiDB探索正式案例操作。
企业规划从 MySQL 上数据 到 TiDB迁移。提出以下要求:
项 | 内容 |
---|---|
需求分析: | 业务或部门要上一个 TiDB数据库,把旧mysql 数据迁移到 TiDB 上。实现过程要,减少人工干涉智能任务完成。 |
应对实施: | 规划 使用192.168.3.59上的DM工具将192.168.3.58上的mysql实例的mytest库中的test表同步到 192.168.3.57 TiDB中。 |
企业原来mysql 数据库数据情况如下:
先要在192.168.3.59上的DM工具上做一下迁移数据源配置,实现一个智能迁移任务,看我配置如下:
# 创建dm配置文件目录
mkdir -p /root/dmconf
# 编辑配置文件
vim /root/dmconf/source1.yaml
# MySQL 配置信息
source-id: "mysql-replica-test"
# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。使用前提是在上游 MySQL 已开启 GTID 模式。
enable-gtid: true
from:
host: "192.168.3.58"
user: "root"
password: "newPassw0rd@!e"
port: 3306
然后数据源加载到DM集群中 tiup dmctl --master-addr 192.168.3.59:8261 operate-source create /root/dmconf/source1.yaml
开始任务前,同样要编辑一个任务文件。我给大家一个方法。
vim /root/dmconf/task.yaml
# 任务名,多个同时运行的任务不能重名。
name: "test2"
# 全量+增量 (all) 迁移模式。
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:
host: "192.168.3.57"
port: 4000
user: "root"
password: "newPassw0rd@!e"
# 当前数据迁移任务需要的全部上游 MySQL 实例配置。
mysql-instances:
-
source-id: "mysql-replica-test"
block-allow-list: "global" # 如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list。
# dump 处理单元的配置项名称,用于引用全局的 dump 处理单元配置。
mydumper-config-name: "global"
# 黑白名单全局配置,各实例通过配置项名引用。
block-allow-list: # 如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list。
global:
do-tables: # 需要迁移的上游表的白名单。
- db-name: "mytest" # 需要迁移的表的库名。
tbl-name: "test" # 需要迁移的表的名称。
# dump 处理单元全局配置,各实例通过配置项名引用。
mydumpers:
global:
extra-args: ""
启动任务,开始迁移,大家看清楚了。
tiup dmctl --master-addr 192.168.3.59:8261 start-task /root/dmconf/task.yaml
迁移过程如何观察,同样有办法
tiup dmctl --master-addr 192.168.3.59:8261 query-status
迁移前后TiDB内数据对比,我给大家介绍一下。
数据迁移前 TiDB上数据。
数据迁移后 TiDB上数据。
迁移十分成功,从mysql上数据完整迁移到TiDB 。大家看到这里,可以为我点一个赞吧!
数据迁移完成后需要停止任务,这样操作就可以了。
tiup dmctl --master-addr 192.168.3.59:8261 stop-task test2
迁移任务停止了。
五、用 TiDB 进行国产化替代的收益和效果
TiDB国产化替代后收益,从经济角度上企业节省数据库软件成本。从技术角度收益国内开源技术有一定稳定性保障,避免国际环境变化影响。从整体业务观察,TiDB 进行国产化后完全可以替代mysql 原来业务,mysql整体数据库可以平顺迁移TiDB ,保持数据表一致。确保业务持续使用。TiDB 进行国产化替代整体成本低,业务持续使用稳定,国产化数据库效果和mysql一样。
六、我对TiDB做一个总结
大家通过我风趣幽默表述风格愉快地经历一段TiDB技术旅程。TiDB技术不会高不可攀,也不是水平普通。TiDB是一款开源分布式关系型数据库,可以与现在各个关系型数据库大哥同一水平。我们相信技术是不断进步,新事物也是不断产生。TiDB对于新老DBA来说是一个机遇也是挑战。时代风口,也是风险在与知识学习和更新快慢,认知信息差而已。
通过本文,我们可以认识到 TiDB 是一个什么数据库,它的来历。TiDB如何部署。TiDB和其他关系数据库对比。TiDB日常运维有那些工作等。我对TiDB总结可以概况为以下几个小点。
TiDB 出现是时代推动产物。因为旧的,老牌关系数据库这么多年发展已平顶。技术领域新人辈出,开源新型数据库产生就是必然的产物,只是时间问题。
TiDB 资源文档丰富,十分亲近技术人员和DBA群体,学习成本低,快上手。整体知识架构完整。深受DBA推荐。
TiDB 出现说明有梦想必然能实现。TiDB这么优秀产品一定可以匹配上最优秀的你。
我们一起学习 TiDB,一起实践探索TiDB各项功能。欢迎各位朋友阅读后留言,我们可以一起交流技术,感谢每一位读者支持和鼓励。