cassandra修复损坏的sstables
由于磁盘阵列Unreadable Sectors错误,强制修复后导致cassandra的一个sstable损坏,cassandra启动时报错:
1 | ERROR \[CompactionExecutor:2\] 2019-07-15 15:03:27,161 DefaultFSErrorHandler.java:92 - Exiting forcefully due to file system exception on startup, disk failure policy "stop" |
lb-47344-big-Data.db这个sstable被破坏了。
因为节点已经无法启动了,所以下面的尝试无可避免的失败了
1 | $ nodetool scrub |
尝试离线修复,如果数据量很大,记得开启screen会话
1 | $ sudo -u cassandra sstablescrub reis image |
注意cassandra数据目录的权限,这里使用cassandra用户来执行scrub
执行结束后,删除掉已经损坏的sstable,scrub时cassandra会将损坏的sstable保持原样
1 | $ sudo mv lb-47344* backups/ |
启动cassandra
1 | $ sudo systemctl start cassandra |
确认系统运行正常
1 | $ nodetool status |
之后可以删除sstablescrub自动创建的快照,释放掉已经无用的sstables
1 | $ nodetool clearsnapshot |
最后需要repair本节点,修复节点数据
1 | $ nodetool repair -local -- reis image |
References:
[1]sstablescrub
[2]Dealing with a corrupt SSTable in Cassandra
[3]So You Have A Broken Cassandra SSTable File?