节点管理 #

一、节点状态 #

1.1 查看节点状态 #

bash
# 查看集群状态
nodetool status

# 输出示例
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens  Owns    Host ID         Rack
UN  192.168.1.1  100 GB     256     33.3%   xxx-xxx-xxx     rack1
UN  192.168.1.2  100 GB     256     33.3%   yyy-yyy-yyy     rack1
UN  192.168.1.3  100 GB     256     33.3%   zzz-zzz-zzz     rack1

1.2 状态说明 #

text
状态说明:

Status(状态)
├── U (Up):节点在线
└── D (Down):节点离线

State(运行状态)
├── N (Normal):正常运行
├── L (Leaving):正在离开集群
├── J (Joining):正在加入集群
└── M (Moving):正在移动数据

Load(负载)
└── 节点数据量

Owns(拥有)
└── 该节点负责的数据比例

1.3 节点信息 #

bash
# 查看节点详细信息
nodetool info

# 输出示例
ID                     : xxx-xxx-xxx
Gossip active          : true
Thrift active          : true
Native Transport active: true
Load                   : 100 GB
Generation No          : 1234567890
Uptime (seconds)       : 86400
Heap Memory (MB)       : 4096.00 / 8192.00
Off Heap Memory (MB)   : 512.00
Data Center            : datacenter1
Rack                   : rack1
Exceptions             : 0
Key Cache              : entries 10000, size 10 MB, capacity 100 MB, ...
Row Cache              : entries 0, size 0, capacity 0 MB, ...

二、nodetool命令 #

2.1 常用命令 #

bash
# 集群状态
nodetool status
nodetool ring

# 节点信息
nodetool info
nodetool describecluster

# 数据操作
nodetool flush
nodetool compact
nodetool cleanup
nodetool repair

# 网络状态
nodetool netstats
nodetool gossipinfo

# 快照
nodetool snapshot
nodetool listsnapshots
nodetool clearsnapshot

2.2 表操作 #

bash
# 查看表统计
nodetool tablestats my_keyspace.my_table

# 查看表信息
nodetool cfstats my_keyspace.my_table

# 刷新表
nodetool flush my_keyspace my_table

# 压缩表
nodetool compact my_keyspace my_table

# 清理表
nodetool cleanup my_keyspace my_table

# 修复表
nodetool repair my_keyspace my_table

2.3 性能相关 #

bash
# 查看压缩状态
nodetool compactionstats

# 查看线程池状态
nodetool tpstats

# 设置压缩吞吐量
nodetool setcompactionthroughput 64

# 设置流式传输吞吐量
nodetool setstreamthroughput 400

三、节点故障处理 #

3.1 故障检测 #

bash
# 检查节点状态
nodetool status

# 检查Gossip信息
nodetool gossipinfo

# 检查日志
tail -f /var/log/cassandra/system.log

3.2 节点恢复 #

bash
# 临时故障恢复
# 1. 重启节点
bin/cassandra

# 2. 检查状态
nodetool status

# 3. 执行修复
nodetool repair

# 长时间故障恢复
# 1. 替换节点
bin/cassandra -Dcassandra.replace_address=<故障节点IP>

# 2. 修复数据
nodetool repair

3.3 故障预防 #

text
故障预防措施:

监控
├── 节点状态监控
├── 性能指标监控
├── 磁盘空间监控
└── 日志监控

告警
├── 节点离线告警
├── 磁盘空间告警
├── 性能下降告警
└── 错误日志告警

预防
├── 定期维护
├── 数据备份
├── 容量规划
└── 文档记录

四、负载均衡 #

4.1 查看负载 #

bash
# 查看各节点负载
nodetool status

# 查看Token分布
nodetool ring

# 查看数据流
nodetool netstats

4.2 负载不均衡处理 #

bash
# 方式1:添加新节点
# 自动重新分配Token范围

# 方式2:移除重加入
nodetool decommission  # 移除节点
# 重新加入节点

# 方式3:手动移动Token
nodetool move <new_token>

4.3 数据迁移 #

bash
# 查看数据迁移状态
nodetool netstats

# 查看流式传输
nodetool streaminfo

# 设置流式传输速度
nodetool setstreamthroughput 400  # MB/s

五、节点维护操作 #

5.1 刷新操作 #

bash
# 刷新所有MemTable
nodetool flush

# 刷新特定键空间
nodetool flush my_keyspace

# 刷新特定表
nodetool flush my_keyspace my_table

5.2 压缩操作 #

bash
# 触发主压缩
nodetool compact

# 压缩特定键空间
nodetool compact my_keyspace

# 压缩特定表
nodetool compact my_keyspace my_table

# 查看压缩状态
nodetool compactionstats

5.3 清理操作 #

bash
# 清理所有键空间
nodetool cleanup

# 清理特定键空间
nodetool cleanup my_keyspace

# 清理特定表
nodetool cleanup my_keyspace my_table

5.4 修复操作 #

bash
# 全量修复
nodetool repair

# 修复特定键空间
nodetool repair my_keyspace

# 增量修复
nodetool repair --incremental

# 主范围修复
nodetool repair -pr

六、节点配置调整 #

6.1 动态调整 #

bash
# 设置压缩吞吐量
nodetool setcompactionthroughput 64

# 设置流式传输吞吐量
nodetool setstreamthroughput 400

# 设置并发压缩
nodetool setconcurrentcompactors 4

# 设置日志级别
nodetool setlogginglevel org.apache.cassandra DEBUG

6.2 配置更新 #

bash
# 更新配置文件后重启
# 1. 停止节点
nodetool drain
bin/stop-server

# 2. 更新配置
vi conf/cassandra.yaml

# 3. 启动节点
bin/cassandra

# 4. 验证
nodetool status

七、总结 #

节点管理要点:

  1. 状态监控:使用nodetool status查看状态
  2. 故障处理:检测、恢复、预防
  3. 负载均衡:添加节点、数据迁移
  4. 维护操作:flush、compact、cleanup、repair
  5. 配置调整:动态调整和配置更新
  6. 日常巡检:定期检查节点状态

下一步,让我们学习备份与恢复!

最后更新:2026-03-27