如何安装部署TiDB集群?

TiDB

1 基础知识

1.1 TiDB集群基础知识

1.1.1 软件介绍

– TiDB是PingCAP公司自主设计研发的开源分布式关系型数据库
– TiDB是一款同时支持在线事务处理和在线分析处理的融合型分布式数据库
– TiDB具备水平扩容或者缩容、金融级高可用、实时HTAP云原生分布式数据库
– TiDB兼容MySQL协议和MySQL生态等重要特性,支持在本地和云上部署

1.1.2 TiDB的角色划分

– TiDB(SQL层),负责SQL查询处理,包括解析、优化和执行(提供与MySQL兼容的接口,支持事务、分布式查询等)
– PD(Placement Driver),负责集群元数据的管理和调度,维护数据分布并进行负载均衡,并管理TiKV节点状态。
– TiKV(分布式存储层),实现高性能分布式键值存储,负责数据存取,支持ACID事务、数据分片和复制,确保数据高可用和一致性。
– TiFlash(列存储和分析),负责分析性查询,支持TiDB内部进行实时分析。支持列存储和快速查询,适用于OLAP工作负载。
– TiCDC(Change Dat Capture),负责数据同步,捕获数据变更和同步到Kafak、Elasticsearch等,支持实时数据流处理和数据迁移。

1.2 TiProxy的基础知识

1.2.1 TiProxy的简介

– TiProxy是PingCAP的官方代理组件
– TiProxy放置在客户端和TiDB server之间
– TiProxy为TiDB提供负载均衡、连接保持/服务发现等功能
– TiProxy为可选组件,你可以选择第三方代理组件,或者直连TiDB server

1.2.2 TiProxy的架构

1.2.3 TiProxy的功能

– 连接迁移,支持客户端连接不变的情况下后端迁移到另一台TiDB server。
– 故障迁移,当后端TiDB server故障,TiProxy自动感知并自动连接迁移。
– 服务发现,TiProxy能自动发现新的TiDB server节点。
– 一键部署,TiProxy一键自动集成到TiUP、TiDB Operator、TiDB Dashboard和Grafana中。

1.2.4 TiProxy的使用场景

– 连接保持场景,TiProxy会自动维持与TiDB Server之间的连接,防止出错。
– 频繁扩缩容场景,支持云端根据负载自动扩缩容TiDB server的节点。
– CPU负载不均场景,TiProxy支持根据CPU使用频率迁移连接,实现负载均衡。
– TiDB server OOM场景,支持提前感知TiDB server OOM风险而迁移。

1.2.5 TiProxy的不适用场景

– 性能敏感场景,性能低于HAProxy等负载均衡器,因此会降低QPS
– 成本敏感场景,如果已使用硬件负载均衡器、虚拟IP或Kubernetes自带负载均衡器设备,增加TiProxy会增加成本。
– TiDB server意外下线场景,如果TiDB server意外下线,则客户端连接会断开。

1.3 操作系统和平台需求

1.3.1 满足企业级生产质量要求的系统

– Red Hat Enterprise Linux 8.4 及以上的 8.x 版本(x86_64,ARM 64)
– Amazon Linux 2(x86_64,ARM 64)
– Amazon Linux 2023(x86_64,ARM 64)
– Rocky Linux 9.1 及以上的版本(x86_64,ARM 64)
– 麒麟欧拉版 V10 SP1/SP2/SP3(从 v7.5.5 开始支持 SP3,x86_64,ARM 64)
– 统信操作系统 (UOS) V20(x86_64,ARM 64)
– openEuler 22.03 LTS SP1/SP3(x86_64,ARM 64)

1.3.2 不保障企业级生产质量要求的系统

– macOS 12 (Monterey) 及以上的版本(x86_64,ARM 64)
– Oracle Enterprise Linux 8 及以上的版本(x86_64,只支持RHCK内核,不支持UEK内核)
– Ubuntu LTS 20.04 及以上的版本(x86_64)
– CentOS Stream 8(x86_64,ARM 64,2024年5月31日终止编译)
– Debian 10 (Buster) 及以上的版本(x86_64)
– Fedora 38 及以上的版本(x86_64,ARM 64)
– openSUSE Leap 15.5 以上的版本(不包含 Tumbleweed, x86_64)
– SUSE Linux Enterprise Server 15(x86_64)

