当前位置:首页>Linux>Linux Cassandra性能压测与容量规划

Linux Cassandra性能压测与容量规划

  • 2026-10-21 13:27:21
Linux Cassandra性能压测与容量规划

Linux Cassandra性能压测与容量规划

一、为什么需要性能压测与容量规划?

1.1 压测目的

  • 验证极限:单节点/集群QPS、延迟P99
  • 暴露瓶颈:Compaction、GC、磁盘IO、网络
  • 对比调优:不同Compaction策略、Heap配置效果
  • 上线保障:模拟峰值,避免线上雪崩

1.2 容量规划目的

  • 资源预测:节点数、磁盘、内存、带宽
  • 成本控制:避免过配(浪费)或欠配(扩容频繁)
  • 增长应对:年增长率、峰值系数

生产误区:只看单节点基准,忽略多节点Compaction/repair开销。


二、cassandra-stress 工具详解

2.1 工具概述

内置工具:/opt/cassandra/tools/bin/cassandra-stress

支持:

  • 自定义schema(简单键值、宽列、计数器、时间序列)
  • 读写混合比率
  • 一致性级别
  • 多线程并发
  • YAML profile自定义

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 常见压测场景模板

  1. 简单写压测(基准写吞吐):
cassandra-stress write n=10M -node node1,node2,node3 -rate threads=200 -pop seq=1..10M
  1. 读写混合(80读20写):
# 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...
  1. 时间序列(TWCS场景):
cassandra-stress write -pop seq=1..10000000 -col n=FIXED(10) timestamp -rate threads=300
  1. 计数器表:
cassandra-stress counter_write -consistency QUORUM
  1. 大行宽表(宽列):

自定义YAML,列数1000+,模拟日志表。

2.4 高级用法

  • 多DC:-node file=nodes.txt(分DC)
  • 限速:-rate limit=10000/s
  • 错误重试:-errors retries=5
  • 图形报告:-graph file=report.html

K8s下:部署stress Pod并行压测。


三、压测监控与瓶颈分析

3.1 关键指标(结合第10篇)

  • 客户端:op rate、latency P99、errors
  • 服务器:
    • nodetool tpstats:Pending/Dropped
    • proxyhistograms:协调延迟
    • compactionstats:Pending tasks
    • gc.log:暂停时间
    • iostat:磁盘%util
    • netstat:网络饱和

阈值:

  • P99 <50ms(业务SLA)
  • Dropped=0
  • Pending<200
  • GC暂停<1s
  • 磁盘>80%告警

3.2 瓶颈诊断流程

  1. 写瓶颈:MutationStage Pending → CommitLog盘慢/Memtable flush
  2. 读瓶颈:ReadStage + SSTables per read >10 → Compaction落后
  3. CPU高:GC频繁 → Heap调优
  4. 网络:internode流量 → 压缩/限速

压测循环:基准 → 调优 → 再测 → 对比


四、容量规划公式与实践

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:5-15w(简单键值)
  • 读QPS:10-30w(LCS)

集群QPS = 单节点 × 节点数 × 效率系数0.8(开销)

峰值QPS 50w → 至少20节点

4.3 内存/CPU规划

  • Heap:16-24G
  • offheap:Heap 1-2倍
  • CPU:Compaction + QPS × 0.01核/QPS

4.4 带宽规划

  • 内部:写QPS × 行大小 × (RF-1)
  • Repair:数据量 / 周

五、生产压测与规划最佳实践

  1. 环境隔离:独立测试集群,硬件一致
  2. 预热数据:至少集群容量50%数据
  3. 渐进加载:从低并发到峰值
  4. 多轮验证:调优前后对比
  5. 真实流量:dsbulk回放生产数据
  6. 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

六、典型案例复盘

  1. 写QPS只有预期50%:STCS Compaction落后 → 切换UCS,QPS翻倍
  2. P99延迟秒级:大行查询 → SAI索引 + 分页,降ms级
  3. 容量预估超支:未计墓碑 → TWCS + TTL,节省40%磁盘
  4. 峰值崩溃:GC风暴 → offheap_objects + G1调参
  5. K8s压测OOM:Pod限额紧 → 动态HPA + Direct Memory

最新文章

随机文章