Ubuntu 20.04 安装部署 TiDB DM v7.3.0 集群【全网独家】

文章目录

      • 测试环境说明
      • TiDB 单机环境部署
      • DM 集群部署
        • 1. 免密设置
        • 2. 组件下载
        • 3. DM 配置文件模板获取
        • 4.DM 配置文件设置
        • 5.部署与启动 DM 集群

前言: 放眼全网,我找不出一篇在 Ubuntu 里面搭建 DM 集群的文章,虽然 TiDB 官方推荐使用 CentOS 系统,但因为工作需要,不得不在 Ubantu 里面搭建 DM 集群用作数据迁移,期间碰到了一些部署问题,折磨了我很久,这次通过这篇文章造福大众吧。

测试环境说明

当前我在 Ubantu 中有如下三台主机:

IP 映射主机名功能CPU内存备注
mastermaster4核8GDM-master 主节点
slave1worker4核8GDM-worker 工作节点
slave2worker4核8GDM-worker 工作节点

使用的 Ubantu 版本为 Ubuntu 20.04.3 LTS ,后续通过这三台主机部署 TiDB DM 集群环境。

TiDB 单机环境部署

在三台机器中都部署好 TiDB 单机环境,分别在三台机器中执行下列命令:

1. 下载并安装 TiUP 工具

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh# 刷新全局变量
source /root/.bashrc

2. 在线快速部署单机集群

默认会选择当前的最新版进行部署。

tiup playground

部署完成后,会出现如下提示:

在这里插入图片描述

该窗口保持前台运行,后续命令在新增窗口中完成。

3. 使用 TiUP client 连接 TiDB

tiup client

进去后,执行 show databases; 命令,如果可以查询出库名,表示安装成功:

在这里插入图片描述

DM 集群部署

前提条件

  • 每台机器已经安装并至少部署了单机版的 TiDB 集群。
  • 每台机器均已防火墙关闭或者开放后续要用到的端口。
1. 免密设置

设置三台机器之间的免密登录。

# 在三台主机中都执行,生成公钥和私钥
ssh-keygen -t rsa# 在 master 主机执行,复制公钥,期间需要输入 slave1 与 slave2 的密码
cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
ssh slave1 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
ssh slave2 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys# 在 slave1 与 slave2 主机执行,复制公钥
ssh master cat ~/.ssh/authorized_keys>> ~/.ssh/authorized_keys
2. 组件下载

在三台主机中都执行,安装下列组件。

# 用于提升权限以执行特权操作的命令
apt-get install sudo -y# 安装服务管理器
apt-get install systemd -y
apt-get install systemctl -y# 用于查看套接字统计和网络信息
apt-get install iproute2 -y# 安装 TiDB DM 组件及其控制工具 DMctl
tiup install dm dmctl

这个地方是最折磨我的,因为日志里面并不会直接告诉你需要哪个命令,需要自己去找,官方也并没有提供说明需要下载这些 Ubantu 组件,可能因为我用的是 Ubantu,而官方更兼容的是 CentOS 系统。

装好上列组件后,你会规避以下问题:

2023-10-02T10:29:10.118+0800    DEBUG   retry error     {"error": "operation timed out after 2m0s"}2023-10-02T10:29:10.117+0800    ERROR   SSHCommand      {"host": "master", "port": "22", "cmd": "export LANG=C; PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin ss -ltn", "error": "Process exited with status 127", "stdout": "", "stderr": "bash: ss: command not found\n"}System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

如果还是出现该问题,调大内存即可,我刚开是 6G,后面调到 8G 就没有这个错误了。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
3. DM 配置文件模板获取

我们可以通过在线或者离线的方式设置 DM 配置文件模板。

在线模板

官方提供了在线的 DM 配置文件模板获取,执行以下命令即可:

tiup dm template > topology.yaml

将模板下载到你指定的 yaml 文件中。

离线模板