1.4 编译和运行TiDB所依赖的库

– Golang 1.23及以上版本
– Rust nightly-2023-12-28及以上版本
– GCC 7.x
– LLVM17.0及以上版本
– glibc(2.28-151.el8版本,运行时所需的依赖库)

1.5 软件配置要求

1.5.1 中控机软件配置

– sshpass 1.06及以上
– TiUP 1.5.0及以上

1.5.2 目标主机建议配置软件

– sshpass 1.06及以上
– numa 2.0.12及以上
– tar 任意版本

1.6 服务器配置要求

1.6.1 开发及测试环境

– TiDB 8核+ 16GB+ 磁盘空间要求 千兆网卡 1实例(可与PD同机器)
– PD 4核+ 8GB+ SAS,200GB+ 千兆网卡 1实例(可与TiDB同机器)
– TiKV 8核+ 32GB+ SSD,200GB+ 千兆网卡 3实例
– TiFlash 32核+ 64GB+ SSD,200 GB+ 千兆网卡 1实例
– TiCDC 8核+ 16GB+ SAS,200GB+ 千兆网卡 1实例

1.6.2 生产环境

– TiDB 16核+ 48GB+ SSD 万兆网卡(2 块最佳) 2实例
– PD 8核+ 16GB+ SSD 万兆网卡(2 块最佳) 3实例
– TiKV 16核+ 64GB+ SSD 万兆网卡(2块最佳) 3实例
– TiFlash 48核+ 128GB+ 一个以上SSDs 万兆网卡(2块最佳) 2实例
– TiCDC 16核+ 64GB+ SSD 万兆网卡(2块最佳) 2实例
– 监控 8核+ 16GB+ SAS 千兆网卡 1实例

1.7 网络要求

– TiDB,4000,应用及 DBA 工具访问通信端口
– TiDB,10080,TiDB 状态信息上报通信端口
– TiKV,20160,TiKV 通信端口
– TiKV,20180,TiKV 状态信息上报通信端口
– PD,2379,提供 TiDB 和 PD 通信端口
– PD,2380,PD 集群节点间通信端口
– TiFlash,9000,TiFlash TCP 服务端口
– TiFlash,3930,TiFlash RAFT 服务和 Coprocessor 服务端口
– TiFlash,20170,TiFlash Proxy 服务端口
– TiFlash,20292,Prometheus 拉取 TiFlash Proxy metrics 端口
– TiFlash,8234,Prometheus 拉取 TiFlash metrics 端口
– CDC,8300,CDC 通信接口
– Monitoring,9090,Prometheus 服务通信端口
– Monitoring,12020,NgMonitoring 服务通信端口
– Node_exporter,9100,TiDB 集群每个节点的系统信息上报通信端口
– Blackbox_exporter,9115,Blackbox_exporter 通信端口,用于 TiDB 集群端口监控
– Grafana,3000,Web 监控服务对外服务和客户端(浏览器)访问端口
– Alertmanager,9093,告警 web 服务端口
– Alertmanager,9094,告警通信端口

1.8 磁盘空间要求

– TiDB,日志盘建议最少预留30 GB;v6.5.0 及以上版本默认启用了 Fast Online DDL 对添加索引等 DDL 操作进行加速(通过变量 tidb_ddl_enable_fast_reorg 控制)。如果业务中可能存在针对大对象的 DDL 操作,或需要使用 IMPORT INTO SQL 语句导入数据,推荐为 TiDB 准备额外的 SSD 磁盘空间(建议 100 GB+)。配置方式详见设置 TiDB 节点的临时空间。健康水位使用率低于90%;
– PD,数据盘和日志盘建议最少各预留20GB;健康水位使用率低于90%;
– TiKV,数据盘和日志盘建议最少各预留100GB;健康水位使用率低于80%;
– TiFlash,数据盘建议最少预留100GB,日志盘建议最少预留30GB;健康水位使用率低于80%;
– TiUP,中控机:部署一个版本的TiDB集群占用不超过1GB空间,部署多个版本集群所占用的空间会相应增加;部署服务器(实际运行 TiDB 各组件的机器):TiFlash 占用约 700 MB 空间,其他组件(PD、TiDB、TiKV 等)各占用约 200 MB 空间。同时,部署过程会占用小于 1 MB 临时空间(/tmp)存放临时文件;健康水位使用率不涉及;
– Ngmonitoring,Conprof:3 x 1 GB x 组件数量(表示每个组件每天占用约 1 GB,总共 3 天) + 20 GB 预留空间;Top SQL:30 x 50 MB x 组件数量(每个组件每天占用约 50 MB,总共 30 天);Top SQL 和 Conprof 共享预留空间;健康水位使用率不涉及;

