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


    前言: 放眼全网,我找不出一篇在 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
    
    • 1
    • 2
    • 3
    • 4

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

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

    tiup playground
    
    • 1

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

    在这里插入图片描述

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

    3. 使用 TiUP client 连接 TiDB

    tiup client
    
    • 1

    进去后,执行 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这个地方是最折磨我的,因为日志里面并不会直接告诉你需要哪个命令,需要自己去找,官方也并没有提供说明需要下载这些 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果还是出现该问题,调大内存即可,我刚开是 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
    
    • 1
    • 2
    3. DM 配置文件模板获取

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

    在线模板

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

    tiup dm template > topology.yaml
    
    • 1

    将模板下载到你指定的 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: 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"
        # # 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.18
        name: master2
      - host: 10.0.1.19
        name: master3
    
    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"
        # # Config is used to overwrite the `server_configs.dm-worker` values
        config:
          log-level: info
          # keepalive-ttl: 60
          # relay-keepalive-ttl: 1800 # since v2.0.2
          # relay-dir: "" # since v5.4.0
      - host: 10.0.1.19
    
    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"
        # prometheus rule dir on TiUP machine
        # rule_dir: /home/tidb/prometheus_rule
    
    grafana_servers:
      - host: 10.0.1.14
        # port: 3000
        # deploy_dir: /tidb-deploy/grafana-3000
        # grafana dashboard dir on TiUP machine
        # dashboard_dir: /home/tidb/dashboards
    
    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"
    
    # 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    来自 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: 22
      deploy_dir: "/dm-deploy"
      data_dir: "/dm-data"
    
    server_configs:
      master:
        log-level: info
      worker:
        log-level: info
    
    master_servers:
      - host: master
        ssh_port: 22
        port: 8261
        
    worker_servers:
      - host: slave1
        ssh_port: 22
        port: 8262
      - host: slave2
        ssh_port: 22
        port: 8262
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    5.部署与启动 DM 集群

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

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

    命令解析

    • 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
    
    • 1

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

    在这里插入图片描述

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

    tiup dm display dm-test
    
    • 1

    在这里插入图片描述

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

  • 相关阅读:
    软考高级系统架构设计师系列论文真题五:论软件架构评估
    网工数通实训大作业(HCIA综合实验)
    短视频配音原来如此简单
    数据结构基础
    【Android Framework系列】第15章 Fragment+ViewPager与Viewpager2相关原理
    .NET Core使用NPOI导出复杂,美观的Excel详解
    软件测试工程师涨薪攻略!3年如何达到30K!
    spring 5.2+ http返回结果json格式字符集丢失问题
    Java中过滤器与拦截器的使用
    C++重温笔记(七): C++模板与泛型程序设计
  • 原文地址:https://blog.csdn.net/weixin_46389691/article/details/133487223