Linux Cassandra性能压测与容量规划
一、为什么需要性能压测与容量规划?
1.1 压测目的
- 暴露瓶颈:Compaction、GC、磁盘IO、网络
- 对比调优:不同Compaction策略、Heap配置效果
1.2 容量规划目的
生产误区:只看单节点基准,忽略多节点Compaction/repair开销。
二、cassandra-stress 工具详解
2.1 工具概述
内置工具:/opt/cassandra/tools/bin/cassandra-stress
支持:
- 自定义schema(简单键值、宽列、计数器、时间序列)
5.1增强:SAI索引压测、Trie Memtable负载模拟。
2.2 基本命令与参数
cassandra-stress write n=1000000 -node 10.0.0.10 -rate threads=100
# 关键参数
-n / -operations:操作数
-rate threads:并发线程(模拟QPS)
-node:目标节点列表(负载均衡)
-consistency:一致性级别(QUORUM等)
-pop:预热数据分布
-duration:持续时间
输出:op rate、latency mean/P99、partition rate等。
2.3 常见压测场景模板
cassandra-stress write n=10M -node node1,node2,node3 -rate threads=200 -pop seq=1..10M
# custom.yaml
keyspace:stress
table:mixed
insert:
partitions:uniform(1..1000000)
columnspec:
-name:c
population:uniform(1..1000)
queries:
read:
cql:SELECT*FROMmixedWHEREpk=?
fields:all
write:
cql:INSERTINTOmixed(pk,c)VALUES(?,?)
fields:all
# 运行
cassandra-stressuserprofile=custom.yamlduration=30m-ratethreads=500-node...
cassandra-stress write -pop seq=1..10000000 -col n=FIXED(10) timestamp -rate threads=300
cassandra-stress counter_write -consistency QUORUM
自定义YAML,列数1000+,模拟日志表。
2.4 高级用法
- 多DC:-node file=nodes.txt(分DC)
- 图形报告:-graph file=report.html
K8s下:部署stress Pod并行压测。
三、压测监控与瓶颈分析
3.1 关键指标(结合第10篇)
- 客户端:op rate、latency P99、errors
- nodetool tpstats:Pending/Dropped
- compactionstats:Pending tasks
阈值:
3.2 瓶颈诊断流程
- 写瓶颈:MutationStage Pending → CommitLog盘慢/Memtable flush
- 读瓶颈:ReadStage + SSTables per read >10 → Compaction落后
压测循环:基准 → 调优 → 再测 → 对比
四、容量规划公式与实践
4.1 数据量规划
总存储 = 数据量 × RF × (1 + Compaction临时1.5倍 + 预留20%)
单节点磁盘 = 总存储 / 节点数 × 安全系数1.2
示例:年数据100TB,RF=3,增长50%:
总原料 ≈ 100TB × 3 × 1.5 × 1.2 = 540TB
节点数(单节点20TB有效):540 / 20 ≈ 27节点
4.2 性能容量
单节点基准(NVMe,5.1):
集群QPS = 单节点 × 节点数 × 效率系数0.8(开销)
峰值QPS 50w → 至少20节点
4.3 内存/CPU规划
- CPU:Compaction + QPS × 0.01核/QPS
4.4 带宽规划
五、生产压测与规划最佳实践
- K8s压测:Locust/JMeter Pod分布式
自动化脚本:
# stress_loop.sh
for threads in 100 200 400 800; do
cassandra-stress mixed ratio\(write=2,read=8\) duration=20m -rate threads=$threads -node ...
# 记录结果
done
六、典型案例复盘
- 写QPS只有预期50%:STCS Compaction落后 → 切换UCS,QPS翻倍
- P99延迟秒级:大行查询 → SAI索引 + 分页,降ms级
- 容量预估超支:未计墓碑 → TWCS + TTL,节省40%磁盘
- 峰值崩溃:GC风暴 → offheap_objects + G1调参
- K8s压测OOM:Pod限额紧 → 动态HPA + Direct Memory