---
# Global variables are applied to all deployments and as the default value of
# them if the specific deployment value missing.
global:user: "tidb"ssh_port: 22deploy_dir: "/dm-deploy"data_dir: "/dm-data"server_configs:master:log-level: info# rpc-timeout: "30s"# rpc-rate-limit: 10.0# rpc-rate-burst: 40worker:log-level: infomaster_servers:- host: 10.0.1.11name: 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"# # The following configs are used to overwrite the `server_configs.master` values.config:log-level: info# rpc-timeout: "30s"# rpc-rate-limit: 10.0# rpc-rate-burst: 40- host: 10.0.1.18name: master2- host: 10.0.1.19name: master3worker_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"# # Config is used to overwrite the `server_configs.dm-worker` valuesconfig:log-level: info# keepalive-ttl: 60# relay-keepalive-ttl: 1800 # since v2.0.2# relay-dir: "" # since v5.4.0- host: 10.0.1.19monitoring_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"# prometheus rule dir on TiUP machine# rule_dir: /home/tidb/prometheus_rulegrafana_servers:- host: 10.0.1.14# port: 3000# deploy_dir: /tidb-deploy/grafana-3000# grafana dashboard dir on TiUP machine# dashboard_dir: /home/tidb/dashboardsalertmanager_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"# if monitored is set, node_exporter and blackbox_exporter will be
# deployed with the port specified, otherwise they are not deployed
# on the server to avoid conflict with tidb clusters
#monitored:
#  node_exporter_port: 9100
#  blackbox_exporter_port: 9115

来自 TiDB 官方的建议:

不建议在一台主机上运行太多 DM-worker。每个 DM-worker 至少应有 2CPU4 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)。

4.DM 配置文件设置

我这里设置了一台 DM-master 节点以及两台 DM-worker 节点,你可以根据需要调整或者新增其它节点,例如:监控节点、警报节点等。

/opt 目录下创建 topology.yaml 文件,然后添加了如下内容:

global:user: "root"ssh_port: 22deploy_dir: "/dm-deploy"data_dir: "/dm-data"server_configs:master:log-level: infoworker:log-level: infomaster_servers:- host: masterssh_port: 22port: 8261worker_servers:- host: slave1ssh_port: 22port: 8262- host: slave2ssh_port: 22port: 8262
5.部署与启动 DM 集群

我这里部署目前的最新版 v7.3.0,指定编写的配置文件,进行一键化自动部署。

tiup dm deploy dm-test 7.3.0 /opt/topology.yaml --user root

命令解析

  • tiup dm deploy 为部署 DM 集群的命令,固定前缀。

  • dm-test 为 DM 集群的名称。

  • 7.3.0 为指定的版本。

  • /opt/topology.yaml 指定配置文件。

  • --user root 指定操作用户为 root 账号。

这里不需要指定密码是因为我们之前做了三台机器的免密登录,如果你的免密存在问题,请按我的免密进行设置。

部署过程中需要进行确认:

在这里插入图片描述

部署完成后,会出现如下成功提示:

在这里插入图片描述

启动 DM 集群

这里要将 dm-test 修改为你设置的 DM 集群名称。

tiup dm start dm-test

正常启动后,会出现如下提示成功的信息:

在这里插入图片描述

我们可以通过如下命令来检测 DM 集群各节点是否运行正常:

tiup dm display dm-test

在这里插入图片描述

可以看到主节点和工作节点都是正常状态,DM 集群启动完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程 - 阻塞式队列

阻塞队列 阻塞队列,也是一个队列 ~~ 先进先出 实际上有一些特殊的队列,不一定非得遵守先进先出的 ~~ 优先级队列(PriorityQueue) 阻塞队列,也是特殊的队列,虽然也是先进先出的,但是带有特殊的功能: 阻塞 如果队列为空,执行出队列操作,就会阻塞.阻塞到另一个线程往队列里添加元…

gitee 远程仓库操作基础(二)

(1)clone远端仓库,本地建立分支推送 (基于远程仓库版本库 本地建立分支开发新功能) git clone gitgitee.com:xxxxx/alsa_test.git git remote add origin gitgitee.com:xxxxx/alsa_test.git进入clone过后路径代码,查看本地分支,发现该项目远程仓库有很多分支 基于…

分布式文件存储系统Minio实战

分布式文件系统应用场景 互联网海量非结构化数据的存储需求电商网站:海量商品图片视频网站:海量视频文件网盘 : 海量文件社交网站:海量图片 1. Minio介绍 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存…

【JVM】第四篇 垃圾收集器ParNewCMS底层三色标记算法详解

导航 一. 垃圾收集算法详解1. 分代收集算法2. 标记-复制算法3. 标记-清除算法4. 标记-整理算法二. 垃圾收集器详解1. Serial收集器2. Parallel Scavenge收集器3. ParNew收集器4. CMS收集器三. 垃圾收集底层三色标记算法实现原理1. 垃圾收集底层使用三色标记算法的原因?2. 垃圾…

[Linux 基础] 一篇带你了解linux权限问题

文章目录 1、Linux下的两种用户2、文件类型和访问权限(事物属性)2.1 Linux下的文件类型2.2 基本权限2.3 文件权限值的表示方法(1)字符表示方法(2)8进制数值表示方法 2.4 文件访问权限的相关设置方法(1) chm…

