本文档详细介绍TiDB TiFlash组件的部署与使用,包括TiFlash的核心功能、架构原理、部署规划、配置管理、使用方法等内容。风哥教程参考TiDB官方文档TiFlash相关内容,适合DBA和系统管理员在部署和维护TiDB集群时使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 TiFlash组件概念
TiFlash是TiDB的列式存储引擎,为TiDB提供实时分析能力。
- 作用:提供列式存储、加速分析查询、支持HTAP
- 特点:列式存储、实时同步、MPP计算
- 重要性:使TiDB成为真正的HTAP数据库
- 提供实时分析能力
- 加速复杂查询
- 与行式存储TiKV协同工作
- 支持混合事务和分析工作负载
1.2 TiFlash架构原理
TiFlash采用列式存储架构,与TiKV协同工作:
- 存储架构:列式存储,数据按列压缩存储
- 同步机制:通过Raft Learner协议从TiKV同步数据
- 计算引擎:MPP(Massively Parallel Processing)计算
- 查询优化:智能选择TiKV或TiFlash作为存储引擎
1.3 TiFlash核心特性
TiFlash的核心特性包括:
- 列式存储:更高效的压缩和分析查询
- 实时同步:与TiKV保持数据一致性
- MPP计算:并行处理复杂查询
- 智能选择:根据查询类型自动选择存储引擎
- HTAP支持:同时支持OLTP和OLAP工作负载
Part02-生产环境规划与建议
2.1 TiFlash部署规划
2.1.1 部署模式
## 1. 独立部署
– 单独的服务器部署TiFlash节点
– 推荐生产环境使用风哥提示:
– 提供更好的性能和稳定性
## 2. 混合部署
– 与其他组件部署在同一服务器
– 适合测试环境或资源受限情况
– 可能影响性能
## 3. 部署数量
– 生产环境:2个或更多节点
– 测试环境:1个节点
– 最少:1个节点
– 建议:与TiKV节点数量相匹配
2.1.2 部署拓扑
## 两节点部署示例
– tiflash-1: 192.168.1.301
– tiflash-2: 192.168.1.302
## 网络拓扑
– 业务网络:与TiDB节点通信
– 存储网络:与TiKV节点通信
– 管理网络:与监控系统通信
## 端口规划
– 服务端口:3930
– 状态端口:20290
– 数据同步端口:20280
2.2 TiFlash硬件配置
## 生产环境配置
– CPU:16核及以上
– 内存:32GB及以上
– 存储:1TB+ SSD
– 网络:万兆网卡
## 测试环境配置
– CPU:8核
– 内存:16GB
– 存储:200GB SSD
– 网络:千兆网卡
## 存储要求
– IOPS:10000+ IOPS
– 延迟:< 1ms
- 带宽:2GB/s+
- 顺序读写性能:优先考虑
2.3 TiFlash存储规划
## 1. 存储类型选择
– 推荐:NVMe SSD
– 备选:SATA SSD
– 不推荐:HDD
## 2. 存储容量规划
– 原始数据大小:100GB
– 预留空间:2倍原始数据(200GB)
– 考虑因素:
– 列式存储压缩(约3-5倍压缩率)
– 数据副本(默认与TiKV一致)
– 日志和元数据
– 数据增长
## 3. 存储分区
– 系统分区:50GB
– 数据分区:剩余空间
– 建议使用独立磁盘或分区
## 4. 文件系统
– 推荐:ext4或xfs
– 挂载选项:noatime,nodiratime
– 日志模式:ordered或writeback
Part03-生产环境项目实施方案
3.1 TiFlash配置管理
3.1.1 配置文件结构
## 配置文件路径
– 默认路径:/tidb/app/tiflash-7.5.0/conf/tiflash.toml
学习交流加群风哥QQ113257174
## 主要配置项
[server]
addr = “0.0.0.0:3930”
advertise-addr = “192.168.1.301:3930”
[storage]
data-dir = “/tidb/fgdata/tiflash”
[flash]
server-uuid = “tiflash-1”
[pd]
endpoints = [“http://192.168.1.101:2379”, “http://192.168.1.102:2379”, “http://192.168.1.103:2379”]
[security]
ssl-enable = false
3.1.2 配置修改方法
## 1. 使用TiUP修改配置
$ tiup cluster edit-config fgedu-tidb-cluster
## 2. 手动修改配置文件
$ vi /tidb/app/tiflash-7.5.0/conf/tiflash.toml
## 3. 应用配置变更
$ tiup cluster reload fgedu-tidb-cluster -R tiflash
## 4. 验证配置
$ tiup cluster config fgedu-tidb-cluster –component tiflash
3.2 TiFlash部署流程
3.2.1 新集群部署
## 1. 准备拓扑文件
$ cat > tiflash-topology.yaml << EOF
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb/app"
data_dir: "/tidb/fgdata"
pd_servers:
- host: 192.168.1.101
- host: 192.168.1.102
- host: 192.168.1.103
tikv_servers:
- host: 192.168.1.201
- host: 192.168.1.202
- host: 192.168.1.203
tiflash_servers:
- host: 192.168.1.301
- host: 192.168.1.302
tidb_servers:
- host: 192.168.1.401
- host: 192.168.1.402
EOF
## 2. 部署集群
$ tiup cluster deploy fgedu-tidb-cluster v7.5.0 tiflash-topology.yaml --user root
## 3. 启动集群
$ tiup cluster start fgedu-tidb-cluster
## 4. 验证TiFlash状态
$ tiup cluster display fgedu-tidb-cluster
$ tiup cluster exec fgedu-tidb-cluster -R tiflash --command "curl -s http://localhost:20290/status"
3.2.2 现有集群添加TiFlash
## 1. 准备拓扑文件
$ cat > tiflash-add.yaml << EOF
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb/app"
data_dir: "/tidb/fgdata"
tiflash_servers:
- host: 192.168.1.301
- host: 192.168.1.302
EOF
## 2. 扩展现有的集群
$ tiup cluster scale-out fgedu-tidb-cluster tiflash-add.yaml
## 3. 验证TiFlash状态
$ tiup cluster display fgedu-tidb-cluster
$ tiup cluster exec fgedu-tidb-cluster -R tiflash --command "curl -s http://localhost:20290/status"
3.3 TiFlash监控配置
3.3.1 监控指标
## 1. 核心指标
– tiflash_server_thread_count:线程数量
– tiflash_server_memory_usage_bytes:内存使用量
– tiflash_server_storage_size_bytes:存储使用量
– tiflash_replica_read_bytes_total:副本读取字节数
– tiflash_replica_write_bytes_total:副本写入字节数
## 2. 性能指标
– tiflash_query_duration_seconds:查询处理时间
– tiflash_mpp_query_duration_seconds:MPP查询处理时间
– tiflash_replica_sync_duration_seconds:副本同步时间
– tiflash_compaction_duration_seconds:压缩处理时间
## 3. 资源指标
– tiflash_server_cpu_seconds_total:CPU使用时间
– tiflash_server_network_io_bytes_total:网络IO总量
– tiflash_server_disk_io_bytes_total:磁盘IO总量
3.3.2 告警配置
## 1. 重要告警
– TiFlashDown:TiFlash节点宕机
– TiFlashUnreachable:TiFlash节点不可达
– TiFlashHighCPUUsage:CPU使用率过高
– TiFlashHighMemoryUsage:内存使用率过高
– TiFlashHighDiskUsage:磁盘使用率过高
– TiFlashReplicaLag:副本同步延迟
## 2. 告警阈值设置
– TiFlashDown:节点离线超过5分钟
– TiFlashUnreachable:节点不可达超过5分钟
– TiFlashHighCPUUsage:CPU使用率超过80%持续5分钟
– TiFlashHighMemoryUsage:内存使用率超过80%持续5分钟
– TiFlashHighDiskUsage:磁盘使用率超过80%持续5分钟
– TiFlashReplicaLag:副本同步延迟超过30秒
Part04-生产案例与实战讲解
4.1 TiFlash部署实战案例
4.1.1 两节点TiFlash部署
## 1. 环境准备
$ for host in tiflash-1 tiflash-2; 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 “mkdir -p /tidb/app /tidb/fgdata /tidb/log”
ssh $host “chown -R tidb:tidb /tidb”
ssh $host “echo ‘vm.swappiness = 0’ >> /etc/sysctl.conf”
ssh $host “echo ‘vm.overcommit_memory = 1’ >> /etc/sysctl.conf”
ssh $host “echo ‘net.core.somaxconn = 32768’ >> /etc/sysctl.conf”
ssh $host “sysctl -p”
done
## 2. 网络配置
$ cat >> /etc/hosts << EOF
192.168.1.101 pd-1
192.168.1.102 pd-2
192.168.1.103 pd-3
192.168.1.201 tikv-1
192.168.1.202 tikv-2
192.168.1.203 tikv-3
192.168.1.301 tiflash-1
192.168.1.302 tiflash-2
EOF
## 3. 部署TiFlash
$ cat > tiflash-topology.yaml << EOF
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb/app"
data_dir: "/tidb/fgdata"
pd_servers:
- host: 192.168.1.101
- host: 192.168.1.102
- host: 192.168.1.103
tikv_servers:
- host: 192.168.1.201
- host: 192.168.1.202
- host: 192.168.1.203
tiflash_servers:
- host: 192.168.1.301
- host: 192.168.1.302
tidb_servers:
- host: 192.168.1.401
- host: 192.168.1.402
EOF
$ tiup cluster deploy fgedu-tidb-cluster v7.5.0 tiflash-topology.yaml --user root
## 4. 启动集群
$ tiup cluster start fgedu-tidb-cluster
## 5. 验证TiFlash状态
$ tiup cluster display fgedu-tidb-cluster
$ tiup cluster exec fgedu-tidb-cluster -R tiflash --command "curl -s http://localhost:20290/status"
4.2 TiFlash使用实战案例
4.2.1 为表添加TiFlash副本
## 1. 连接到TiDB
$ mysql -h 192.168.1.401 -P 4000 -u root -p
## 2. 创建测试表
CREATE DATABASE fgedudb;
USE fgedudb;
CREATE TABLE fgedu_users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
email VARCHAR(100),
created_at DATETIME
);
## 3. 为表添加TiFlash副本
ALTER TABLE fgedu_users SET TIFLASH REPLICA 1;
## 4. 检查TiFlash副本状态
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = ‘fgedudb’ AND TABLE_NAME = ‘fgedu_users’;
## 5. 插入测试数据
INSERT INTO fgedu_users VALUES
(1, ‘fgedu01’, 25, ‘fgedu01@example.com’, NOW()),
(2, ‘fgedu02’, 30, ‘fgedu02@example.com’, NOW()),
(3, ‘fgedu03’, 35, ‘fgedu03@example.com’, NOW()),
(4, ‘fgedu04’, 40, ‘fgedu04@example.com’, NOW()),
(5, ‘fgedu05’, 45, ‘fgedu05@example.com’, NOW());
## 6. 执行分析查询
EXPLAIN ANALYZE SELECT age, COUNT(*) FROM fgedu_users GROUP BY age;
## 7. 验证查询使用了TiFlash
EXPLAIN SELECT age, COUNT(*) FROM fgedu_users GROUP BY age;
4.2.2 使用TiFlash加速分析查询
## 1. 连接到TiDB
$ mysql -h 192.168.1.401 -P 4000 -u root -p
## 2. 创建测试表
USE fgedudb;
CREATE TABLE fgedu_orders (
id INT PRIMARY KEY,
user_id INT,
amount DECIMAL(10,2),
status VARCHAR(20),
created_at DATETIME
);
## 3. 为表添加TiFlash副本
ALTER TABLE fgedu_orders SET TIFLASH REPLICA 1;
## 4. 插入大量测试数据
DELIMITER //
CREATE PROCEDURE insert_test_data()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 1000000 DO
INSERT INTO fgedu_orders VALUES
(i, (i % 1000) + 1, RAND() * 1000, 'completed', NOW() - INTERVAL (i % 365) DAY);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL insert_test_data();
## 5. 执行复杂分析查询
EXPLAIN ANALYZE SELECT
DATE(created_at) AS order_date,
COUNT(*) AS order_count,
SUM(amount) AS total_amount
FROM fgedu_orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY order_date
ORDER BY order_date;
## 6. 比较TiKV和TiFlash查询性能
-- 强制使用TiKV
EXPLAIN ANALYZE SELECT /*+ READ_FROM_STORAGE(TIKV[orders]) */
DATE(created_at) AS order_date,
COUNT(*) AS order_count,
SUM(amount) AS total_amount
FROM fgedu_orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY order_date
ORDER BY order_date;
-- 强制使用TiFlash
EXPLAIN ANALYZE SELECT /*+ READ_FROM_STORAGE(TIFLASH[orders]) */
DATE(created_at) AS order_date,
COUNT(*) AS order_count,
SUM(amount) AS total_amount
FROM fgedu_orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY order_date
ORDER BY order_date;
4.3 TiFlash故障排查
4.3.1 TiFlash节点宕机
## 问题现象
– TiFlash节点状态为Down
– 集群告警:TiFlashDown
– 分析查询性能下降
## 解决方案
1. 检查节点状态
$ ssh tiflash-1 “systemctl status tiflash”
2. 检查TiFlash日志
$ tiup cluster logs fgedu-tidb-cluster -R tiflash
3. 检查硬件状态
$ ssh tiflash-1 “df -h”
$ ssh tiflash-1 “free -m”
$ ssh tiflash-1 “iostat -x 1 10”
4. 重启TiFlash节点
$ tiup cluster start fgedu-tidb-cluster -R tiflash
5. 验证节点状态
$ tiup cluster display fgedu-tidb-cluster
4.3.2 TiFlash副本同步延迟
## 问题现象
– 集群告警:TiFlashReplicaLag
– 分析查询结果可能不是最新的
– TiFlash同步速度慢
## 解决方案
1. 检查同步状态
$ tiup cluster exec fgedu-tidb-cluster -R tiflash –command “curl -s http://localhost:20290/status”
2. 检查网络连接
$ ping -c 10 tikv-1
$ iperf3 -c tikv-1
3. 检查TiKV状态
$ tiup cluster exec fgedu-tidb-cluster -R tikv –command “curl -s http://localhost:20180/status”
4. 调整TiFlash配置
$ tiup cluster edit-config fgedu-tidb-cluster
# 在配置文件中添加或修改以下内容
server_configs:
tiflash:
flash:
replica:
apply_batch_size: 1024
apply_thread_count: 8
5. 应用配置变更
$ tiup cluster reload fgedu-tidb-cluster -R tiflash
Part05-风哥经验总结与分享
5.1 最佳实践
TiDB TiFlash组件的最佳实践:
- 部署规划:生产环境部署2个或更多TiFlash节点,确保高可用性
- 硬件配置:使用高性能服务器,特别是存储和网络
- 存储选择:使用NVMe SSD,提供高IOPS和低延迟
- 配置优化:根据集群规模和工作负载调整参数
- 监控告警:配置完善的监控和告警机制
- 定期维护:定期检查TiFlash状态和日志
- 合理使用:只为需要分析的表添加TiFlash副本
5.2 性能优化技巧
## 1. 存储优化
– 使用NVMe SSD:提高IO性能
– 合理规划存储容量:避免空间不足
– 配置适当的文件系统:ext4或xfs
– 优化磁盘挂载选项:noatime,nodiratime
## 2. 内存优化
– 分配足够的内存:至少32GB
– 设置合理的内存限制:避免OOM
– 优化TiFlash缓存:调整相关参数
## 3. 网络优化
– 使用万兆网络:减少网络延迟
– 优化网络参数:调整TCP参数
– 避免网络拥塞:合理规划网络流量
## 4. 配置优化
– 调整同步参数:提高同步速度
– 优化MPP计算:提高分析性能
– 调整线程数:根据CPU核心数调整
## 5. 使用优化
– 只为需要分析的表添加TiFlash副本
– 使用合适的查询语句:充分利用TiFlash的列式存储优势
– 避免在分析查询中使用过多的复杂函数
5.3 使用场景
TiFlash的适用场景包括:
- 实时分析:需要实时分析的业务场景
- 复杂查询:包含聚合、排序、分组等操作的复杂查询
- 报表生成:需要生成报表的业务场景
- 数据仓库:作为数据仓库的分析引擎
- 混合工作负载:同时需要OLTP和OLAP的业务场景
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
