CentOS环境下Cassandra启动卡在Initializing IndexInfo故障求助
解决Cassandra重启后卡在system.IndexInfo初始化、Connection refused的问题
我之前在CentOS运维Cassandra时也碰到过完全一样的情况——故障重启后服务卡死,连nodetool status都报Connection refused,debug.log停在Initializing system.IndexInfo这一行。结合实际排查经验,给你几个靠谱的解决思路:
先确认基础状态
- 首先检查Cassandra进程是否还在运行:
ps aux | grep cassandra,如果有进程但端口没监听,那确实是启动卡住了; - 再检查关键端口状态:
netstat -tulpn | grep 7000(集群通信端口)、netstat -tulpn | grep 9042(CQL客户端端口),如果都没显示监听,说明服务没完成启动流程。
最常见原因:system表SSTable损坏
故障场景下很容易导致system键空间的表损坏,而system.IndexInfo是启动时优先初始化的表,卡住大概率是它的SSTable出问题了,修复步骤:
- 先彻底停止Cassandra:
sudo service cassandra stop # 如果停不掉就强制杀进程 sudo kill -9 $(ps aux | grep cassandra | grep -v grep | awk '{print $2}') - 备份system表目录(重要!防止误操作):
sudo cp -r /var/lib/cassandra/data/system/ /tmp/cassandra_system_backup/ - 进入system数据目录,删除IndexInfo相关的SSTable文件:
cd /var/lib/cassandra/data/system/ rm -rf indexinfo-* - 清空损坏的commitlog(故障后commitlog可能残留异常数据):
sudo rm -rf /var/lib/cassandra/commitlog/* - 重新启动Cassandra并实时查看日志:
观察日志是否能顺利走完system表初始化,不再卡在IndexInfo这一步。sudo service cassandra start tail -f /var/log/cassandra/debug.log
其他可能的排查方向
- 磁盘空间不足:用
df -h检查Cassandra数据目录(默认/var/lib/cassandra/)所在磁盘是否满了,Cassandra启动需要足够空间写入临时文件和SSTable,至少要腾出2-3G空间再尝试启动; - 内存配置不合理:检查
/etc/cassandra/cassandra-env.sh里的MAX_HEAP_SIZE和HEAP_NEWSIZE,比如8G内存的服务器,建议MAX_HEAP_SIZE="4G"、HEAP_NEWSIZE="1G",调整后重启服务; - system表整体损坏:如果删除IndexInfo还是卡住,可以尝试启动到单用户模式修复整个system键空间:
启动后执行sudo cassandra -f -Dcassandra.consistent.rangemovement=false -Dcassandra.ignore_dc=truenodetool repair system完成修复,再正常重启服务。
内容的提问来源于stack exchange,提问作者user988066
相关产品推荐
相关产品推荐