2 最佳实践

2.1 系统信息

TiDB集群:
OS = Oracle Linux Server 8.x x86_64
Host Name = hd2[4-9].cmdschool.org
IP Address = 10.10.200.1[18-23]

TiProxy代理服务器:
OS = Oracle Linux Server 8.x x86_64
Host Name = hd19-21.cmdschool.org
IP Address = 10.10.200.12[4-6]

2.2 系统配置

In All

2.2.1 切换到红帽兼容内核

根据兼容性的要求,你需要将系统切换到红帽的内核,按如下章节执行即可,

如何切换Oracle Linux到红帽兼容内核?

2.2.2 设置名称解析

vim /etc/hosts

加入如下设置,

10.10.200.124 hd19 hd19.cmdschool.org
10.10.200.125 hd20 hd20.cmdschool.org
10.10.200.126 hd21 hd21.cmdschool.org
10.10.200.118 hd24 hd24.cmdschool.org
10.10.200.119 hd25 hd25.cmdschool.org
10.10.200.120 hd26 hd26.cmdschool.org
10.10.200.121 hd27 hd27.cmdschool.org
10.10.200.122 hd28 hd28.cmdschool.org
10.10.200.123 hd29 hd29.cmdschool.org

2.2.3 配置文件系统

mkfs.ext4 /dev/mapper/ds-data

建议使用ext4格式化磁盘分区,并使用如下参数挂载,

vim /etc/fstab

加入如下参数,

/dev/mapper/ds-data /data ext4 defaults,nodelalloc,noatime 0 2

注:nodelalloc 是必选参数,否则 TiUP 安装时检测无法通过;noatime 是可选建议参数。
新建并重新挂在文件系统系统,

mkdir /data
systemctl daemon-reload
mount -a

2.2.4 关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

2.2.5 设置NTP客户端

systemctl status chronyd.service

服务如果运行,请检查当前ntp时间服务器是否符合要求,

grep ^server /etc/chrony.conf

企业正常情况下指向内网的某个NTP服务器,

server 10.168.0.58 iburst

2.2.6 设置SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

2.3 应用配置

2.3.1 创建运行用户

In All

useradd tidb
echo tidbpwd | passwd --stdin tidb

2.3.2 设置TiDB节点的临时空间

In All

mkdir -p /data/tidb/tidb-deploy/tempdir
chown -R tidb:tidb /data/tidb/

2.3.3 配置用户的limits

In All

cat << EOF >>/etc/security/limits.conf
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
EOF

2.3.4 设置sudo免密码

In All

visudo

加入如下配置,

tidb ALL=(ALL) NOPASSWD: ALL

2.3.5 设置公钥认证

In hd24

su - tidb
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub hdxxx

以上命令将hd24号节点的公钥复制到其他节点,以便实现hd24号节点到其他节点免输密码。如果你对公钥认证不是很理解,你可以参阅如下章节,

如何部署公钥认证?

2.3.6 安装NUMA

In All

dnf install -y numactl

2.4 系统性能优化

In All

2.4.1 关闭swap

swapon --show

命令查看当前swap的状态,以下命令临时关闭swap,

swapoff -a
sysctl -w vm.swappiness=0
echo "vm.swappiness=0">> /etc/sysctl.conf

永久关闭swap,你需要使用如下命令,

vim /etc/fstab

然后,注解以下行,

#/dev/mapper/ol-swap     none                    swap    defaults        0 0

2.4.2 关闭透明大页内存

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

你可以使用如下命令查看设置,

cat /sys/kernel/mm/transparent_hugepage/enabled

可见如下显示,

always madvise [never]

2.4.3 设置设备的I/O调度器

echo mq-deadline > /sys/block/sdb/queue/scheduler
echo 'echo mq-deadline > /sys/block/sdb/queue/scheduler' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

