概述
TiUP DM 是 TiUP 提供的使用 Golang 编写的集群管理组件,通过 TiUP DM 组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、扩缩容、升级 DM 集群以及管理 DM 集群参数。
目前 TiUP 可以支持部署 v2.0 及以上版本的 DM。
前提条件
当 DM 执行全量数据复制任务时,每个 DM-worker 只绑定一个上游数据库。DM-worker 首先在上游导出全部数据,然后将数据导入下游数据库。因此,DM-worker 的主机空间需要容纳所有要导出的上游表,具体存储路径在后续创建迁移任务时指定。
部署 DM 集群需参照 DM 集群软硬件环境需求,满足相应要求。
从 v8.0.0 开始,如果需要使用加密数据库密码的方式配置 DM 任务,需要提前在 DM-master 存储一个用于加解密数据库密码的密钥文件,且配置
secret-key-path后才可使用dmctl encrypt命令。
安装 TiUP DM 组件
使用普通用户登录中控机,以 tidb 用户为例,后续安装 TiUP 及集群管理操作均通过该用户完成。
安装TiUP请参考此前文章。
在TiUP安装完成后,安装 TiUP DM 组件:
tiup install dm dmctl
编辑初始化配置文件
根据不同的集群拓扑,编辑 TiUP 所需的集群初始化配置文件。
请根据配置文件模板,新建一个配置文件 topology.yaml。如果有其他组合场景的需求,请根据多个模板自行调整。
也可以使用 tiup dm template > topology.yaml 命令快速生成配置文件模板。
以部署 3 个 DM-master、3 个 DM-worker 与 1 个监控组件为例,配置如下:
#全局变量适用于配置中的其他组件。如果组件实例中缺少一个特定值,则相应的全局变量将用作默认值。
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/dm-deploy"
data_dir: "/dm-data"
server_configs:
master:
log-level: info
# rpc-timeout: "30s"
# rpc-rate-limit: 10.0
# rpc-rate-burst: 40
worker:
log-level: info
master_servers:
- host: 10.0.1.11
name: master1
ssh_port: 22
port: 8261
# peer_port: 8291
# deploy_dir: "/dm-deploy/dm-master-8261"
# data_dir: "/dm-data/dm-master-8261"
# log_dir: "/dm-deploy/dm-master-8261/log"
# numa_node: "0,1"
# 下列配置项用于覆盖 `server_configs.master` 的值。
config:
log-level: info
# rpc-timeout: "30s"
# rpc-rate-limit: 10.0
# rpc-rate-burst: 40
- host: 10.0.1.18
name: master2
ssh_port: 22
port: 8261
- host: 10.0.1.19
name: master3
ssh_port: 22
port: 8261
# 如果不需要确保 DM 集群高可用,则可只部署 1 个 DM-master 节点,且部署的 DM-worker 节点数量不少于上游待迁移的 MySQL/MariaDB 实例数。
# 如果需要确保 DM 集群高可用,则推荐部署 3 个 DM-master 节点,且部署的 DM-worker 节点数量大于上游待迁移的 MySQL/MariaDB 实例数(如 DM-worker 节点数量比上游实例数多 2 个)。
worker_servers:
- host: 10.0.1.12
ssh_port: 22
port: 8262
# deploy_dir: "/dm-deploy/dm-worker-8262"
# log_dir: "/dm-deploy/dm-worker-8262/log"
# numa_node: "0,1"
# 下列配置项用于覆盖 `server_configs.worker` 的值。
config:
log-level: info
- host: 10.0.1.19
ssh_port: 22
port: 8262
monitoring_servers:
- host: 10.0.1.13
ssh_port: 22
port: 9090
# deploy_dir: "/tidb-deploy/prometheus-8249"
# data_dir: "/tidb-data/prometheus-8249"
# log_dir: "/tidb-deploy/prometheus-8249/log"
grafana_servers:
- host: 10.0.1.14
port: 3000
# deploy_dir: /tidb-deploy/grafana-3000
alertmanager_servers:
- host: 10.0.1.15
ssh_port: 22
web_port: 9093
# cluster_port: 9094
# deploy_dir: "/tidb-deploy/alertmanager-9093"
# data_dir: "/tidb-data/alertmanager-9093"
# log_dir: "/tidb-deploy/alertmanager-9093/log"
注:
- 不建议在一台主机上运行太多 DM-worker。每个 DM-worker 至少应有 2 核 CPU 和 4 GiB 内存。
- 需要确保以下组件间端口可正常连通:
各 DM-master 节点间的 peer_port(默认为 8291)可互相连通。
各 DM-master 节点可连通所有 DM-worker 节点的 port(默认为 8262)。
各 DM-worker 节点可连通所有 DM-master 节点的 port(默认为 8261)。
TiUP 节点可连通所有 DM-master 节点的 port(默认为 8261)。
TiUP 节点可连通所有 DM-worker 节点的 port(默认为 8262)。
更多 master_servers.host.config 参数说明,请参考 master parameter;更多 worker_servers.host.config 参数说明,请参考 worker parameter。
我们在测试机上创建配置文件:
cd /home/tidb/.tiup/bin
vim topologydm.yaml
topologydm.yaml配置文件内容为:
#全局变量适用于配置中的其他组件。如果组件实例中缺少一个特定值,则相应的全局变量将用作默认值。
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/data/tidb/dm-deploy"
data_dir: "/data/tidb/dm-data"
server_configs:
master:
log-level: info
# rpc-timeout: "30s"
# rpc-rate-limit: 10.0
# rpc-rate-burst: 40
worker:
log-level: info
master_servers:
- host: 10.0.8.86
name: master1
ssh_port: 22
port: 8261
# peer_port: 8291
# deploy_dir: "/dm-deploy/dm-master-8261"
# data_dir: "/dm-data/dm-master-8261"
# log_dir: "/dm-deploy/dm-master-8261/log"
# numa_node: "0,1"
# 下列配置项用于覆盖 `server_configs.master` 的值。
config:
log-level: info
# rpc-timeout: "30s"
# rpc-rate-limit: 10.0
# rpc-rate-burst: 40
# - host: 10.0.1.18
# name: master2
# ssh_port: 22
# port: 8261
# - host: 10.0.1.19
# name: master3
# ssh_port: 22
# port: 8261
# 如果不需要确保 DM 集群高可用,则可只部署 1 个 DM-master 节点,且部署的 DM-worker 节点数量不少于上游待迁移的 MySQL/MariaDB 实例数。
# 如果需要确保 DM 集群高可用,则推荐部署 3 个 DM-master 节点,且部署的 DM-worker 节点数量大于上游待迁移的 MySQL/MariaDB 实例数(如 DM-worker 节点数量比上游实例数多 2 个)。
worker_servers:
- host: 10.0.8.86
ssh_port: 22
port: 8262
# deploy_dir: "/dm-deploy/dm-worker-8262"
# log_dir: "/dm-deploy/dm-worker-8262/log"
# numa_node: "0,1"
# 下列配置项用于覆盖 `server_configs.worker` 的值。
config:
log-level: info
# - host: 10.0.1.19
# ssh_port: 22
# port: 8262
monitoring_servers:
- host: 10.0.8.86
ssh_port: 22
port: 9090
# deploy_dir: "/tidb-deploy/prometheus-8249"
# data_dir: "/tidb-data/prometheus-8249"
# log_dir: "/tidb-deploy/prometheus-8249/log"
grafana_servers:
- host: 10.0.8.86
port: 3000
# deploy_dir: /tidb-deploy/grafana-3000
alertmanager_servers:
- host: 10.0.8.86
ssh_port: 22
web_port: 9093
# cluster_port: 9094
# deploy_dir: "/tidb-deploy/alertmanager-9093"
# data_dir: "/tidb-data/alertmanager-9093"
# log_dir: "/tidb-deploy/alertmanager-9093/log"
开始部署
命令如下:
tiup dm deploy dm-test ${version} ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
以上部署命令中:
- 通过 TiUP DM 部署的集群名称为
dm-test。 - 部署版本为
${version},可以通过执行tiup list dm-master来查看 TiUP 支持的最新版本。 - 初始化配置文件为
topology.yaml。 -
--user root:通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。 -
-i及-p:非必选项,如果已经配置免密登录目标机,则不需填写,否则选择其一即可。-i为可登录到目标机的 root 用户(或--user指定的其他用户)的私钥,也可使用-p交互式输入该用户的密码。 - TiUP DM 使用内置的 SSH 客户端,如需使用系统自带的 SSH 客户端,请参考 TiUP DM 文档中使用中控机系统自带的 SSH 客户端连接集群章节进行设置。
预期日志结尾输出会有 Deployed clusterdm-testsuccessfully 关键词,表示部署成功。
我们测试环境部署命令为:
tiup dm deploy dm-test-86 v8.1.1 ./topologydm.yaml --user root -p
执行后会看到成功的输出:
Cluster `dm-test-86` deployed successfully, you can start it with command: `tiup dm start dm-test-86`
查看 TiUP 管理的集群情况
tiup dm list
TiUP 支持管理多个 DM 集群,该命令会输出当前通过 TiUP DM 管理的所有集群信息,包括集群名称、部署用户、版本、密钥信息等:
Starting component dm: /home/tidb/.tiup/components/dm/v1.16.0/tiup-dm list
Name User Version Path PrivateKey
---- ---- ------- ---- ----------
dm-test-86 tidb v8.1.1 /home/tidb/.tiup/storage/dm/clusters/dm-test-86 /home/tidb/.tiup/storage/dm/clusters/dm-test-86/ssh/id_rsa
检查部署的 DM 集群情况
例如,执行如下命令检查 dm-test-86 集群情况:
tiup dm display dm-test-86
预期输出包括 dm-test 集群中实例 ID、角色、主机、监听端口和状态(由于还未启动,所以状态为 Down/inactive)、目录信息。
Starting component dm: /home/tidb/.tiup/components/dm/v1.16.0/tiup-dm display dm-test-86
Cluster type: dm
Cluster name: dm-test-86
Cluster version: v8.1.1
Deploy user: tidb
SSH type: builtin
Grafana URL: http://10.0.8.86:3000
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
10.0.8.86:9093 alertmanager 10.0.8.86 9093/9094 linux/x86_64 Down /data/tidb/dm-data/alertmanager-9093 /data/tidb/dm-deploy/alertmanager-9093
10.0.8.86:8261 dm-master 10.0.8.86 8261/8291 linux/x86_64 Down /data/tidb/dm-data/dm-master-8261 /data/tidb/dm-deploy/dm-master-8261
10.0.8.86:8262 dm-worker 10.0.8.86 8262 linux/x86_64 N/A /data/tidb/dm-data/dm-worker-8262 /data/tidb/dm-deploy/dm-worker-8262
10.0.8.86:3000 grafana 10.0.8.86 3000 linux/x86_64 Up - /data/tidb/dm-deploy/grafana-3000
10.0.8.86:9090 prometheus 10.0.8.86 9090 linux/x86_64 Up /data/tidb/dm-data/prometheus-9090 /data/tidb/dm-deploy/prometheus-9090
Total nodes: 5
我们发现3000和9090端口已经在启用,因为我们的Tidb cluster的监控也在这台上,因此不能使用相同的端口,直接启动会造成冲突。销毁集群后,将配置文件端口号改为3001和9091,然后重新部署dm集群。(销毁命令见文末)
启动集群
tiup dm start dm-test-86
可以看到输出:
Starting component dm: /home/tidb/.tiup/components/dm/v1.16.0/tiup-dm start dm-test-86
Starting cluster dm-test-86...
+ [ Serial ] - SSHKeySet: privateKey=/home/tidb/.tiup/storage/dm/clusters/dm-test-86/ssh/id_rsa, publicKey=/home/tidb/.tiup/storage/dm/clusters/dm-test-86/ssh/id_rsa.pub
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [Parallel] - UserSSH: user=tidb, host=10.0.8.86
+ [ Serial ] - StartCluster
Starting component dm-master
Starting instance 10.0.8.86:8261
Start instance 10.0.8.86:8261 success
Starting component dm-worker
Starting instance 10.0.8.86:8262
Start instance 10.0.8.86:8262 success
Starting component prometheus
Starting instance 10.0.8.86:9090
Start instance 10.0.8.86:9090 success
Starting component grafana
Starting instance 10.0.8.86:3000
Start instance 10.0.8.86:3000 success
Starting component alertmanager
Starting instance 10.0.8.86:9093
Start instance 10.0.8.86:9093 success
Started cluster `dm-test-86` successfully
验证集群运行状态
通过以下 TiUP 命令检查集群状态:
tiup dm display dm-test-86
在输出结果中,如果 Status 状态信息为 Up,说明集群状态正常。
我这里输出为:
Starting component dm: /home/tidb/.tiup/components/dm/v1.16.0/tiup-dm display dm-test-86
Cluster type: dm
Cluster name: dm-test-86
Cluster version: v8.1.1
Deploy user: tidb
SSH type: builtin
Grafana URL: http://10.0.8.86:3000
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
10.0.8.86:9093 alertmanager 10.0.8.86 9093/9094 linux/x86_64 Up /data/tidb/dm-data/alertmanager-9093 /data/tidb/dm-deploy/alertmanager-9093
10.0.8.86:8261 dm-master 10.0.8.86 8261/8291 linux/x86_64 Healthy|L /data/tidb/dm-data/dm-master-8261 /data/tidb/dm-deploy/dm-master-8261
10.0.8.86:8262 dm-worker 10.0.8.86 8262 linux/x86_64 Free /data/tidb/dm-data/dm-worker-8262 /data/tidb/dm-deploy/dm-worker-8262
10.0.8.86:3000 grafana 10.0.8.86 3000 linux/x86_64 Up - /data/tidb/dm-deploy/grafana-3000
10.0.8.86:9090 prometheus 10.0.8.86 9090 linux/x86_64 Up /data/tidb/dm-data/prometheus-9090 /data/tidb/dm-deploy/prometheus-9090
Total nodes: 5
通过http://10.0.8.86:3000/访问grafana查看,我们测试环境改为3001端口。
关闭及销毁:
关闭:
tiup dm stop dm-test-86
销毁:
tiup dm destroy dm-test-86