Skip to content

TiDB 部署验证

集群状态验证

1. 检查集群组件状态

bash
# 使用 TiUP 检查集群状态
tiup cluster display cluster-name

# 示例输出应显示所有组件状态为 Up
tiup cluster display my-tidb

2. 验证 PD 集群状态

bash
# 检查 PD 成员状态
tiup ctl pd --host pd-host:2379 member

# 检查 PD 状态
tiup ctl pd --host pd-host:2379 status

3. 验证 TiKV 集群状态

bash
# 检查所有 TiKV 存储状态
tiup ctl pd --host pd-host:2379 store

# 检查 TiKV 节点状态
tiup ctl tikv --host tikv-host:20160 status

4. 验证 TiDB 服务状态

bash
# 检查 TiDB 状态
tiup ctl tidb --host tidb-host:10080 status

# 检查 TiDB 端口可用性
telnet tidb-host 4000

5. 验证 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 cleanup

2. 读写延迟测试

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:3000

2. 验证监控数据采集

  • 访问 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/backup

2. 恢复验证

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-name

2. 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 list

Q8: 部署验证需要覆盖哪些场景?

A8: 部署验证应覆盖:

  • 集群状态验证
  • 基本功能验证
  • 高级功能验证(事务、索引、视图等)
  • 性能验证
  • 监控和告警验证
  • 备份恢复验证
  • 高可用性验证
  • 业务场景验证