Appearance
TiDB
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
截止到 2020-06-02, TiDB 的最新版本是 TiDB 4.0:
发版日期:2020 年 5 月 15 日
TiDB 版本:4.0.0-rc.2
TiUP 版本:4.0.0-rc.2
TiDB 数据库单机版的部署
准备环境
- 推荐安装 CentOS 7.3 及以上版本
- Linux 操作系统开放外网访问,用于下载 TiDB 及相关软件安装包
- 部署需要使用部署主机的 root 用户及密码
- 部署需要关闭防火墙或者开放 TiDB 集群的节点间所需端口
最小规模的 TiDB 集群拓扑:
实例 | 个数 | IP | 配置 |
---|---|---|---|
TiKV | 2 | 127.0.0.1 127.0.0.1 127.0.0.1 | 避免端口和目录冲突 |
TiDB | 1 | 127.0.0.1 | 默认端口 全局目录配置 |
PD | 1 | 127.0.0.1 | 默认端口 全局目录配置 |
TiFlash | 1 | 127.0.0.1 | 默认端口 全局目录配置 |
Monitor | 1 | 127.0.0.1 | 默认端口 全局目录配置 |
实施部署
下载并安装 TiUP:
sh$ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4131k 100 4131k 0 0 3685k 0 0:00:01 0:00:01 --:--:-- 3685k Detected shell: /bin/bash Shell profile: /root/.bash_profile /root/.bash_profile has been modified to to add tiup to PATH open a new terminal or source /root/.bash_profile to use it Installed path: /root/.tiup/bin/tiup =============================================== Have a try: tiup playground ===============================================
安装 TiUP 后需要重新打开命令终端才能使用 tiup
命令。
安装 TiUP 的 cluster 组件:
sh$ tiup cluster The component `cluster` is not installed; downloading from repository. ... Starting component `cluster`: /root/.tiup/components/cluster/v1.0.1/tiup-cluster Deploy a TiDB cluster for production Usage: tiup cluster cluster [flags] tiup cluster [command] Available Commands: check Perform preflight checks for the cluster. deploy Deploy a cluster for production start Start a TiDB cluster stop Stop a TiDB cluster restart Restart a TiDB cluster scale-in Scale in a TiDB cluster scale-out Scale out a TiDB cluster destroy Destroy a specified cluster upgrade Upgrade a specified TiDB cluster exec Run shell command on host in the tidb cluster display Display information of a TiDB cluster list List all clusters audit Show audit log of cluster operation import Import an exist TiDB cluster from TiDB-Ansible edit-config Edit TiDB cluster config reload Reload a TiDB cluster's config and restart if needed patch Replace the remote package with a specified package and restart the service help Help about any command Flags: -h, --help help for tiup --ssh-timeout int Timeout in seconds to connect host via SSH, ignored for operations that don't need an SSH connection. (default 5) -v, --version version for tiup --wait-timeout int Timeout in seconds to wait for an operation to complete, ignored for operations that don't fit. (default 60) -y, --yes Skip all confirmations and assumes 'yes' Use "tiup cluster help [command]" for more information about a command.
如果机器已经安装 TiUP cluster,需要更新软件版本:
sh$ tiup update cluster component cluster version v1.0.1 is already installed Updated successfully!
由于模拟多机部署,需要通过
root
用户调大 sshd 服务的连接数限制:修改
/etc/ssh/sshd_config
将MaxSessions
调至 20;重启 sshd 服务:
sh$ service sshd restart Redirecting to /bin/systemctl restart sshd.service
创建并启动集群:
按下面的配置模板,编辑配置文件,命名为
topo.yaml
,其中:user: "root"
:表示通过root
系统用户(部署会自动创建)来做集群的内部管理,默认使用 22 端口通过 ssh 登录目标机器replication.enable-placement-rules
:设置这个 PD 参数来确保 TiFlash 正常运行host
:设置为本部署主机的 IP
步骤如下:
sh$ mkdir tidb $ cd tidb/ $ touch topo.yaml
topo.yaml
文件的配置模板如下:sh# # Global variables are applied to all deployments and used as the default value of # # the deployments if a specific deployment value is missing. global: user: "root" ssh_port: 22 deploy_dir: "/tidb/tidb-deploy" data_dir: "/tidb/tidb-data" # # Monitored variables are applied to all the machines. 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 tiflash: logger.level: "info" pd_servers: - host: 127.0.0.1 tidb_servers: - host: 127.0.0.1 tikv_servers: - host: 127.0.0.1 port: 20160 status_port: 20180 - host: 127.0.0.1 port: 20161 status_port: 20181 - host: 127.0.0.1 port: 20162 status_port: 20182 tiflash_servers: - host: 127.0.0.1 monitoring_servers: - host: 127.0.0.1 grafana_servers: - host: 127.0.0.1
执行集群部署命令:
sh$ tiup cluster deploy tidb-test v4.0.0 ./topo.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
以上部署命令中:
通过 TiUP cluster 部署的集群名称为
tidb-test
部署版本为
v4.0.0
,最新版本可以通过执行tiup list tidb
来查看 TiUP 支持的版本 初始化配置文件为topo.yaml
–user root:通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。
[-i] 及 [-p]:非必选项,如果已经配置免密登陆目标机,则不需填写。否则选择其一即可,[-i] 为可登录到部署机的 root 用户(或 –user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码
按照引导,输入”y”及 root 密码,来完成部署:
shDo you want to continue? [y/N]: y Input SSH password:
预期日志结尾输出会有
Deployed cluster
tidb-testsuccessfully
关键词,表示部署成功。启动集群:
sh$ tiup cluster start <cluster-name>
访问集群:
访问 TiDB 数据库,密码为空:
sh$ mysql -h 127.0.0.1 -P 4000 -u root
从 MySQL 迁移至 TiDB
官网推荐两种方式将 MySQL 数据迁移到 TiDB:
使用 Mydumper 和 TiDB Lightning 迁移全量数据
适合 MySQL 全量数据的大小大于 1TB 的场景。该方案只能迁移全量数据,如果需要继续同步增量数据,需要再使用 TiDB Data Migration (DM) 创建增量同步任务。
使用 DM 迁移数据
适合迁移 MySQL 全量数据并同步增量数据的场景,且全量数据的大小小于 1TB。如果全量数据的大小大于 1TB,建议使用 Mydumper 和 TiDB Lightning 导入全量数据后,再使用 DM 同步增量数据。
这里用的是第一种方案,下面是迁移步骤。
使用 Mydumper 和 TiDB Lightning 迁移全量数据
使用 Mydumper 生成 MySQL SQL 文件
Mydumper 包含在 tidb-enterprise-tools 安装包中,下载地址:https://download.pingcap.org/tidb-enterprise-tools-nightly-linux-amd64.tar.gz
解压
tidb-enterprise-tools-nightly-linux-amd64.tar.gz
文件:sh$ tar -zxvf tidb-enterprise-tools-nightly-linux-amd64.tar.gz
使用
mydumper
从 MySQL 导出数据:sh$ cd /tidb-enterprise-tools-nightly-linux-amd64/bin/ $ ./bin/mydumper -h 127.0.0.1 -P 3306 -u root -t 16 -F 256 -B test -T t1,t2 --skip-tz-utc -o /data/my_database/
其中:
-B test
:从test
数据库导出。-T t1,t2
:只导出t1
和t2
这两个表。-t 16
:使用 16 个线程导出数据。-F 256
:将每张表切分成多个文件,每个文件大小约为 256 MB。--skip-tz-utc
:添加这个参数则会忽略掉 TiDB 与导数据的机器之间时区设置不一致的情况,禁止自动转换。这样全量备份数据就导出到了
/data/my_database
目录中。
使用 Lightning 将数据导入 TiDB
部署 TiDB 集群
在开始数据导入之前,需先部署 TiDB,建议使用最新版。
下载 TiDB Lightning 安装包(需选择与 TiDB 集群相同的版本),下载地址:
https://download.pingcap.org/tidb-toolkit-{version}-linux-amd64.tar.gz
注意
下载链接中的
{version}
为 TiDB Lightning 的版本号。例如,v4.0.0 版本的下载链接为 https://download.pingcap.org/tidb-toolkit-v4.0.0-linux-amd64.tar.gz。解压
tidb-toolkit-v4.0.0-linux-amd64.tar.gz
文件:sh$ tar -zxvf tidb-toolkit-v4.0.0-linux-amd64.tar.gz
TiDB Lightning TiDB-Backend
TiDB Lightning 的后端决定 tidb-lightning
将如何把将数据导入到目标集群中。目前,TiDB Lightning 支持 Importer-backend(默认)和 TiDB-backend 两种后端,两者导入数据的区别如下:
Importer-backend
tidb-lightning
先将 SQL 或 CSV 数据编码成键值对,由tikv-importer
对写入的键值对进行排序,然后把这些键值对 Ingest 到 TiKV 节点中。TiDB-backend
tidb-lightning
先将数据编码成INSERT
语句,然后直接在 TiDB 节点上运行这些 SQL 语句进行数据导入。
这里使用第二种方式 TiDB-backend
进行数据导入。
启动 tidb-lightning
新建
tidb-lightning.toml
。对于没有出现在下述模版中的配置,TiDB Lightning 给出配置错误的提醒并退出。sh$ cd /tidb-toolkit-v4.0.0-linux-amd64/bin/ $ touch tidb-lightning.toml
topo.yaml
文件的配置模板如下:sh# 转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。 # 混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。 # region-concurrency = # 日志 level = "info" file = "tidb-lightning.log" [tikv-importer] # tikv-importer 的监听地址,需改成 tikv-importer 服务器的实际地址。 addr = "172.16.31.10:8287" [mydumper] # Mydumper 源数据目录。 data-source-dir = "/data/my_database" [tidb] # 目标集群的信息。tidb-server 的监听地址,填一个即可。 host = "172.16.31.1" port = 4000 user = "root" password = "" # 表架构信息在从 TiDB 的“状态端口”获取。 status-port = 10080
注意
在运行 tidb-lightning 之前,在配置文件中加上如下几行:
sh[tikv-importer] backend = "tidb"
或者在用命令行启动
tidb-lightning
时,传入参数--backend tidb
。运行
tidb-lightning
。如果直接在命令行中用nohup
启动程序,可能会因为 SIGHUP 信号而退出,建议把nohup
放到脚本里面,如:sh#!/bin/bash nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &
提示
若 tidb-lightning
因不可恢复的错误而退出(例如数据出错),重启时不会使用断点,而是直接报错离开。为保证已导入的数据安全,这些错误必须先解决掉才能继续。使用 tidb-lightning-ctl
工具可以标示已经恢复。
checkpoint-remove
sh$ ./tidb-lightning-ctl --checkpoint-remove=all
无论是否有出错,把表的断点清除。
checkpoint-dump
sh$ ./tidb-lightning-ctl --checkpoint-dump=output/directory
将所有断点备份到传入的文件夹,主要用于技术支持。此选项仅于
driver = "mysql"
时有效。