You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra3.9并行启动多修复会话后失败,咨询nodetool scrub操作注意事项

Cassandra多并行修复会话残留报错解决方案

问题核心原因

你使用的Cassandra 3.9版本未包含对应修复补丁,误启动多并行修复会话后,SSTable上残留了内存级的修复中标记,导致新修复任务无法抢占资源,触发Cannot start multiple repair sessions over the same sstables报错。

nodetool scrub是不是唯一解决方案?

不是,scrub是高影响的最终兜底方案,优先尝试低风险操作即可解决问题:

  • 第一步:在所有涉及报错的节点执行nodetool repair -stop,终止当前所有活跃的修复会话
  • 第二步:如果终止后仍报错,滚动重启两个报错节点即可清除内存中残留的修复标记,无需修改磁盘数据,业务影响极小
  • 仅在上述操作都无效的场景下,再选择执行scrub操作

生产环境执行scrub的注意事项

执行前准备

  • 确认集群副本数RF≥3,且当前节点外至少有1个完整的副本数据可用,scrub会丢弃无法校验的损坏数据,需有副本兜底恢复
  • 提前摘除该节点的业务流量,scrub是高IO、高CPU消耗的操作,执行期间节点无法正常响应业务请求
  • 执行nodetool drain将节点内存中的所有数据刷写到磁盘,再停止Cassandra进程,避免内存数据丢失
  • 备份当前节点目标keyspace(你场景中的test库)的所有SSTable文件,直接复制data目录下对应keyspace的文件夹到独立备份路径,操作出错可直接回滚

执行中注意

  • 不要添加-s(跳过损坏数据)参数,默认模式下scrub遇到损坏数据会直接终止,不会自动丢弃数据,避免误丢数据
  • 全程监控节点磁盘IO、CPU负载和scrub运行日志,遇到异常及时终止操作

执行后校验

  • 启动Cassandra进程后,先单独针对该节点执行一次全量修复,确保数据和集群其他副本一致
  • 验证目标表的读写功能正常,数据校验无误后,再将节点切回生产集群承接流量

内容的提问来源于stack exchange,提问作者Radhika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:06:04