公司动态
使用 TiUP 部署 tidb 三节点集群
最近 TiDB 认证免费考证活动火热报名中于是在官网下载了一个安装包在本地环境创建了三台 Centos7.9 的虚拟机通过 tiup 部署 三节点集群数据库版本 v7.1.9-0.0TiUP 是在 TiDB v4.0 中引入的集群运维工具提供了使用 Golang 编写的集群管理组件 TiUP cluster。通过使用 TiUP cluster 组件可以轻松执行日常的数据库运维操作包括部署、启动、关闭、销毁、弹性扩缩容、升级 TiDB 集群以及管理 TiDB 集群参数。一、环境规划节点角色IP 地址操作系统配置中控机 集群节点1192.168.182.31Centos7.94C/8G/120g集群节点2192.168.182.32Centos7.94C/8G/120g集群节点3192.168.182.33Centos7.94C/8G/120g用 VMware 创建一台虚拟机后关机进行克隆总共创建三台名称为 tidb1, tidb2,tidb3 的虚拟机注意克隆的虚拟机一定要修改网卡 UUID即 /etc/sysconfig/network-scripts/ifcfg-ens33 里面的 UUID可通过 uuidgen 命令生成当然IP 地址也要修改并关闭和禁用 NetworkManager 服务。二、安装准备以下操作无说明三台机器都要使用 root 用户操作。2.1 关闭防火墙和NetworkManagersystemctl stop NetworkManager firewalld.servicesystemctl disable NetworkManager firewalld.service2.2 yum 源配置# 因为可以连公网配置的是 阿里云的 Centos 源sudo wget -O /etc/yum.repos.d/CentOS-Base.repo HTTPS://mirrors.aliyun.com/repo/Centos-7.repoyum clean allyum makecache2.3 永久关闭 swapswapoff -ased -i /swap/d /etc/fstab2.4 禁用 selinuxsed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config2.5 内核参数设置cat /etc/sysctl.conf EOFnet.core.somaxconn 2048net.core.netdev_max_backlog 10000net.core.rmem_default 16777216net.core.wmem_default 16777216net.core.rmem_max 16777216net.core.wmem_max 16777216net.ipv4.ip_local_port_range 3500 65535net.ipv4.ip_forward 0net.ipv4.conf.default.rp_filter 1net.ipv4.conf.default.accept_source_route 0net.ipv4.tcp_syncookies 1net.ipv4.tcp_rmem 4096 87380 16777216net.ipv4.tcp_wmem 4096 65536 16777216net.ipv4.tcp_max_syn_backlog 16384net.ipv4.tcp_fin_timeout 15net.ipv4.tcp_max_syn_backlog 16384net.ipv4.tcp_tw_reuse 1net.ipv4.tcp_tw_recycle 1net.ipv4.tcp_slow_start_after_idle0vm.swappiness 0vm.min_free_kbytes 1048576vm.max_map_count 655360fs.file-max 6573688fs.aio-max-nr1048576EOF2.6 修改用户资源限制cat /etc/security/limits.conf EOF* soft nofile 655350* hard nofile 655350* soft stack unlimited* hard stack unlimited* soft nproc 655360* hard nproc 655360* soft core unlimited* hard core unlimitedEOF2.7 创建 tidb 用户并授予 sudo 权限sudo useradd -m -d /home/tidb -s /bin/bash tidbecho tidb|passwd --stdin tidbecho tidb ALL(ALL) NOPASSWD: ALL | sudo tee -a /etc/sudoers /dev/null2.8 关闭透明大页和NUMA#禁用透明大页cat /sys/kernel/mm/transparent_hugepage/enabledsed -i s/GRUB_CMDLINE_LINUX/GRUB_CMDLINE_LINUXtransparent_hugepagenever /g /etc/default/grub#禁用NUMA Intel 环境建议关闭 Hygon、AMD、ARM 环境中建议打开 NUMAdmesg | grep -i numased -i s/GRUB_CMDLINE_LINUX/GRUB_CMDLINE_LINUXnumaoff /g /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg#执行重启将所有需要重启生效的配置使其生效reboot2.9 配置时钟服务1中控机配置我的是第一台服务器192.168.182.31#因为可以联公网配置的是阿里云公共 NTPyum -y install chrony使用 # 注释 四条默认的 pool并添加以下行vim /etc/chrony.conf #server ntp.aliyun.com iburst server cn.pool.ntp.org iburst# 启动并设置开机自启sudo systemctl restart chronydsudo systemctl enable chronyd2集群其它两个节点安装并配置chrony192.168.182.32192.168.182.33yum -y install chronyvim /etc/chrony.conf server 192.168.182.31 iburstrtcsync local stratum 10# 保存后手动强制同步一次chronyc makestep# 查看同步状态chronyc sources -v# 启动并设置开机自启sudo systemctl restart chronydsudo systemctl enable chronyd2.10 配置 SSH 免密登录# 生成 SSH 密钥ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N # 复制公钥到所有节点包括自身for ip in 192.168.182.31 192.168.182.32 192.168.182.33; do ssh-copy-id root$ip done三、部署前检查与修复以下操作无说明只在中控机上 以 root 用户操作。3.1 上传安装包解压软件tar tidb-tem-linux-amd64.tar.gzcd tidb-tem-linux-amd64tar xvf tidb-server-v7.1.9-0.0-linux-amd64.tar.gztar xvf tidb-toolkit-v7.1.9-0.0-linux-amd64.tar.gztar xvf obs-standalone-v7.1.9-0.0-linux-amd64.tar.gz3.2 安装 tiup[roottidb1 tidb-tem-linux-amd64]# cd tidb-server-v7.1.9-0.0-linux-amd64/[roottidb1 tidb-server-v7.1.9-0.0-linux-amd64]# bash local_install.shChecking updates for component telemetry... The component telemetry version is not installed; downloading from repository.Error: read manifest from mirror(https://mirrors.pingkai.cn/) failed: invalid signature for file timestamp.json: not enough signatures (0) for threshold 1 in timestamp.jsonSuccessfully set mirror to /root/tidb-tem-linux-amd64/tidb-server-v7.1.9-0.0-linux-amd64Detected shell: bashShell profile: /root/.bash_profileInstalled path: /root/.tiup/bin/tiup1. source /root/.bash_profile2. Have a try: tiup playground[roottidb1 tidb-server-v7.1.9-0.0-linux-amd64]# cp -R keys /root/.tiup/# 将另外两个镜像合并到当前使用的镜像中[roottidb1 tidb-server-v7.1.9-0.0-linux-amd64]# tiup mirror merge ../tidb-toolkit-v7.1.9-0.0-linux-amd64[roottidb1 tidb-server-v7.1.9-0.0-linux-amd64]# tiup mirror merge ../obs-standalone-v7.1.9-0.0-linux-amd643.3 升级 cluster 组件[roottidb1 tidb-server-v7.1.9-0.0-linux-amd64]# tiup clusterA new version of cluster is available: - v1.16.2-20260410To update this component: tiup update clusterTo update all components: tiup update --all[roottidb1 tidb-server-v7.1.9-0.0-linux-amd64]# tiup update --self tiup update clusterUpdated successfully!component cluster version v1.16.2-20260410 is already installedUpdated successfully!3.4 编辑 topology.yaml 文件编辑安装拓扑文件记得批量替换 IP 地址# 全局配置global:user: tidbssh_port: 22deploy_dir: /tidb-deploydata_dir: /tidb-datalisten_host: 0.0.0.0arch: amd64# 组件全局配置重要txn-total-size-limit 必须为整数不能带单位server_configs:tidb:log.level: infoperformance.txn-total-size-limit: 1073741824 # 1GBprepared-plan-cache.enabled: truetikv:log.level: inforeadpool.unified.max-thread-count: 8server.grpc-concurrency: 8raftstore.sync-log: truestorage.block-cache.capacity: 2GB # 内存紧张时调低pd:log.level: inforeplication.max-replicas: 3# PD 实例pd_servers:- host: 192.168.182.31- host: 192.168.182.32- host: 192.168.182.33# TiDB 实例tidb_servers:- host: 192.168.182.31port: 4000status_port: 10080- host: 192.168.182.32port: 4000status_port: 10080- host: 192.168.182.33port: 4000status_port: 10080# TiKV 实例tikv_servers:- host: 192.168.182.31port: 20160status_port: 20180- host: 192.168.182.32port: 20160status_port: 20180- host: 192.168.182.33port: 20160status_port: 20180# 监控组件可选本次暂不部署# monitoring_servers:# - host: 192.168.182.31# grafana_servers:# - host: 192.168.182.31# alertmanager_servers:# - host: 192.168.182.313.5 部署前检查与修复# 使用 root 用户执行检查tiup cluster check ./topology.yaml --user root -p#根据输出自动修复可修复项tiup cluster check ./topology.yaml --apply --user root -p四、部署集群4.1 查看支持的版本#查看支持的版本[roottidb1 ~]# tiup list tidbAvailable versions for tidb:Version Installed Release Platforms------- --------- ------- ---------v7.1.9-0.0 2026-04-09T12:02:57Z linux/amd644.2 执行部署我下载的版本是 v7.1.9-0.0记得后面的 -0.0 不能省去否则识别不到。[roottidb1 ~]# tiup cluster deploy test-tidb v7.1.9-0.0 ./topology.yaml --user root -pInput SSH password: Detect CPU Arch Name- Detecting node 192.168.182.31 Arch info ... Done- Detecting node 192.168.182.32 Arch info ... Done- Detecting node 192.168.182.33 Arch info ... Done Detect CPU OS Name- Detecting node 192.168.182.31 OS info ... Done- Detecting node 192.168.182.32 OS info ... Done- Detecting node 192.168.182.33 OS info ... DonePlease confirm your topology:Cluster type: tidbCluster kind: standardCluster name: test-tidbCluster version: v7.1.9-0.0Role Host Ports OS/Arch Directories---- ---- ----- ------- -----------pd 192.168.182.31 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379pd 192.168.182.32 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379pd 192.168.182.33 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379tikv 192.168.182.31 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160tikv 192.168.182.32 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160tikv 192.168.182.33 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160tidb 192.168.182.31 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000tidb 192.168.182.32 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000tidb 192.168.182.33 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000Attention:1. If the topology is not what you expected, check your yaml file.2. Please confirm there is no port/directory conflicts in same host.Do you want to continue? [y/N]: (defaultN) y Generate SSH keys ... Done Download TiDB components- Download pd:v7.1.9-0.0 (linux/amd64) ... Done- Download tikv:v7.1.9-0.0 (linux/amd64) ... Done- Download tidb:v7.1.9-0.0 (linux/amd64) ... Done- Download node_exporter: (linux/amd64) ... Done- Download blackbox_exporter: (linux/amd64) ... Done Initialize target host environments- Prepare Keys 192.168.182.31:22 ... Done- Prepare Keys 192.168.182.32:22 ... Done- Prepare Keys 192.168.182.33:22 ... Done Deploy TiDB instance- Prepare Assets pd - 192.168.182.31 ... Done- Prepare Assets pd - 192.168.182.32 ... Done- Prepare Assets pd - 192.168.182.33 ... Done- Prepare Assets tikv - 192.168.182.31 ... Done- Prepare Assets tikv - 192.168.182.32 ... Done- Prepare Assets tikv - 192.168.182.33 ... Done- Prepare Assets tidb - 192.168.182.31 ... Done- Prepare Assets tidb - 192.168.182.32 ... Done- Prepare Assets tidb - 192.168.182.33 ... Done- Deploy node_exporter - 192.168.182.31 ... Done- Deploy node_exporter - 192.168.182.32 ... Done- Deploy node_exporter - 192.168.182.33 ... Done- Deploy blackbox_exporter - 192.168.182.31 ... Done- Deploy blackbox_exporter - 192.168.182.32 ... Done- Deploy blackbox_exporter - 192.168.182.33 ... Done Copy certificate to remote host Init instance configs- Generate config pd - 192.168.182.31:2379 ... ⠸ InitConfig: clustertest-tidb, usertidb, host192.168.182.31, pa... Init instance configs- Generate config pd - 192.168.182.31:2379 ... ⠼ InitConfig: clustertest-tidb, usertidb, host192.168.182.31, pa... Init instance configs- Generate config pd - 192.168.182.31:2379 ... ⠦ InitConfig: clustertest-tidb, usertidb, host192.168.182.31, pa... Init instance configs- Generate config pd - 192.168.182.31:2379 ... ⠧ InitConfig: clustertest-tidb, usertidb, host192.168.182.31, pa... Init instance configs- Generate config pd - 192.168.182.31:2379 ... Done- Generate config pd - 192.168.182.32:2379 ... Done- Generate config pd - 192.168.182.33:2379 ... Done- Generate config tikv - 192.168.182.31:20160 ... Done- Generate config tikv - 192.168.182.32:20160 ... Done- Generate config tikv - 192.168.182.33:20160 ... Done- Generate config tidb - 192.168.182.31:4000 ... Done- Generate config tidb - 192.168.182.32:4000 ... Done- Generate config tidb - 192.168.182.33:4000 ... Done Init monitor configs- Generate config node_exporter - 192.168.182.31 ... Done- Generate config node_exporter - 192.168.182.32 ... Done- Generate config node_exporter - 192.168.182.33 ... Done- Generate config blackbox_exporter - 192.168.182.31 ... Done- Generate config blackbox_exporter - 192.168.182.32 ... Done- Generate config blackbox_exporter - 192.168.182.33 ... DoneEnabling component pdEnabling instance 192.168.182.33:2379Enabling instance 192.168.182.31:2379Enabling instance 192.168.182.32:2379Enable instance 192.168.182.32:2379 successEnable instance 192.168.182.33:2379 successEnable instance 192.168.182.31:2379 successEnabling component tikvEnabling instance 192.168.182.33:20160Enabling instance 192.168.182.31:20160Enabling instance 192.168.182.32:20160Enable instance 192.168.182.33:20160 successEnable instance 192.168.182.32:20160 successEnable instance 192.168.182.31:20160 successEnabling component tidbEnabling instance 192.168.182.33:4000Enabling instance 192.168.182.31:4000Enabling instance 192.168.182.32:4000Enable instance 192.168.182.31:4000 successEnable instance 192.168.182.32:4000 successEnable instance 192.168.182.33:4000 successEnabling component node_exporterEnabling instance 192.168.182.33Enabling instance 192.168.182.31Enabling instance 192.168.182.32Enable 192.168.182.32 successEnable 192.168.182.33 successEnable 192.168.182.31 successEnabling component blackbox_exporterEnabling instance 192.168.182.33Enabling instance 192.168.182.31Enabling instance 192.168.182.32Enable 192.168.182.33 successEnable 192.168.182.32 successEnable 192.168.182.31 successCluster test-tidb deployed successfully, you can start it with command: tiup cluster start test-tidb --init4.3 启动集群使用 init 模式启动记录数据库 root 用户密码[roottidb1 ~]# tiup cluster start test-tidb --initStarting cluster test-tidb... [ Serial ] - SSHKeySet: privateKey/root/.tiup/storage/cluster/clusters/test-tidb/ssh/id_rsa, publicKey/root/.tiup/storage/cluster/clusters/test-tidb/ssh/id_rsa.pub [Parallel] - UserSSH: usertidb, host192.168.182.32 [Parallel] - UserSSH: usertidb, host192.168.182.33 [Parallel] - UserSSH: usertidb, host192.168.182.31 [Parallel] - UserSSH: usertidb, host192.168.182.32 [Parallel] - UserSSH: usertidb, host192.168.182.32 [Parallel] - UserSSH: usertidb, host192.168.182.33 [Parallel] - UserSSH: usertidb, host192.168.182.31 [Parallel] - UserSSH: usertidb, host192.168.182.33 [Parallel] - UserSSH: usertidb, host192.168.182.31 [ Serial ] - StartClusterStarting component pdStarting instance pdStarting instance pdStarting instance pdStarting instance 192.168.182.33:2379Starting instance 192.168.182.31:2379Starting instance 192.168.182.32:2379Start instance 192.168.182.33:2379 successStart instance 192.168.182.32:2379 successStart instance 192.168.182.31:2379 successStarting component tikvStarting instance tikvStarting instance tikvStarting instance tikvStarting instance 192.168.182.33:20160Starting instance 192.168.182.31:20160Starting instance 192.168.182.32:20160Start instance 192.168.182.31:20160 successStart instance 192.168.182.33:20160 successStart instance 192.168.182.32:20160 successStarting component tidbStarting instance tidbStarting instance tidbStarting instance tidbStarting instance 192.168.182.33:4000Starting instance 192.168.182.31:4000Starting instance 192.168.182.32:4000Start instance 192.168.182.31:4000 successStart instance 192.168.182.33:4000 successStart instance 192.168.182.32:4000 successStarting component node_exporterStarting instance 192.168.182.33Starting instance 192.168.182.31Starting instance 192.168.182.32Start 192.168.182.31 successStart 192.168.182.32 successStart 192.168.182.33 successStarting component blackbox_exporterStarting instance 192.168.182.33Starting instance 192.168.182.31Starting instance 192.168.182.32Start 192.168.182.31 successStart 192.168.182.33 successStart 192.168.182.32 success [ Serial ] - UpdateTopology: clustertest-tidbStarted cluster test-tidb successfullyThe root password of TiDB database has been changed.The new password is: -z172_4L36aiPNTF*.Copy and record it to somewhere safe, it is only displayed once, and will not be stored.The generated password can NOT be get and shown again.# 日常启动tiup cluster start test-tidb4.3 验证集群运行状态[roottidb1 ~]# tiup cluster display test-tidbCluster type: tidbCluster name: test-tidbCluster kind: standardCluster version: v7.1.9-0.0Deploy user: tidbSSH type: builtinDashboard URL: http://192.168.182.31:2379/dashboardID Role Host Ports OS/Arch Status Data Dir Deploy Dir-- ---- ---- ----- ------- ------ -------- ----------192.168.182.31:2379 pd 192.168.182.31 2379/2380 linux/x86_64 Up|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379192.168.182.32:2379 pd 192.168.182.32 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379192.168.182.33:2379 pd 192.168.182.33 2379/2380 linux/x86_64 Up|L /tidb-data/pd-2379 /tidb-deploy/pd-2379192.168.182.31:4000 tidb 192.168.182.31 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000192.168.182.32:4000 tidb 192.168.182.32 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000192.168.182.33:4000 tidb 192.168.182.33 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000192.168.182.31:20160 tikv 192.168.182.31 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160192.168.182.32:20160 tikv 192.168.182.32 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160192.168.182.33:20160 tikv 192.168.182.33 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160Total nodes: 94.4 查看 tiup 管理的集群[roottidb1 ~]# tiup cluster listName User Version Path PrivateKey---- ---- ------- ---- ----------test-tidb tidb v7.1.9-0.0 /root/.tiup/storage/cluster/clusters/test-tidb /root/.tiup/storage/cluster/clusters/test-tidb/ssh/id_rsa4.5 连接 tidb 集群1使用 mysql 客户端连接#查询已安装的mariadbrpm -qa |grep mariadb## 卸载mariadb包文件名为上述命令查询出来的文件yum -y remove mariadb-libs.x86_64#添加rpm源rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpmyum search mysql-community#安装x64位的MySQL客户端yum install mysql-community-client.x86_64 -y#连接 TiDB 数据库mysql -h 192.168.182.31 -P 4000 -u root -p 输入刚刚记录的 root 密码即可登录2无 mysql 客户端通过 docker 中的 mysql 客户端连接前提是 pull mysql 容器记录容器 id执行如下命令docker run -it --rm 1eba4c9bcaa8 mysql -h 192.168.182.31 -P 4000 -u root -pmysql SELECT tidb_version();---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| tidb_version() |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| Release Version: v7.1.9-0.0Edition: EnterpriseGit Commit Hash: bea0668079ee73d0e09d476417a2a12fcebede57Git Branch: HEADUTC Build Time: 2026-04-03 11:17:54GoVersion: go1.25.5Race Enabled: falseCheck Table Before Drop: falseStore: tikv |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1 row in set (0.00 sec)#查询用户select User,Host,authentication_string from mysql.user;# 修改 root 密码alter user root% identified by root;mysql SHOW DATABASES;--------------------| Database |--------------------| INFORMATION_SCHEMA || METRICS_SCHEMA || PERFORMANCE_SCHEMA || mysql || sys |--------------------5 rows in set (0.00 sec)mysql CREATE DATABASE test;Query OK, 0 rows affected (0.09 sec)mysql USE test;Database changedmysql CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20));Query OK, 0 rows affected (0.08 sec)mysql INSERT INTO t1 VALUES (1, test-TiDB);Query OK, 1 row affected (0.01 sec)mysql SELECT * FROM t1;---------------| id | name |---------------| 1 | test-TiDB |---------------1 row in set (0.00 sec)