Cassandra 3.10执行nodetool repair -pr单节点验证错误修复咨询
解决Cassandra节点
nodetool repair -pr失败(Failed creating a merkle tree)的方法 排查并修复损坏的SSTable
从.195和.99节点的system.log中定位具体关联的keyspace和表,执行nodetool scrub <keyspace_name> <table_name>命令。该命令会扫描并修复损坏的SSTable文件,操作前务必备份对应数据,且选择业务低峰期执行,避免影响集群性能。进一步缩小修复范围
若指定范围修复仍失败,先尝试仅针对问题表执行修复:nodetool repair -pr <keyspace_name> <table_name>;如果还是报错,再精准到错误日志中给出的分区token范围,执行nodetool repair -pr -st <起始token> -et <结束token> <keyspace_name> <table_name>。检查节点磁盘状态
登录xx-xxx-xx-99节点,用df -h确认磁盘是否已满,Merkle树创建需要足够临时空间,磁盘满会直接导致创建失败。同时通过dmesg查看是否存在磁盘IO错误、坏道等硬件层面的问题,有异常及时处理磁盘。清理缓存并重启节点
停止Cassandra服务,备份并删除/var/lib/cassandra/commitlog和/var/lib/cassandra/saved_caches目录下的文件,随后重启节点。这种方式可解决JVM内存碎片、缓存异常引发的创建失败问题。替换问题节点(终极方案)
若以上方法均无效,考虑移除问题节点并重新加入新节点:- 在集群正常节点上执行
nodetool decommission(节点状态正常时)或nodetool removenode <节点ID>(节点无法正常服务时),移除xx-xxx-xx-99节点; - 部署新节点并配置集群信息,启动后等待数据同步完成;
- 对新节点执行
nodetool repair -pr操作。
- 在集群正常节点上执行
内容的提问来源于stack exchange,提问作者Sanjay
相关产品推荐
相关产品推荐

