0
0
0
0
博客/.../

TiDB 集群部署实战

 北南南北  发表于  2026-05-29

一、部署前的准备

1.1 硬件需求

生产环境的 TiDB 集群对硬件有一定要求,以下是推荐的最低配置:

组件 CPU 内存 磁盘 网络
TiDB 16 核+ 32GB+ SAS/SSD(日志用) 万兆
TiKV 16 核+ 64GB+ NVMe SSD(数据用) 万兆
PD 8 核+ 16GB+ SSD 千兆
监控 8 核+ 16GB+ SAS 千兆

磁盘是关键因素:TiKV 的磁盘 I/O 直接决定了集群的吞吐能力。建议使用 NVMe SSD,IOPS 越高越好。

1.2 操作系统要求

# 推荐系统
CentOS 7.3+ / Ubuntu 18.04+ / Red Hat 7+

# 关闭 Swap(影响性能稳定性)
swapoff -a
# 注释 /etc/fstab 中的 swap 行

# 关闭 THP(Transparent Huge Pages)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 设置 sysctl 参数
cat >> /etc/sysctl.conf << EOF
vm.swappiness = 0
fs.file-max = 1000000
net.core.somaxconn = 32768
# 注意:net.ipv4.tcp_tw_recycle 已在 Linux 内核 4.12+ 中移除,
# 如果你的系统使用较新内核,不要添加此参数
EOF
sysctl -p

# 设置文件描述符限制
cat >> /etc/security/limits.conf << EOF
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
EOF

1.3 网络端口

TiDB 各组件使用的端口:

组件 默认端口 用途
TiDB 4000 客户端连接(MySQL 协议)
TiDB 10080 状态信息
TiKV 20160 TiKV 内部通信
TiKV 20180 TiKV 状态
PD 2379 客户端 API
PD 2380 PD 节点间通信
PD Dashboard 2379/dashboard TiDB Dashboard
Prometheus 9090 监控数据收集
Grafana 3000 监控可视化
Alertmanager 9093 告警管理

二、使用 TiUP 部署

2.1 安装 TiUP

在中控机(用于部署的机器)上安装:

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
source ~/.bashrc

2.2 配置拓扑文件

创建集群拓扑配置文件 topology.yaml

# topology.yaml — 最小生产集群拓扑

# 全局配置,应用到所有组件
global:
  user: "tidb"           # 运行 TiDB 的系统用户
  ssh_port: 22           # SSH 端口
  deploy_dir: "/tidb-deploy"   # 部署目录
  data_dir: "/tidb-data"       # 数据目录

# PD 节点(3 个,保证高可用)
pd_servers:
  - host: 10.0.1.11
  - host: 10.0.1.12
  - host: 10.0.1.13

# TiDB 节点(2 个,前端负载均衡)
tidb_servers:
  - host: 10.0.1.14
  - host: 10.0.1.15

# TiKV 节点(3 个,数据存储)
tikv_servers:
  - host: 10.0.1.21
    port: 20160
    status_port: 20180
    config:
      server.grpc-concurrency: 4
      storage.scheduler-worker-pool-size: 4
  - host: 10.0.1.22
    port: 20160
    status_port: 20180
    config:
      server.grpc-concurrency: 4
      storage.scheduler-worker-pool-size: 4
  - host: 10.0.1.23
    port: 20160
    status_port: 20180
    config:
      server.grpc-concurrency: 4
      storage.scheduler-worker-pool-size: 4

# 监控组件
monitoring_servers:
  - host: 10.0.1.30

grafana_servers:
  - host: 10.0.1.30

alertmanager_servers:
  - host: 10.0.1.30

最小生产拓扑说明

         ┌──────────┐
         │  HAProxy  │  (需自行部署)
         └────┬─────┘
              │
     ┌────────┴────────┐
     v                 v