设置完成后,可使用如下命令他检查配置,

cat /sys/block/sdb/queue/scheduler

可见如下显示,

[mq-deadline] kyber bfq none

2.4.4 设置CPU频率调节器

cpupower frequency-set -g performance

以上命令只适用于物理服务器,如果想查看当前设置,请使用如下命令,

cpupower frequency-info --policy

可见如下设置,

analyzing CPU 0:
  current policy: frequency should be within 1.80 GHz and 1.80 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.

注:表示cpufreq的节能策略为“performance”,是我们推荐的模式。

2.4.5 多数据目录的操作系统的tuned策略(可选)

tuned-adm list

一半会有如下显示,

Available profiles:
- accelerator-performance     - Throughput performance based tuning with disabled higher latency STOP states
- aws                         - Optimize for aws ec2 instances
- balanced                    - General non-specialized tuned profile
- desktop                     - Optimize for the desktop use-case
- epyc-eda                    - Optimize for EDA compute workloads on AMD EPYC CPUs
- hpc-compute                 - Optimize for HPC compute workloads
- intel-sst                   - Configure for Intel Speed Select Base Frequency
- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- optimize-serial-console     - Optimize for serial console use.
- powersave                   - Optimize for low power consumption
- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest               - Optimize for running inside a virtual guest
- virtual-host                - Optimize for running KVM guests
Current active profile: throughput-performance

如上所示,当前激活的策略是“throughput-performance”,我们使用如下命令创建新的策略,

mkdir /etc/tuned/balanced-tidb-optimal/
vim /etc/tuned/balanced-tidb-optimal/tuned.conf

加入如下配置,

[main]
include=balanced

[cpu]
governor=performance

[vm]
transparent_hugepages=never

[disk]
devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81)
elevator=noop

磁盘的唯一标识,可以通过如下命令查询,

udevadm info --name=/dev/sdb | grep ID_SERIAL

然后,执行如下命令使策略生效,

tuned-adm profile balanced-tidb-optimal

2.4.6 优化sysctl参数

echo "fs.file-max = 1000000">> /etc/sysctl.conf
echo "net.core.somaxconn = 32768">> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf
echo "vm.overcommit_memory = 1">> /etc/sysctl.conf
echo "vm.min_free_kbytes = 1048576">> /etc/sysctl.conf
sysctl -p

2.5 离线部署TiUP

In hd24

2.5.1 切换用户身份

su - tidb

2.5.2 下载软件包

sudo mkdir -p /data/tidb/install
sudo chown tidb:tidb /data/tidb/install/
cd /data/tidb/install
wget https://download.pingcap.org/tidb-community-server-v8.5.1-linux-amd64.tar.gz
wget https://download.pingcap.org/tidb-community-toolkit-v8.5.1-linux-amd64.tar.gz

2.5.3 解压软件包

cd /data/tidb/install
tar xzvf tidb-community-server-v8.5.1-linux-amd64.tar.gz
tar xzvf tidb-community-toolkit-v8.5.1-linux-amd64.tar.gz

2.5.4 安装TiUP组件

cd /data/tidb/install
sh tidb-community-server-v8.5.1-linux-amd64/local_install.sh
source /home/tidb/.bash_profile

然后,你可以尝试执行以下命令验证安装,

tiup -v

可见如下输出,

1.16.1 v1.16.1-nightly-12
Go Version: go1.21.13
Git Ref: master
GitHash: f57aa1daf54bf24cec85613d21c2d771bbf6a12b

2.5.5 合并离线组件到server目录

cd /data/tidb/install
cd tidb-community-server-v8.5.1-linux-amd64/
cp -rp keys ~/.tiup/
tiup mirror merge ../tidb-community-toolkit-v8.5.1-linux-amd64/

2.6 部署TiDB集群

In hd24

2.6.1 创建集群初始化配置文件

mkdir -p /data/tidb/install/config-yaml
cd /data/tidb/install/config-yaml
tiup cluster template > topology.yaml

2.6.2 修改集群初始化配置文件

cd /data/tidb/install/config-yaml
cp topology.yaml topology.yaml.default
egrep -v "^#|^$|^.*#" topology.yaml.default > topology.yaml
vim /data/tidb/install/config-yaml/topology.yaml

