一、部署前的准备
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 行