┌─────────┐      ┌─────────┐
│ TiDB-1  │      │ TiDB-2  │   计算层
│ 10.0.1.14│      │ 10.0.1.15│
└────┬────┘      └────┬────┘
     │                │
     └────────┬───────┘
              │
    ┌─────────┼─────────┐
    v         v         v
┌──────┐ ┌──────┐ ┌──────┐
│TiKV-1│ │TiKV-2│ │TiKV-3│   存储层
└──┬───┘ └──┬───┘ └──┬───┘
   │        │        │
   └────────┼────────┘
            │
    ┌───────┼───────┐
    v       v       v
┌──────┐┌──────┐┌──────┐
│ PD-1 ││ PD-2 ││ PD-3 │   调度层
└──────┘└──────┘└──────┘

2.3 部署集群

# 1. 检查环境(可选,建议执行)
tiup cluster check topology.yaml --user root --password

# 如果有修复建议,自动修复
tiup cluster check topology.yaml --apply --user root --password

# 2. 部署集群
tiup cluster deploy tidb-cluster v8.5.0 topology.yaml --user root --password

# 3. 启动集群
tiup cluster start tidb-cluster

# 4. 查看集群状态
tiup cluster display tidb-cluster

输出示例:

Starting component tidb
    Starting instance 10.0.1.14:4000
    Starting instance 10.0.1.15:4000
Starting component tikv
    Starting instance 10.0.1.21:20160
    Starting instance 10.0.1.22:20160
    Starting instance 10.0.1.23:20160
Starting component pd
    Starting instance 10.0.1.11:2379
    Starting instance 10.0.1.12:2379
    Starting instance 10.0.1.13:2379

Cluster `tidb-cluster` started successfully

2.4 验证集群

# 连接 TiDB
mysql -h 10.0.1.14 -P 4000 -u root

# 查看集群信息
SELECT * FROM information_schema.cluster_info;

# 查看 PD 状态
curl http://10.0.1.11:2379/pd/api/v1/health

# 访问 Dashboard
# 浏览器打开: http://10.0.1.11:2379/dashboard

三、扩缩容操作

3.1 扩容 TiDB 节点

当 QPS 增长需要增加计算能力时:

# scale-out-tidb.yaml
tidb_servers:
  - host: 10.0.1.16
    port: 4000
    status_port: 10080
tiup cluster scale-out tidb-cluster scale-out-tidb.yaml

3.2 扩容 TiKV 节点

当存储容量或 IOPS 不足时:

# scale-out-tikv.yaml
tikv_servers:
  - host: 10.0.1.24
    port: 20160
    status_port: 20180
tiup cluster scale-out tidb-cluster scale-out-tikv.yaml

扩容后 PD 会自动将部分 Region 迁移到新节点,实现负载均衡。

3.3 缩容节点

下线不需要的节点:

# 下线 TiDB 节点
tiup cluster scale-in tidb-cluster --node 10.0.1.16:4000

# 下线 TiKV 节点(PD 会先迁移 Region,可能需要一些时间)
tiup cluster scale-in tidb-cluster --node 10.0.1.24:20160

注意:下线 TiKV 节点时,PD 会将该节点上的 Region 迁移到其他节点。这个过程是渐进的,不会影响业务。

3.4 扩容监控节点

# scale-out-monitor.yaml
monitoring_servers:
  - host: 10.0.1.31

grafana_servers:
  - host: 10.0.1.31
tiup cluster scale-out tidb-cluster scale-out-monitor.yaml

四、版本升级

4.1 滚动升级

TiUP 支持在线滚动升级,升级过程中业务不中断:

# 查看当前版本
tiup cluster display tidb-cluster

# 升级到新版本(自动滚动升级,所有组件都会升级)
tiup cluster upgrade tidb-cluster v8.6.0

# 注意:upgrade 命令会升级所有组件,不支持只升级单个组件
# 如需单独升级,可通过 stop/start 特定节点实现(见 4.2 节)

升级过程:

1. 升级 PD Follower → 等待同步完成 → 切换 Leader → 升级原 Leader
2. 升级 TiKV → 逐个滚动升级,每次等 Region Leader 迁移完成
3. 升级 TiDB → 逐个滚动升级,客户端连接自动重连

4.2 平滑升级

如果担心自动升级有风险,可以手动控制升级节奏:

# 停止特定组件
tiup cluster stop tidb-cluster --role tidb -N 10.0.1.14:4000

# 升级二进制文件(手动替换)
# ...

# 启动组件
tiup cluster start tidb-cluster --role tidb -N 10.0.1.14:4000

# 确认正常后再升级下一个

五、日常运维操作

5.1 查看集群状态

# 查看所有集群
tiup cluster list

# 查看特定集群详情
tiup cluster display tidb-cluster

# 查看集群配置
tiup cluster edit-config tidb-cluster

# 查看操作审计
tiup cluster audit tidb-cluster

5.2 启停集群

# 停止整个集群
tiup cluster stop tidb-cluster

# 停止特定组件
tiup cluster stop tidb-cluster --role tidb

# 启动整个集群
tiup cluster start tidb-cluster

# 重启特定节点
tiup cluster restart tidb-cluster --role tikv -N 10.0.1.21:20160

5.3 清理集群

# 销毁整个集群(数据不可恢复!)
tiup cluster destroy tidb-cluster

5.4 动态配置修改

TiDB 支持在线修改大部分配置,无需重启:

-- 修改 TiDB 配置
SET GLOBAL tidb_mem_quota_query = 1073741824;  -- 1GB

-- 修改 PD 配置
curl -X POST http://10.0.1.11:2379/pd/api/v1/config \
    -d '{"schedule.leader-schedule-limit": 4}'

-- 修改 TiKV 配置
curl -X POST http://10.0.1.21:20180/config \
    -d '{"raftstore.apply-pool-size": 4}'

也可以通过 TiUP 修改配置并滚动重启:

# 编辑配置
tiup cluster edit-config tidb-cluster

# 应用配置并滚动重启
tiup cluster reload tidb-cluster

六、部署拓扑选择

6.1 最小部署(测试/开发)

1 TiDB + 1 PD + 1 TiKV(单台机器)

适合开发测试,生产环境不可用。

6.2 标准生产部署

2 TiDB + 3 PD + 3 TiKV + 1 监控

最基本的生产配置,可容忍单点故障。

6.3 高可用部署

3+ TiDB + 3/5 PD + 5+ TiKV + 2 监控

更高的冗余度,适合对可用性要求极高的场景。

6.4 跨机房部署

机房 A:  1 TiDB + 2 PD + 2 TiKV (Raft Leader)
机房 B:  1 TiDB + 1 PD + 2 TiKV (Raft Follower)
机房 C:        + 2 TiKV (Raft Follower)

跨机房部署可实现容灾,但会增加写入延迟。


七、部署常见坑点

坑点 1:磁盘未对齐 4K

# 检查磁盘对齐
cat /sys/block/sda/queue/optimal_io_size
cat /sys/block/sda/alignment_offset

# 格式化时对齐
mkfs.ext4 -b 4096 -E stride=128,stripe-width=128 /dev/nvme0n1

坑点 2:NTP 时间不同步

TiKV 和 PD 对时间同步有要求,否则可能导致事务异常:

# 安装 NTP
yum install ntp -y  # 或 apt install ntp

# 同步时间
systemctl start ntpd
systemctl enable ntpd

# 验证
ntpq -p

坑点 3:文件描述符限制过低

# 检查当前限制
ulimit -n

# 如果小于 1000000,需要调整
# 修改 /etc/security/limits.conf
tidb soft nofile 1000000
tidb hard nofile 1000000

坑点 4:Swap 未关闭

Swap 会导致 TiKV 性能急剧下降,务必关闭:

swapoff -a
# 并在 /etc/fstab 中注释掉 swap 行

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论