配置修改如下,

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/data/tidb/tidb-deploy"
  data_dir: "/data/tidb/tidb-data"
  listen_host: 0.0.0.0
  arch: "amd64"
monitored:
  node_exporter_port: 9100
  blackbox_exporter_port: 9115
  deploy_dir: "/data/tidb/tidb-deploy/monitored-9100"
  data_dir: "/data/tidb/tidb-data/monitored-9100"
  log_dir: "/data/tidb/tidb-deploy/monitored-9100/log"
server_configs:
  tidb:
    log.slow-threshold: 300
  tikv:
    readpool.storage.use-unified-pool: false
    readpool.coprocessor.use-unified-pool: true
  pd:
    schedule.leader-schedule-limit: 4
    schedule.region-schedule-limit: 2048
    schedule.replica-schedule-limit: 64
    replication.enable-placement-rules: true
  tiflash:
    profiles.default.max_memory_usage: 0
    profiles.default.max_memory_usage_for_all_queries: 0
  tiflash-learner:
    raftstore.apply-pool-size: 4
    raftstore.store-pool-size: 4
pd_servers:
  - host: hd26.cmdschool.org
    name: "pd-26"
    deploy_dir: "/data/tidb/tidb-deploy/pd-2379"
    data_dir: "/data/tidb/tidb-data/pd-2379"
    log_dir: "/data/tidb/tidb-deploy/pd-2379/log"
  - host: hd27.cmdschool.org
    name: "pd-27"
    deploy_dir: "/data/tidb/tidb-deploy/pd-2379"
    data_dir: "/data/tidb/tidb-data/pd-2379"
    log_dir: "/data/tidb/tidb-deploy/pd-2379/log"
  - host: hd28.cmdschool.org
    name: "pd-28"
    deploy_dir: "/data/tidb/tidb-deploy/pd-2379"
    data_dir: "/data/tidb/tidb-data/pd-2379"
    log_dir: "/data/tidb/tidb-deploy/pd-2379/log"
tidb_servers:
  - host: hd26.cmdschool.org
    deploy_dir: "/data/tidb/tidb-deploy/tidb-4000"
    log_dir: "/data/tidb/tidb-deploy/tidb-4000/log"
  - host: hd27.cmdschool.org
    deploy_dir: "/data/tidb/tidb-deploy/tidb-4000"
    log_dir: "/data/tidb/tidb-deploy/tidb-4000/log"
  - host: hd28.cmdschool.org
    deploy_dir: "/data/tidb/tidb-deploy/tidb-4000"
    log_dir: "/data/tidb/tidb-deploy/tidb-4000/log"
tikv_servers:
  - host: hd26.cmdschool.org
    deploy_dir: "/data/tidb/tidb-deploy/tikv-20160"
    data_dir: "/data/tidb/tidb-data/tikv-20160"
    log_dir: "/data/tidb/tidb-deploy/tikv-20160/log"
  - host: hd27.cmdschool.org
    deploy_dir: "/data/tidb/tidb-deploy/tikv-20160"
    data_dir: "/data/tidb/tidb-data/tikv-20160"
    log_dir: "/data/tidb/tidb-deploy/tikv-20160/log"
  - host: hd28.cmdschool.org
    deploy_dir: "/data/tidb/tidb-deploy/tikv-20160"
    data_dir: "/data/tidb/tidb-data/tikv-20160"
    log_dir: "/data/tidb/tidb-deploy/tikv-20160/log"
tiflash_servers:
  - host: hd26.cmdschool.org
    tcp_port: 9001
    deploy_dir: "/data/tidb/tidb-deploy/tiflash-9001"
    data_dir: "/data/tidb/tidb-data/tiflash-9001"
    log_dir: "/data/tidb/tidb-deploy/tiflash-9001/log"
  - host: hd27.cmdschool.org
    tcp_port: 9001
    deploy_dir: "/data/tidb/tidb-deploy/tiflash-9001"
    data_dir: "/data/tidb/tidb-data/tiflash-9001"
    log_dir: "/data/tidb/tidb-deploy/tiflash-9001/log"
  - host: hd28.cmdschool.org
    tcp_port: 9001
    deploy_dir: "/data/tidb/tidb-deploy/tiflash-9001"
    data_dir: "/data/tidb/tidb-data/tiflash-9001"
    log_dir: "/data/tidb/tidb-deploy/tiflash-9001/log"
