本文档详细介绍TiDB多节点集群的扩容实战,包括扩容前准备、扩容操作、验证测试等内容。风哥教程参考TiDB官方文档扩容相关内容,适合DBA和系统管理员在业务增长时使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 扩容概念
TiDB集群扩容是指在现有集群基础上添加新的节点,以提高系统的处理能力和存储容量。
- 目的:提高系统性能、增加存储容量、增强高可用性
- 方式:水平扩容(添加节点)、垂直扩容(升级硬件)
- 范围:TiDB节点、TiKV节点、PD节点、TiFlash节点
- 提高系统处理能力
- 增加存储容量
- 增强系统高可用性
- 负载均衡
- 支持业务增长
1.2 扩容类型
TiDB集群扩容的类型:
- TiDB节点扩容:增加SQL处理能力,适合高并发场景
- TiKV节点扩容:增加存储容量和数据处理能力
- PD节点扩容:增强调度能力,提高高可用性
- TiFlash节点扩容:增加分析处理能力
1.3 扩容原则
TiDB集群扩容的基本原则:
- 规划先行:提前规划扩容方案和资源需求
- 分步实施:分步骤进行扩容,避免一次性大规模变更
- 验证测试:扩容后进行充分的验证和测试
- 监控跟踪:扩容过程中密切监控系统状态
- 回滚计划:制定完善的回滚计划,应对异常情况
Part02-生产环境规划与建议
2.1 扩容规划
2.1.1 扩容评估
## 1. 系统状态评估
$ tiup cluster display fgedu-tidb-cluster风哥提示:
## 2. 性能评估
$ tiup cluster dashboard fgedu-tidb-cluster
## 3. 容量评估
$ tiup cluster display fgedu-tidb-cluster –status
## 4. 业务需求评估
– 并发量增长
– 数据量增长
– 响应时间要求
– 高可用性要求
## 5. 扩容方案制定
– 确定扩容类型(TiDB/TiKV/PD/TiFlash)
– 确定扩容数量
– 确定节点配置
– 确定扩容时间窗口
2.1.2 扩容方案
## 场景1:TiDB节点扩容
– 原因:并发查询量增加
– 方案:增加2个TiDB节点
– 配置:16核32GB内存
## 场景2:TiKV节点扩容
– 原因:数据量增长
– 方案:增加3个TiKV节点
– 配置:16核32GB内存,2TB NVMe SSD
## 场景3:混合扩容
– 原因:并发和数据量都增长
– 方案:增加2个TiDB节点和3个TiKV节点
– 配置:TiDB 16核32GB,TiKV 16核32GB 2TB NVMe SSD
2.2 资源准备
2.2.1 硬件准备
## 新节点硬件配置
### TiDB节点
– CPU:8-16核
– 内存:32-64GB
– 存储:500GB SSD
– 网络:万兆网卡
### TiKV节点
– CPU:8-16核
– 内存:32-64GB
– 存储:1-4TB NVMe SSD
– 网络:万兆网卡
### PD节点
– CPU:4-8核
– 内存:8-16GB
– 存储:200GB SSD
– 网络:万兆网卡
### TiFlash节点
– CPU:16-32核
– 内存:64-128GB
– 存储:2-4TB NVMe SSD
– 网络:万兆网卡
2.2.2 系统准备
## 新节点系统配置
$ for host in new-tidb-01 new-tidb-02 new-tikv-01 new-tikv-02 new-tikv-03; do
ssh $host “hostnamectl set-hostname $host”
ssh $host “yum update -y”
ssh $host “yum install -y curl tar openssh-clients sudo python3”
ssh $host “systemctl stop firewalld && systemctl disable firewalld”
ssh $host “setenforce 0 && sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config”
ssh $host “echo ‘never’ > /sys/kernel/mm/transparent_hugepage/enabled”
ssh $host “echo ‘never’ > /sys/kernel/mm/transparent_hugepage/defrag”
ssh $host “echo ‘* soft nofile 65536’ >> /etc/security/limits.conf”
ssh $host “echo ‘* hard nofile 65536’ >> /etc/security/limits.conf”
ssh $host “mkdir -p /tidb/app /tidb/fgdata /tidb/log”
ssh $host “chown -R tidb:tidb /tidb”
done
2.3 网络准备
2.3.1 网络配置
## 1. 主机名解析学习交流加群风哥QQ113257174
$ cat >> /etc/hosts << EOF
192.168.1.201 new-tidb-01
192.168.1.202 new-tidb-02
192.168.1.203 new-tikv-01
192.168.1.204 new-tikv-02
192.168.1.205 new-tikv-03
EOF
## 2. SSH免密登录
$ ssh-keygen -t rsa -N ""
$ for host in new-tidb-01 new-tidb-02 new-tikv-01 new-tikv-02 new-tikv-03; do
ssh-copy-id $host
done
## 3. 端口开放
$ for host in new-tidb-01 new-tidb-02; do
ssh $host "firewall-cmd --permanent --add-port=4000/tcp"
ssh $host "firewall-cmd --permanent --add-port=10080/tcp"
ssh $host "firewall-cmd --reload"
done
$ for host in new-tikv-01 new-tikv-02 new-tikv-03; do
ssh $host "firewall-cmd --permanent --add-port=20160/tcp"
ssh $host "firewall-cmd --permanent --add-port=20180/tcp"
ssh $host "firewall-cmd --reload"
done
Part03-生产环境项目实施方案
3.1 TiDB节点扩容
3.1.1 准备扩容文件
## 1. 创建扩容文件
$ cat > scale-out-tidb.yaml << EOF
tidb_servers:
- host: 192.168.1.201
ssh_port: 22
port: 4000
status_port: 10080
- host: 192.168.1.202
ssh_port: 22
port: 4000
status_port: 10080
EOF
## 2. 执行扩容
$ tiup cluster scale-out fgedu-tidb-cluster scale-out-tidb.yaml
## 3. 查看扩容状态
$ tiup cluster display fgedu-tidb-cluster
## 4. 验证TiDB节点
$ mysql -h 192.168.1.201 -P 4000 -u root -e "SELECT version();"
$ mysql -h 192.168.1.202 -P 4000 -u root -e "SELECT version();"
3.2 TiKV节点扩容
3.2.1 准备扩容文件
## 1. 创建扩容文件
$ cat > scale-out-tikv.yaml << EOF
tikv_servers:
- host: 192.168.1.203
ssh_port: 22
port: 20160
status_port: 20180
- host: 192.168.1.204
ssh_port: 22
port: 20160
status_port: 20180
- host: 192.168.1.205
ssh_port: 22
port: 20160
status_port: 20180
EOF
## 2. 执行扩容
$ tiup cluster scale-out fgedu-tidb-cluster scale-out-tikv.yaml
## 3. 查看扩容状态
$ tiup cluster display fgedu-tidb-cluster
## 4. 监控数据迁移
$ tiup cluster dashboard fgedu-tidb-cluster
# 查看PD -> 调度 -> .region balance
3.3 PD节点扩容
3.3.1 准备扩容文件
## 1. 创建扩容文件
$ cat > scale-out-pd.yaml << EOF
pd_servers:
- host: 192.168.1.206
ssh_port: 22
port: 2379
client_port: 2379
peer_port: 2380
- host: 192.168.1.207
ssh_port: 22
port: 2379
client_port: 2379
peer_port: 2380
EOF
## 2. 执行扩容
$ tiup cluster scale-out fgedu-tidb-cluster scale-out-pd.yaml
## 3. 查看扩容状态
$ tiup cluster display fgedu-tidb-cluster
## 4. 验证PD集群
$ tiup cluster exec fgedu-tidb-cluster -R pd --command "pd-ctl -u http://127.0.0.1:2379 cluster"
Part04-生产案例与实战讲解
4.1 扩容实战案例
4.1.1 电商平台TiKV节点扩容
## 背景
– 现有集群:3个TiDB节点,3个TiKV节点,3个PD节点
– 问题:数据量增长迅速,TiKV节点磁盘使用率超过80%
– 解决方案:增加3个TiKV节点
## 实施步骤
### 1. 新节点准备
$ for host in tikv-04 tikv-05 tikv-06; do
ssh $host “hostnamectl set-hostname $host”
ssh $host “yum update -y”
ssh $host “yum install -y curl tar openssh-clients sudo python3”
ssh $host “systemctl stop firewalld && systemctl disable firewalld”
ssh $host “setenforce 0 && sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config”
ssh $host “echo ‘never’ > /sys/kernel/mm/transparent_hugepage/enabled”
ssh $host “echo ‘never’ > /sys/kernel/mm/transparent_hugepage/defrag”
ssh $host “echo ‘* soft nofile 65536’ >> /etc/security/limits.conf”
ssh $host “echo ‘* hard nofile 65536’ >> /etc/security/limits.conf”
ssh $host “mkdir -p /tidb/app /tidb/fgdata /tidb/log”
ssh $host “chown -R tidb:tidb /tidb”
done
### 2. 网络配置
$ cat >> /etc/hosts << EOF
192.168.1.204 tikv-04
192.168.1.205 tikv-05
192.168.1.206 tikv-06
EOF
### 3. SSH免密登录
$ ssh-keygen -t rsa -N ""
$ for host in tikv-04 tikv-05 tikv-06; do
ssh-copy-id $host
done
### 4. 创建扩容文件
$ cat > scale-out-tikv.yaml << EOF
tikv_servers:
- host: 192.168.1.204
- host: 192.168.1.205
- host: 192.168.1.206
EOF
### 5. 执行扩容
$ tiup cluster scale-out fgedu-tidb-cluster scale-out-tikv.yaml
### 6. 监控扩容过程
$ tiup cluster dashboard fgedu-tidb-cluster
# 查看数据迁移进度
### 7. 验证扩容结果
$ tiup cluster display fgedu-tidb-cluster
$ tiup cluster exec fgedu-tidb-cluster -R tikv --command "df -h"
4.2 验证案例
4.2.1 扩容后验证
## 1. 集群状态验证
$ tiup cluster display fgedu-tidb-cluster
## 2. 服务状态验证
$ tiup cluster health fgedu-tidb-cluster
## 3. 功能验证
$ mysql -h 192.168.1.201 -P 4000 -u root << EOF
CREATE DATABASE fgedu_test;
USE fgedu_test;
CREATE TABLE fgedu_users (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO fgedu_users VALUES (1, 'test1'), (2, 'test2'), (3, 'test3');
SELECT * FROM fgedu_users;
EOF
## 4. 性能验证
$ tiup bench tpcc --db fgedu_test --host 192.168.1.201 --port 4000 --user root --warehouses 10 --time 60s
## 5. 负载均衡验证
$ tiup cluster exec fgedu-tidb-cluster -R tidb --command "curl -s http://localhost:10080/status | grep connections"
## 6. 数据分布验证
$ tiup cluster exec fgedu-tidb-cluster -R pd --command "pd-ctl -u http://127.0.0.1:2379 store"
4.3 故障排除
4.3.1 扩容失败
## 问题1:SSH连接失败
– 现象:扩容过程中SSH连接失败
– 解决方案:
– 检查网络连接
– 检查SSH免密登录配置
– 检查防火墙设置
## 问题2:端口冲突
– 现象:新节点端口被占用
– 解决方案:
– 检查端口占用情况
– 修改配置文件中的端口
– 重启相关服务
## 问题3:数据迁移失败
– 现象:TiKV节点扩容后数据迁移失败
– 解决方案:
– 查看TiKV日志
– 检查网络连接
– 检查磁盘空间
– 调整PD调度参数
## 问题4:服务启动失败
– 现象:新节点服务无法启动
– 解决方案:
– 查看服务日志
– 检查配置文件
– 检查资源使用情况
– 检查权限设置
Part05-风哥经验总结与分享
5.1 最佳实践
TiDB多节点集群扩容最佳实践:
- 提前规划:根据业务增长趋势,提前规划扩容方案
- 资源准备:确保新节点的硬件和网络资源满足要求
- 分步实施:分步骤进行扩容,避免一次性大规模变更
- 监控跟踪:扩容过程中密切监控系统状态
- 验证测试:扩容后进行充分的验证和测试
- 文档记录:详细记录扩容过程和结果
- 回滚计划:制定完善的回滚计划,应对异常情况
5.2 性能优化
## 1. 调度优化
$ tiup cluster exec fgedu-tidb-cluster -R pd –command “pd-ctl -u http://127.0.0.1:2379 config set schedule.max-snapshot-count 6”
$ tiup cluster exec fgedu-tidb-cluster -R pd –command “pd-ctl -u http://127.0.0.1:2379 config set schedule.max-pending-peer-count 32”
## 2. 负载均衡
$ tiup cluster exec fgedu-tidb-cluster -R pd –command “pd-ctl -u http://127.0.0.1:2379 operator add balance-region”
## 3. 配置调整
$ tiup cluster edit-config fgedu-tidb-cluster
# 调整TiKV配置
server_configs:
tikv:
performance.max-procs: 16
storage.scheduler-worker-pool-size: 4
## 4. 应用优化
– 优化应用连接池
– 合理使用读写分离
– 优化SQL语句
– 增加缓存层
5.3 维护技巧
TiDB多节点集群扩容后的维护技巧:
- 定期检查:定期检查新节点的状态和性能
- 监控告警:设置合理的监控告警,及时发现问题
- 数据均衡:确保数据在所有节点上均匀分布
- 备份策略:调整备份策略,确保数据安全
- 容量规划:根据业务增长,继续规划未来的扩容需求
- 版本管理:确保新节点的版本与现有节点一致
- 文档更新:及时更新集群文档,记录新节点信息
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
