外观
TiDB 部署验证
集群状态验证
1. 检查集群组件状态
bash
# 使用 TiUP 检查集群状态
tiup cluster display cluster-name
# 示例输出应显示所有组件状态为 Up
tiup cluster display my-tidb2. 验证 PD 集群状态
bash
# 检查 PD 成员状态
tiup ctl pd --host pd-host:2379 member
# 检查 PD 状态
tiup ctl pd --host pd-host:2379 status3. 验证 TiKV 集群状态
bash
# 检查所有 TiKV 存储状态
tiup ctl pd --host pd-host:2379 store
# 检查 TiKV 节点状态
tiup ctl tikv --host tikv-host:20160 status4. 验证 TiDB 服务状态
bash
# 检查 TiDB 状态
tiup ctl tidb --host tidb-host:10080 status
# 检查 TiDB 端口可用性
telnet tidb-host 40005. 验证 TiFlash 状态(如果使用)
bash
# 检查 TiFlash 状态
tiup cluster display cluster-name | grep tiflash
# 检查 TiFlash 副本状态
mysql -h tidb-host -P 4000 -u root -e "SELECT * FROM information_schema.tiflash_replica;"功能验证
1. 基本 SQL 功能验证
sql
-- 连接 TiDB
mysql -h tidb-host -P 4000 -u root
-- 创建数据库
CREATE DATABASE test_db;
-- 使用数据库
USE test_db;
-- 创建表
CREATE TABLE test_table (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
value INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO test_table (name, value) VALUES ('test1', 100), ('test2', 200), ('test3', 300);
-- 查询数据
SELECT * FROM test_table;
-- 更新数据
UPDATE test_table SET value = 150 WHERE name = 'test1';
-- 删除数据
DELETE FROM test_table WHERE name = 'test3';
-- 再次查询验证
SELECT * FROM test_table;2. 事务功能验证
sql
-- 开始事务
START TRANSACTION;
-- 执行多个操作
INSERT INTO test_table (name, value) VALUES ('test4', 400);
UPDATE test_table SET value = 250 WHERE name = 'test2';
-- 提交事务
COMMIT;
-- 验证事务结果
SELECT * FROM test_table;
-- 测试回滚
START TRANSACTION;
INSERT INTO test_table (name, value) VALUES ('test_rollback', 500);
ROLLBACK;
-- 验证回滚结果
SELECT * FROM test_table WHERE name = 'test_rollback';3. 索引功能验证
sql
-- 创建索引
CREATE INDEX idx_name ON test_table(name);
-- 验证索引使用
EXPLAIN SELECT * FROM test_table WHERE name = 'test1';
-- 使用索引查询
SELECT * FROM test_table WHERE name = 'test1';
-- 删除索引
DROP INDEX idx_name ON test_table;4. 视图功能验证
sql
-- 创建视图
CREATE VIEW v_test AS SELECT id, name FROM test_table WHERE value > 200;
-- 使用视图
SELECT * FROM v_test;
-- 删除视图
DROP VIEW v_test;5. 存储过程和函数验证
sql
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE sp_get_test_data()
BEGIN
SELECT * FROM test_table;
END //
DELIMITER ;
-- 调用存储过程
CALL sp_get_test_data();
-- 删除存储过程
DROP PROCEDURE sp_get_test_data;
-- 创建函数
DELIMITER //
CREATE FUNCTION fn_get_max_value() RETURNS INT
BEGIN
DECLARE max_val INT;
SELECT MAX(value) INTO max_val FROM test_table;
RETURN max_val;
END //
DELIMITER ;
-- 调用函数
SELECT fn_get_max_value();
-- 删除函数
DROP FUNCTION fn_get_max_value;性能验证
1. 基准测试
bash
# 使用 sysbench 进行基准测试
# 安装 sysbench
yum install -y sysbench
# 准备测试数据
sysbench --db-driver=mysql --mysql-host=tidb-host --mysql-port=4000 --mysql-user=root --mysql-db=test_db --table_size=100000 --tables=10 prepare
# 运行 OLTP 读写测试
sysbench --db-driver=mysql --mysql-host=tidb-host --mysql-port=4000 --mysql-user=root --mysql-db=test_db --table_size=100000 --tables=10 --threads=16 --time=60 --report-interval=10 oltp_read_write run
# 清理测试数据
sysbench --db-driver=mysql --mysql-host=tidb-host --mysql-port=4000 --mysql-user=root --mysql-db=test_db --table_size=100000 --tables=10 cleanup2. 读写延迟测试
sql
-- 测试写入延迟
INSERT INTO test_table (name, value) VALUES ('perf_test', 999);
-- 测试读取延迟
SELECT COUNT(*) FROM test_table;
SELECT * FROM test_table WHERE id = (SELECT MAX(id) FROM test_table);3. 并发性能测试
bash
# 使用 tiup bench 进行并发测试
tiup bench tpcc --host tidb-host --port 4000 --user root --db tpcc --warehouses 10 prepare
tiup bench tpcc --host tidb-host --port 4000 --user root --db tpcc --warehouses 10 --threads 32 run监控和告警验证
1. 检查监控组件状态
bash
# 检查 Prometheus 状态
curl http://prometheus-host:9090/metrics
# 检查 Grafana 状态
curl -I http://grafana-host:30002. 验证监控数据采集
- 访问 Grafana 界面(默认 http://grafana-host:3000)
- 检查 TiDB 集群监控面板
- 验证各项指标是否正常采集
- 检查是否有异常告警
3. 测试告警功能
bash
# 手动触发一个告警(例如,将 TiKV 节点的磁盘空间使用率阈值设为很低的值)
# 修改 Prometheus 告警规则
# 检查告警是否触发
curl http://prometheus-host:9093/api/v1/alerts备份恢复验证
1. 全量备份验证
bash
# 使用 BR 工具进行全量备份
tiup br backup full --pd pd-host:2379 --storage "local:///tmp/backup"
# 验证备份文件l /tmp/backup2. 恢复验证
bash
# 创建测试数据
mysql -h tidb-host -P 4000 -u root -e "CREATE DATABASE restore_test; USE restore_test; CREATE TABLE t1 (id INT PRIMARY KEY); INSERT INTO t1 VALUES (1), (2), (3);"
# 备份数据库
tiup br backup db --pd pd-host:2379 --db restore_test --storage "local:///tmp/restore_backup"
# 删除测试数据
mysql -h tidb-host -P 4000 -u root -e "DROP DATABASE restore_test;"
# 恢复数据
tiup br restore db --pd pd-host:2379 --db restore_test --storage "local:///tmp/restore_backup"
# 验证恢复结果
mysql -h tidb-host -P 4000 -u root -e "SELECT * FROM restore_test.t1;"高可用验证
1. 节点故障测试
bash
# 模拟 TiKV 节点故障
# 停止一个 TiKV 节点
tiup cluster stop cluster-name -N tikv-host:20160
# 验证集群仍可用
mysql -h tidb-host -P 4000 -u root -e "SELECT * FROM test_db.test_table;"
# 恢复 TiKV 节点
tiup cluster start cluster-name -N tikv-host:20160
# 验证节点恢复
tiup cluster display cluster-name2. PD Leader 切换测试
bash
# 查看当前 PD Leader
tiup ctl pd --host pd-host:2379 member
# 模拟 PD Leader 故障
# 停止当前 PD Leader 节点
tiup cluster stop cluster-name -N pd-leader-host:2379
# 验证 PD 自动选举新 Leader
tiup ctl pd --host <other-pd-host>:2379 member
# 恢复 PD Leader 节点
tiup cluster start cluster-name -N pd-leader-host:2379常见问题处理
1. 集群组件状态异常
问题:TiKV 节点状态显示为 Down 解决方法:检查节点是否在线,查看 TiKV 日志,确认故障原因
问题:PD 节点状态显示为 Tombstone 解决方法:该节点已被移除集群,检查集群状态,必要时重新加入节点
2. 功能验证失败
问题:SQL 执行失败 解决方法:检查 SQL 语法,查看 TiDB 日志,确认错误原因
问题:事务提交失败 解决方法:检查集群状态,查看 TiKV 日志,确认是否存在网络或节点故障
3. 性能验证不通过
问题:查询延迟过高 解决方法:优化 SQL 语句,检查索引使用情况,调整 TiDB 配置参数
问题:写入性能差 解决方法:检查 TiKV 配置,优化磁盘 I/O,调整 Raft 相关参数
验证报告模板
| 验证项 | 验证内容 | 验证结果 | 备注 |
|---|---|---|---|
| 集群状态 | 所有组件状态为 Up | □ 成功 □ 失败 | |
| PD 集群 | PD 成员正常,Leader 稳定 | □ 成功 □ 失败 | |
| TiKV 集群 | TiKV 存储正常,Region 分布均衡 | □ 成功 □ 失败 | |
| TiDB 服务 | TiDB 端口可用,状态正常 | □ 成功 □ 失败 | |
| 基本 SQL 功能 | 增删改查正常 | □ 成功 □ 失败 | |
| 事务功能 | 事务提交和回滚正常 | □ 成功 □ 失败 | |
| 索引功能 | 索引创建和使用正常 | □ 成功 □ 失败 | |
| 监控系统 | 监控数据采集正常 | □ 成功 □ 失败 | |
| 备份恢复 | 备份和恢复功能正常 | □ 成功 □ 失败 | |
| 高可用性 | 节点故障后集群仍可用 | □ 成功 □ 失败 |
常见问题(FAQ)
Q1: 部署验证需要多长时间?
A1: 部署验证时间取决于集群规模和验证内容,一般小型集群需要 30 分钟到 1 小时,大型集群可能需要更长时间。
Q2: 验证过程中需要停止业务吗?
A2: 部署验证应在业务上线前进行,不影响现有业务。如果是已上线集群的验证,建议在业务低峰期进行。
Q3: 如何自动化部署验证?
A3: 可以使用脚本自动化部署验证流程,包括集群状态检查、功能验证和性能测试等。
Q4: 验证过程中出现故障怎么办?
A4: 记录故障现象和日志,分析故障原因,修复后重新进行验证。
Q5: 部署验证完成后需要做什么?
A5: 生成验证报告,记录验证结果和问题,制定后续优化计划,准备业务上线。
Q6: 如何验证 TiFlash 功能?
A6: 创建 TiFlash 副本,执行分析查询,验证 TiFlash 是否正常工作:
sql
-- 创建 TiFlash 副本
ALTER TABLE test_db.test_table SET TIFLASH REPLICA 1;
-- 验证 TiFlash 副本状态
SELECT * FROM information_schema.tiflash_replica WHERE table_schema = 'test_db' AND table_name = 'test_table';
-- 执行查询,验证 TiFlash 加速
EXPLAIN ANALYZE SELECT COUNT(*) FROM test_db.test_table;Q7: 如何验证 TiCDC 功能?
A7: 部署 TiCDC 集群,创建同步任务,验证数据同步功能:
bash
# 创建同步任务
tiup ctl cdc --server cdc-host:8300 changefeed create --pd pd-host:2379 --sink-uri "mysql://root@<downstream-host>:3306/downstream_db?ssl-mode=disable" --changefeed-id="test-cf"
# 验证同步状态
tiup ctl cdc --server cdc-host:8300 changefeed listQ8: 部署验证需要覆盖哪些场景?
A8: 部署验证应覆盖:
- 集群状态验证
- 基本功能验证
- 高级功能验证(事务、索引、视图等)
- 性能验证
- 监控和告警验证
- 备份恢复验证
- 高可用性验证
- 业务场景验证