monitoring_servers:
  - host: hd25.cmdschool.org
    port: 9190
    deploy_dir: "/data/tidb/tidb-deploy/prometheus-9190"
    data_dir: "/data/tidb/tidb-data/prometheus-9190"
    log_dir: "/data/tidb/tidb-deploy/prometheus-9190/log"
grafana_servers:
  - host: hd25.cmdschool.org
    port: 3030
    deploy_dir: "/data/tidb/tidb-deploy/grafana-3030"
alertmanager_servers:
  - host: hd25.cmdschool.org
    deploy_dir: "/data/tidb/tidb-deploy/alertmanager-9093"
    data_dir: "/data/tidb/tidb-data/alertmanager-9093"
    log_dir: "/data/tidb/tidb-deploy/alertmanager-9093/log"

2.6.3 部署前的检查与问题修复

tiup cluster check /data/tidb/install/config-yaml/topology.yaml --user tidb -i ~/.ssh/id_rsa

以上命令检查集群中存在的风险,然后,你可以使用如下命令修复风险,

tiup cluster check /data/tidb/install/config-yaml/topology.yaml --apply --user tidb -i ~/.ssh/id_rsa

2.6.4 部署集群

tiup cluster deploy tidb-cluster v8.5.1 /data/tidb/install/config-yaml/topology.yaml --user tidb -i ~/.ssh/id_rsa

然后,你可以使用如下命令查看部署的集群列表,

tiup cluster list

然后,你可以使用如下命令查看部署的集群状态,

tiup cluster display tidb-cluster

注:由于集群尚未启动,因此会出现“Down”或“inactive”状态

2.6.5 启动集群

tiup cluster start tidb-cluster --init

需要注意的是,集群启动后,会有如下提示,你需要记录下root的初始化密码,

#...
Started cluster `tidb-cluster` successfully
The root password of TiDB database has been changed.
The new password is: 'q9-2K87^Ze45@bW+Gw'.
#...

以上为安全启动集群,普通启动集群,请使用如下命令,

tiup cluster start tidb-cluster

然后,你可以再次使用如下命令查看部署的集群状态,

tiup cluster display tidb-cluster

正常的集群,可见如下信息,

Cluster type:       tidb
Cluster name:       tidb-cluster
Cluster version:    v8.5.1
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://hd26.cmdschool.org:2379/dashboard
Grafana URL:        http://hd25.cmdschool.org:3030
ID                        Role          Host                Ports                            OS/Arch       Status   Data Dir                                Deploy Dir
--                        ----          ----                -----                            -------       ------   --------                                ----------
hd25.cmdschool.org:9093   alertmanager  hd25.cmdschool.org  9093/9094                        linux/x86_64  Up       /data/tidb/tidb-data/alertmanager-9093  /data/tidb/tidb-deploy/alertmanager-9093
hd25.cmdschool.org:3030   grafana       hd25.cmdschool.org  3030                             linux/x86_64  Up       -                                       /data/tidb/tidb-deploy/grafana-3030
hd26.cmdschool.org:2379   pd            hd26.cmdschool.org  2379/2380                        linux/x86_64  Up|L|UI  /data/tidb/tidb-data/pd-2379            /data/tidb/tidb-deploy/pd-2379
hd27.cmdschool.org:2379   pd            hd27.cmdschool.org  2379/2380                        linux/x86_64  Up       /data/tidb/tidb-data/pd-2379            /data/tidb/tidb-deploy/pd-2379
hd28.cmdschool.org:2379   pd            hd28.cmdschool.org  2379/2380                        linux/x86_64  Up       /data/tidb/tidb-data/pd-2379            /data/tidb/tidb-deploy/pd-2379
hd25.cmdschool.org:9190   prometheus    hd25.cmdschool.org  9190/12020                       linux/x86_64  Up       /data/tidb/tidb-data/prometheus-9190    /data/tidb/tidb-deploy/prometheus-9190
hd26.cmdschool.org:4000   tidb          hd26.cmdschool.org  4000/10080                       linux/x86_64  Up       -                                       /data/tidb/tidb-deploy/tidb-4000
hd27.cmdschool.org:4000   tidb          hd27.cmdschool.org  4000/10080                       linux/x86_64  Up       -                                       /data/tidb/tidb-deploy/tidb-4000
hd28.cmdschool.org:4000   tidb          hd28.cmdschool.org  4000/10080                       linux/x86_64  Up       -                                       /data/tidb/tidb-deploy/tidb-4000
hd26.cmdschool.org:9001   tiflash       hd26.cmdschool.org  9001/3930/20170/20292/8234/8123  linux/x86_64  Up       /data/tidb/tidb-data/tiflash-9001       /data/tidb/tidb-deploy/tiflash-9001
hd27.cmdschool.org:9001   tiflash       hd27.cmdschool.org  9001/3930/20170/20292/8234/8123  linux/x86_64  Up       /data/tidb/tidb-data/tiflash-9001       /data/tidb/tidb-deploy/tiflash-9001
hd28.cmdschool.org:9001   tiflash       hd28.cmdschool.org  9001/3930/20170/20292/8234/8123  linux/x86_64  Up       /data/tidb/tidb-data/tiflash-9001       /data/tidb/tidb-deploy/tiflash-9001
hd26.cmdschool.org:20160  tikv          hd26.cmdschool.org  20160/20180                      linux/x86_64  Up       /data/tidb/tidb-data/tikv-20160         /data/tidb/tidb-deploy/tikv-20160
hd27.cmdschool.org:20160  tikv          hd27.cmdschool.org  20160/20180                      linux/x86_64  Up       /data/tidb/tidb-data/tikv-20160         /data/tidb/tidb-deploy/tikv-20160
hd28.cmdschool.org:20160  tikv          hd28.cmdschool.org  20160/20180                      linux/x86_64  Up       /data/tidb/tidb-data/tikv-20160         /data/tidb/tidb-deploy/tikv-20160
Total nodes: 15