javaee SpringMVC中json的使用

jsp <%--Created by IntelliJ IDEA.User: 呆萌老师:QQ:2398779723Date: 2019/12/6Time: 15:55To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <%St…

json能够存储图片吗?

JSON 本身并不适合存储图片&#xff0c;因为它是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;同时也易于机器解析和生成。JSON 数据格式简单&#xff0c;只包含键值对&#xff0c;因此它主要用于存储和传输文本数据。 然而&#xff0c;你可以将图片转换为 …

《数据结构、算法与应用C++语言描述》-栈的应用-列车车厢重排问题

列车车厢重排问题 一列货运列车有 n 节车厢&#xff0c;每节车厢要停靠在不同的车站。假设 n个车站从 1 到n 编号&#xff0c;而且货运列车按照从n到1的顺序经过车站。车厢的编号与它们要停靠的车站编号相同。为了便于从列车上卸掉相应的车厢&#xff0c;必须按照从前至后、从…

【吞噬星空】连播两集,尼赫鲁对徐欣动手,罗峰修分身强势复仇

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析吞噬星空资讯。 吞噬星空动画第四季定档之后&#xff0c;官方真的是太宠粉了&#xff0c;每天都会公布全新预告情报&#xff0c;无论是外星人物角色&#xff0c;亦或者宇宙星球建模&#xff0c;那都是相当的炸裂。如今更…

Leetcode 450. 删除二叉搜索树中的节点

文章目录 题目代码&#xff08;10.2 首刷看解析&#xff09; 题目 Leetcode 450. 删除二叉搜索树中的节点 代码&#xff08;10.2 首刷看解析&#xff09; class Solution { public:TreeNode* deleteNode(TreeNode* root, int key) {if(!root)return root;if(root->val <…

Apache Derby的使用

Apache Derby是关系型数据库&#xff0c;可以嵌入式方式运行&#xff0c;也可以独立运行&#xff0c;当使用嵌入式方式运行时常用于单元测试&#xff0c;本篇我们就使用单元测试来探索Apache Derby的使用 一、使用IDEA创建Maven项目 打开IDEA创建Maven项目&#xff0c;这里我…

1、【开始】【简介】Qlib:量化平台

【简介】1、Qlib:量化平台 简介框架简介 Qlib是一个面向AI的量化投资平台,旨在实现AI技术在量化投资中的潜力,赋能研究,并创造价值。 通过Qlib,用户可以轻松利用他们的想法来创建更好的量化投资策略。 框架 在模块层,Qlib 是由上述组件组成的平台。这些组件被设计为低耦…

1.基本概念 进入Java的世界

1.1 Java的工作方式 1.2 Java的程序结构 类存于源文件里面&#xff0c;方法存于类中&#xff0c;语句&#xff08;statement&#xff09;存于方法中 源文件&#xff08;扩展名为.java&#xff09;带有类的定义。类用来表示程序的一个组件&#xff0c;小程序或许只会有一个类…

Flutter笔记:手写一个简单的画板工具

Flutter笔记 手写一个简单的画板工具 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133418742 目 录 1…

localStorage实现历史记录搜索功能

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;JavaScript &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 为什么使用localStorage如何使用localStorage实现历史记录搜索功能&#xff08…

shell脚本学习笔记

shell脚本重点记录 判断文件或者文件夹是否存在 if [ ! -d "log" ];thenchmod 707 $file1一个文件的权限包括读取、写入、执行&#xff0c;权限范围包含所有者、所属组、其他人&#xff0c;可以通过数字或者字母描述一个文件的权限&#xff1a;读取权限对应r或4&a…

【办公自动化】在Excel中按条件筛选数据并存入新的表(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

OpenHarmony Trace的使用

背景&#xff1a; 近期很多开发者反馈OpenHarmony三方库Imageknife有性能问题&#xff1a;连续拖动很多张图片时&#xff0c;界面有明显的卡顿现象。 因为对这个三方库的源码并不了解&#xff0c;因此需要了解目前Imageknife渲染花费了多少时间&#xff0c;最初想的是只有通过…

Numpy

一 、Numpy初级 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件&#xff08;用于显示目录&#xff09; 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tu…

数据结构--双链表

今天我们来用数组来模拟双链表 为什么要数组模拟呢&#xff1f; 因为用数组模拟的双链表&#xff0c;运行速度更快&#xff0c;做算法题更加舒服 用数组模拟双链表的内容 1、同样也有首尾结点 2、相邻的两个节点是相互指向的 3、可以看成两个方向相反的单链表相互连接在一起 …