Linux Cassandra Nodetool 常用命令实战
一、Nodetool 基础知识与使用注意
1.1 Nodetool 位置与执行方式
默认路径:/opt/cassandra/bin/nodetool
执行方式:
- 远程:
nodetool -h <ip> -p <jmx_port> <command>(默认jmx_port 7199) - 认证:生产启用JMX认证后,加
-u user -pw password
生产建议:
1.2 安全注意
- 启用认证(cassandra-env.sh中AUTH=true)
1.3 常见选项
二、集群状态查看命令
这些命令用于日常巡检集群健康。
2.1 nodetool status(最常用)
nodetool status [keyspace]
输出示例:
Datacenter: DC1===============Status=Up/Down|/ State=Normal/Leaving/Joining/Moving-- Address Load Tokens Owns Host ID RackUN 10.0.0.10 1.2 TB 32 33.3% xxxx... rack1UN 10.0.0.20 1.1 TB 32 33.4% xxxx... rack1DN 10.0.0.30 1.2 TB 32 33.3% xxxx... rack1
- N/L/J/M:Normal/Leaving/Joining/Moving
- Owns:数据拥有比例(vnodes下应接近1/N)
生产场景:
加keyspace:显示该keyspace数据分布
常见问题:Owns偏差大 → 数据倾斜,检查Partition Key或num_tokens
2.2 nodetool describecluster
nodetool describecluster
输出:集群名、Partitioner、Snitch、Schema版本等
生产用:Schema版本不一致 → 需nodetool upgradesstables
2.3 nodetool ring
nodetool ring [keyspace]
显示Token环详细分布(类似status但更细)
2.4 nodetool gossipinfo
nodetool gossipinfo
显示Gossip状态:节点心跳、版本、DC/Rack
生产排查:Gossip不一致 → 网络分区或phi阈值问题
三、节点与性能监控命令
3.1 nodetool info
nodetool info
输出:节点ID、Token、Load、Uptime、Heap使用、GC统计等
生产场景:检查单节点Heap/GC异常
3.2 nodetool tpstats
nodetool tpstats
显示线程池统计:Active/Pending/Completed/Dropped
关键池:
生产阈值:
案例:MutationStage Dropped高 → 写QPS超限,需扩容或调concurrent_writes
3.3 nodetool proxyhistograms
nodetool proxyhistograms
显示读写延迟百分位(P50/P99/P99.9)
生产监控:P99 >50ms → 告警,检查Compaction或磁盘
3.4 nodetool cfstats / tablestats(5.0推荐tablestats)
nodetool tablestats keyspace.table
输出:SSTable数量、空间占用、读写延迟、Bloom Filter命中、墓碑数等
关键指标:
- SSTables per read 直方图:>10表示Compaction落后
- Space used (live/total):压缩比率
生产场景:定期检查表健康,墓碑高 → 调整TTL或repair
3.5 nodetool netstats
nodetool netstats
显示streaming进度、Hinted Handoff
扩容必看:Streaming进度百分比
四、维护与修复命令
4.1 nodetool repair
nodetool repair -pr keyspace table # 推荐增量repair + primary range
生产实践:每周调度增量repair,避免数据不一致
4.2 nodetool cleanup
nodetool cleanup keyspace table
扩容/缩容后清理多余数据,避免磁盘浪费
4.3 nodetool compact
nodetool compact keyspace table # 强制Major Compaction
手动触发压缩,慎用(IO风暴)
4.4 nodetool flush
nodetool flush keyspace table
强制Memtable flush到SSTable
场景:重启前drain,或Memtable堆积
4.5 nodetool drain
nodetool drain
flush Memtable + 停止接收新写,重启前必执行
五、其他高级命令
5.1 nodetool getendpoints
nodetool getendpoints keyspace table partition_key
查看某Partition所在节点(调试数据分布)
5.2 nodetool setcompactionthroughput
nodetool setcompactionthroughput 64 # MB/s
动态限速Compaction
5.3 nodetool assassinate
nodetool assassinate <ip>
强制移除故障节点(极端情况)
5.4 nodetool rebuild
跨DC重建数据
5.5 nodetool enablehinteddandoff / disablehinteddandoff
控制Hinted Handoff
六、生产nodetool巡检脚本示例
#!/bin/bashecho"=== Status ==="nodetool statusecho"=== TPStats ==="nodetool tpstats | grep -E "Pending|Dropped"echo"=== Proxy Histograms ==="nodetool proxyhistogramsecho"=== Table Stats (关键表) ==="nodetool tablestats prod.users
结合crontab每日执行,输出到日志。
七、常见问题
- status显示DN → 检查system.log,常见GC长暂停或磁盘满
- tpstats Dropped高 → 写超载 → 扩容或限流客户端
- tablestats SSTables多 → Compaction落后 → 提高concurrent_compactors
- repair卡住 → 网络或负载 → 加-seq分序执行