2.7 测试TiDB集群

2.7.1 登录集群仪表板

http://hd26.cmdschool.org:2379/dashboard

user: root
password: q9-2K87^Ze45@bW+Gw

2.7.2 登录Grafana监控

http://hd25.cmdschool.org:3030/

user: admin
password: admin

2.7.3 mysql客户端登录测试

dnf install -y mysql

可以使用如下命令登录,

mysql -uroot -p -h hd26.cmdschool.org -P 4000
mysql -uroot -p -h hd27.cmdschool.org -P 4000
mysql -uroot -p -h hd28.cmdschool.org -P 4000

2.7.4 查询TiDB版本

select tidb_version()\G

可见如下显示,

*************************** 1. row ***************************
tidb_version(): Release Version: v8.5.1
Edition: Community
Git Commit Hash: fea86c8e35ad4a86a5e1160701f99493c2ee547c
Git Branch: HEAD
UTC Build Time: 2025-01-16 07:38:34
GoVersion: go1.23.4
Race Enabled: false
Check Table Before Drop: false
Store: tikv
1 row in set (0.00 sec)

2.7.5 创建数据库

create database pingcap;

可见如下显示,

Query OK, 0 rows affected (0.51 sec)

2.7.6 创建tab_tidb表

use pingcap
CREATE TABLE `tab_tidb` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
`age` int NOT NULL DEFAULT 0,
`version` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `idx_age` (`age`));

可见如下显示,

Query OK, 0 rows affected (0.52 sec)

2.7.7 插入数据

insert into `tab_tidb` values (1,'TiDB',5,'TiDB-v5.0.0');

可见如下显示,

Query OK, 1 row affected (0.01 sec)

2.7.8 查看tab_tidb结果

select * from tab_tidb;

可见如下显示,

+----+------+-----+-------------+
| id | name | age | version     |
+----+------+-----+-------------+
|  1 | TiDB |   5 | TiDB-v5.0.0 |
+----+------+-----+-------------+
1 row in set (0.00 sec)

2.7.9 查看TiKV store状态、store_id、存储情况以及启动时间

select STORE_ID,ADDRESS,STORE_STATE,STORE_STATE_NAME,CAPACITY,AVAILABLE,UPTIME from INFORMATION_SCHEMA.TIKV_STORE_STATUS;

可见如下显示,

