本文档详细介绍TiDB TiKV组件的存储与配置,包括TiKV的核心功能、存储原理、部署规划、配置管理、参数优化等内容。风哥教程参考TiDB官方文档TiKV相关内容,适合DBA和系统管理员在部署和维护TiDB集群时使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 TiKV组件概念
TiKV(TiKV Key-Value Store)是TiDB的分布式键值存储引擎,负责存储数据。
- 作用:存储数据、提供事务支持、确保数据一致性
- 特点:分布式、高可用、强一致性、水平扩展
- 重要性:TiDB的存储层核心组件
- 分布式事务支持
- 强一致性保证
- 水平扩展性
- 高可用性
- 自动数据分片
1.2 TiKV架构原理
TiKV采用多层架构设计,包括:
- API层:提供客户端访问接口
- 事务层:实现分布式事务
- MVCC层:多版本并发控制
- Rows层:行数据处理
- Block层:数据块管理
- Raft层:一致性协议
- Storage层:底层存储引擎
1.3 TiKV存储原理
TiKV的存储原理包括:
- 数据分片:数据按Region分片,每个Region大小约96MB
- 多副本:每个Region有多个副本,默认3副本
- Raft协议:保证数据一致性
- MVCC:多版本并发控制,支持事务
- 数据编码:使用键值编码存储数据
- Compaction:数据压缩和合并
Part02-生产环境规划与建议
2.1 TiKV部署规划
2.1.1 部署模式
# TiKV部署模式
## 1. 独立部署
– 单独的服务器部署TiKV节点
– 推荐生产环境使用
– 提供更好的性能和稳定性
## 2. 混合部署
– 与其他组件部署在同一服务器
– 适合测试环境或资源受限情况
– 可能影响性能
## 3. 部署数量
– 生产环境:3个或更多节点
– 测试环境:1个节点
– 最少:1个节点
– 建议:奇数个节点,便于Raft选举
2.1.2 部署拓扑
## 三节点部署示例
– tikv-1: 192.168.1.201
– tikv-2: 192.168.1.202
– tikv-3: 192.168.1.203
## 网络拓扑
– 业务网络:与TiDB节点通信
– 存储网络:与其他TiKV节点通信
– 管理网络:与监控系统通信
## 端口规划
– 客户端端口:20160
– 状态端口:20180
2.2 TiKV硬件配置
## 生产环境配置
– CPU:16核及以上
– 内存:32GB及以上
– 存储:1TB+ SSD
– 网络:万兆网卡
## 测试环境配置
– CPU:8核
– 内存:16GB
– 存储:200GB SSD
– 网络:千兆网卡
## 存储要求
– IOPS:10000+ IOPS
– 延迟:< 1ms
- 带宽:2GB/s+
- 随机读写性能:优先考虑
2.3 TiKV存储规划
## 1. 存储类型选择
– 推荐:NVMe SSD
– 备选:SATA SSD
– 不推荐:HDD
## 2. 存储容量规划
– 原始数据大小:100GB
– 预留空间:3倍原始数据(300GB)
– 考虑因素:
– 数据副本(默认3副本)
– 数据压缩(约50%压缩率)
– 日志和元数据
– 数据增长
## 3. 存储分区
– 系统分区:50GB
– 数据分区:剩余空间
– 建议使用独立磁盘或分区
## 4. 文件系统
– 推荐:ext4或xfs
– 挂载选项:noatime,nodiratime
– 日志模式:ordered或writeback
Part03-生产环境项目实施方案
3.1 TiKV配置管理
3.1.1 配置文件结构
# TiKV配置文件结构
## 配置文件路径
– 默认路径:/tidb/app/tikv-7.5.0/conf/tikv.toml
## 主要配置项
[server]
addr = “0.0.0.0:20160”
advertise-addr = “192.168.1.201:20160”
status-addr = “0.0.0.0:20180”
[storage]
data-dir = “/tidb/fgdata/tikv”
[raft]
max-leader-lease = “9s”
[rocksdb]
enable-statistics = true
[security]
ssl-enable = false
[pd]
endpoints = [“http://192.168.1.101:2379”, “http://192.168.1.102:2379”, “http://192.168.1.103:2379”]
3.1.2 配置修改方法
## 1. 使用TiUP修改配置
$ tiup cluster edit-config fgedu-tidb-cluster
## 2. 手动修改配置文件
$ vi /tidb/app/tikv-7.5.0/conf/tikv.toml
## 3. 应用配置变更
$ tiup cluster reload fgedu-tidb-cluster -R tikv
## 4. 验证配置
$ tiup cluster config fgedu-tidb-cluster –component tikv
3.2 TiKV参数优化
3.2.1 核心参数优化
## 1. 存储参数
[storage]
enable-async-io = true
async-io-threads = 4
## 2. RocksDB参数
[rocksdb]
max-open-files = 4096
max-background-jobs = 8
max-subcompactions = 4
## 3. Raft参数
[raft]
max-leader-lease = “9s”
raftstore-max-leader-lease = “9s”
## 4. 服务器参数
[server]
grpc-concurrency = 16
grpc-keepalive-time = “10s”
## 5. 内存参数
[memory]
enable-memory-limiter = true
memory-soft-limit = “24GB”
memory-hard-limit = “28GB”
## 6. 日志参数
[log]
level = “info”
file = “/tidb/log/tikv.log”
max-size = 1024
max-days = 7
3.2.2 性能参数调优
## 1. 写入优化
[raftdb]
max-background-jobs = 4
[rocksdb.defaultcf]
write-buffer-size = “64MB”
max-write-buffer-number = 4
min-write-buffer-number-to-merge = 2
## 2. 读取优化
[rocksdb.defaultcf]
bloom-filter-bits-per-key = 10
block-cache-size = “8GB”
[rocksdb.writecf]
block-cache-size = “4GB”
## 3. 压缩优化
[rocksdb.defaultcf]
compression-per-level = [“no”, “no”, “lz4”, “lz4”, “lz4”, “zstd”, “zstd”]
## 4. 并发优化
[server]
grpc-concurrency = 16
tokio-worker-threads = 16
## 5. 网络优化
[server]
grpc-keepalive-time = “10s”
grpc-keepalive-timeout = “20s”
3.3 TiKV监控配置
3.3.1 监控指标
## 1. 核心指标
– tikv_raftstore_leader_count:Leader数量
– tikv_raftstore_region_count:Region数量
– tikv_rocksdb_write_bytes_total:写入字节数
– tikv_rocksdb_read_bytes_total:读取字节数
– tikv_server_grpc_msg_sent_total:GRPC消息发送总量
– tikv_server_grpc_msg_received_total:GRPC消息接收总量
## 2. 性能指标
– tikv_raftstore_propose_wait_duration_seconds:提案等待时间
– tikv_raftstore_apply_wait_duration_seconds:应用等待时间
– tikv_rocksdb_write_amp:写入放大
– tikv_rocksdb_read_amp:读取放大
– tikv_server_request_duration_seconds:请求处理时间
## 3. 资源指标
– tikv_server_memory_usage_bytes:内存使用量
– tikv_server_storage_size_bytes:存储使用量
– tikv_server_cpu_seconds_total:CPU使用时间
– tikv_server_network_io_bytes_total:网络IO总量
3.3.2 告警配置
## 1. 重要告警
– TiKVDown:TiKV节点宕机
– TiKVUnreachable:TiKV节点不可达
– TiKVRegionUnavailable:Region不可用
– TiKVHighCPUUsage:CPU使用率过高
– TiKVHighMemoryUsage:内存使用率过高
– TiKVHighDiskUsage:磁盘使用率过高
– TiKVSlowQuery:慢查询
## 2. 告警阈值设置
– TiKVDown:节点离线超过5分钟
– TiKVUnreachable:节点不可达超过5分钟
– TiKVRegionUnavailable:Region不可用超过1分钟
– TiKVHighCPUUsage:CPU使用率超过80%持续5分钟
– TiKVHighMemoryUsage:内存使用率超过80%持续5分钟
– TiKVHighDiskUsage:磁盘使用率超过80%持续5分钟
– TiKVSlowQuery:查询时间超过10秒
Part04-生产案例与实战讲解
4.1 TiKV部署实战案例
4.1.1 三节点TiKV集群部署
## 1. 环境准备
$ for host in tikv-1 tikv-2 tikv-3; 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
EOF
## 3. 部署TiKV集群
$ cat > tikv-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
EOF
$ tiup cluster deploy fgedu-tidb-cluster v7.5.0 tikv-topology.yaml --user root
## 4. 启动TiKV集群
$ tiup cluster start fgedu-tidb-cluster
## 5. 验证TiKV集群
$ tiup cluster display fgedu-tidb-cluster
$ tiup cluster exec fgedu-tidb-cluster -R tikv --command "curl -s http://localhost:20180/status"
4.2 TiKV优化实战案例
4.2.1 TiKV性能优化
## 1. 查看当前配置
$ tiup cluster config fgedu-tidb-cluster –component tikv
## 2. 修改配置
$ tiup cluster edit-config fgedu-tidb-cluster
# 在配置文件中添加或修改以下内容
server_configs:
tikv:
storage:
enable-async-io: true
async-io-threads: 4
rocksdb:
max-open-files: 4096
max-background-jobs: 8
memory:
memory-soft-limit: “24GB”
memory-hard-limit: “28GB”
server:
grpc-concurrency: 16
## 3. 应用配置变更
$ tiup cluster reload fgedu-tidb-cluster -R tikv
## 4. 验证配置
$ tiup cluster config fgedu-tidb-cluster –component tikv
## 5. 监控优化效果
$ tiup cluster dashboard fgedu-tidb-cluster
# 查看TiKV -> 性能面板
4.3 TiKV故障排查
4.3.1 TiKV节点宕机
## 问题现象
– TiKV节点状态为Down
– 集群告警:TiKVDown
– 部分Region不可用
## 解决方案
1. 检查节点状态
$ ssh tikv-1 “systemctl status tikv”
2. 检查TiKV日志
$ tiup cluster logs fgedu-tidb-cluster -R tikv
3. 检查硬件状态
$ ssh tikv-1 “df -h”
$ ssh tikv-1 “free -m”
$ ssh tikv-1 “iostat -x 1 10”
4. 重启TiKV节点
$ tiup cluster start fgedu-tidb-cluster -R tikv
5. 验证节点状态
$ tiup cluster display fgedu-tidb-cluster
4.3.2 TiKV性能下降
## 问题现象
– 写入延迟增加
– 查询性能下降
– CPU或内存使用率过高
## 解决方案
1. 检查监控指标
$ tiup cluster dashboard fgedu-tidb-cluster
# 查看TiKV -> 性能面板
2. 检查RocksDB状态
$ tiup cluster exec fgedu-tidb-cluster -R tikv –command “curl -s http://localhost:20180/rocksdb”
3. 检查Region分布
$ tiup cluster exec fgedu-tidb-cluster -R pd –command “pd-ctl -u http://127.0.0.1:2379 region分布”
4. 检查磁盘性能
$ ssh tikv-1 “iostat -x 1 10”
$ ssh tikv-1 “fio –name=test –filename=/tidb/fgdata/tikv/test –rw=randwrite –bs=4k –size=1G –runtime=60 –ioengine=libaio –direct=1”
5. 优化配置
$ tiup cluster edit-config fgedu-tidb-cluster
# 调整相关参数
$ tiup cluster reload fgedu-tidb-cluster -R tikv
Part05-风哥经验总结与分享
5.1 最佳实践
TiDB TiKV组件的最佳实践:
- 部署规划:生产环境部署3个或更多TiKV节点,确保高可用性
- 硬件配置:使用高性能服务器,特别是存储和网络
- 存储选择:使用NVMe SSD,提供高IOPS和低延迟
- 配置优化:根据集群规模和工作负载调整参数
- 监控告警:配置完善的监控和告警机制
- 定期维护:定期检查TiKV状态和日志
- 容量规划:合理规划存储容量,避免空间不足
5.2 性能优化技巧
## 1. 存储优化
– 使用NVMe SSD:提高IO性能
– 合理规划存储容量:避免空间不足
– 配置适当的文件系统:ext4或xfs
– 优化磁盘挂载选项:noatime,nodiratime
## 2. 内存优化
– 分配足够的内存:至少32GB
– 设置合理的内存限制:避免OOM
– 优化RocksDB缓存:调整block-cache-size
## 3. 网络优化
– 使用万兆网络:减少网络延迟
– 优化网络参数:调整TCP参数
– 避免网络拥塞:合理规划网络流量
## 4. 配置优化
– 启用异步IO:提高IO性能
– 调整RocksDB参数:优化读写性能
– 调整并发参数:提高处理能力
– 优化压缩策略:平衡空间和性能
5.3 维护技巧
TiDB TiKV组件的维护技巧:
- 定期检查:定期检查TiKV状态和日志
- 备份数据:定期备份数据,确保数据安全
- 版本升级:及时升级到最新版本
- 参数调优:根据集群运行情况调整参数
- 故障演练:定期进行故障演练,提高应对能力
- 容量监控:监控存储使用情况,及时扩容
- 性能基准:建立性能基准,及时发现性能下降
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