+----------+--------------------------+-------------+------------------+----------+-----------+---------------------+
| STORE_ID | ADDRESS                  | STORE_STATE | STORE_STATE_NAME | CAPACITY | AVAILABLE | UPTIME              |
+----------+--------------------------+-------------+------------------+----------+-----------+---------------------+
|        1 | hd27.cmdschool.org:20160 |           0 | Up               | 98.17GiB | 89.64GiB  | 64h35m14.57220359s  |
|        5 | hd28.cmdschool.org:20160 |           0 | Up               | 98.17GiB | 89.64GiB  | 64h35m13.668770182s |
|        2 | hd26.cmdschool.org:20160 |           0 | Up               | 98.17GiB | 89.64GiB  | 64h35m6.81993539s   |
|      162 | hd26.cmdschool.org:3930  |           0 | Up               | 98.17GiB | 89.64GiB  | 64h35m3.714968422s  |
|      163 | hd28.cmdschool.org:3930  |           0 | Up               | 98.17GiB | 89.64GiB  | 64h35m3.571064673s  |
|      164 | hd27.cmdschool.org:3930  |           0 | Up               | 98.17GiB | 89.64GiB  | 64h35m4.67507252s   |
+----------+--------------------------+-------------+------------------+----------+-----------+---------------------+

2.8 部署TiProxy

2.8.1 创建配置文件

cd /data/tidb/install/config-yaml
vim tiproxy.yaml

加入如下配置,

component_versions:
  tiproxy: "v1.2.0"
tiproxy_servers:
  - host: hd19.cmdschool.org
    port: 6000
    status_port: 3080
    deploy_dir: "/data/tidb/tidb-deploy/tiproxy-6000"
  - host: hd20.cmdschool.org
    port: 6000
    status_port: 3080
    deploy_dir: "/data/tidb/tidb-deploy/tiproxy-6000"
  - host: hd21.cmdschool.org
    port: 6000
    status_port: 3080
    deploy_dir: "/data/tidb/tidb-deploy/tiproxy-6000"

2.8.2 部署负代理服务

tiup cluster scale-out tidb-cluster /data/tidb/install/config-yaml/tiproxy.yaml -u tidb -i ~/.ssh/id_rsa

需要注意的是,参数“scale-out”表示扩展集群,部署完成后可以使用mysql客户端登录测试代理,

dnf install -y mysql

可以使用如下命令登录,

mysql -uroot -p -h hd19.cmdschool.org -P 6000
mysql -uroot -p -h hd20.cmdschool.org -P 6000
mysql -uroot -p -h hd21.cmdschool.org -P 6000

2.8.3 基于任播技术的负载均衡

代理搭建后,你还需要借助任播技术实现代理节点基于三层路由的负载均衡,详细请参阅如下章节,

如何部署任播负载均衡ospf动态路由节点?

参考文档
==================

TiDB的社区
————-
https://asktug.com/

TiDB 整体架构
————-
https://docs.pingcap.com/zh/tidb/stable/tidb-architecture/

TiProxy
————-
https://docs.pingcap.com/zh/tidb/stable/tiproxy-overview/

标准集群部署文档
————
https://docs.pingcap.com/zh/tidb/stable/hardware-and-software-requirements/

官方文档
———–
https://docs.pingcap.com/zh/

离线软件包
———–
https://cn.pingcap.com/product-community/?_gl=1*5rl641*_ga*MjA5NjUyODEzOC4xNzMzOTc4NTkx*_ga_3JVXJ41175*MTc0MTU2ODU1MS41LjEuMTc0MTU2ODgxNy42MC4wLjEyNTYxNDg3NjE.*_ga_CPG2VW1Y41*MTc0MTgyODkxNS44LjEuMTc0MTgyOTY2NS4wLjAuMA..

没有评论

发表回复

TiDB
如何熟悉TiDB集群的常用命令?

1 前言 一个问题,一篇文章,一出故事。 笔者最近学习了TiDB集群, 如何安装部署TiDB集群? …

TiDB
如何缩容TiDB 集群?

1 前言 一个问题,一篇文章,一出故事。 上一章节笔者做了扩展集群节点的实验,本章进行扩展的逆向操作 …

TiDB
如何扩容TiDB 集群?

1 前言 一个问题,一篇文章,一出故事。 笔者最近测试了TiDB集群,目前尝试基于该集群扩容节点。 …