一、事故背景
nexus 因产生脏数据导致数据不一致,生成大量日志文件,并且并发的有OOM,nexus服务挂了
二、紧急灾难处理
1、通过最新的nexus备份数据进行备机启动,先恢复服务避免影响扩大
2、因域名切换需要一定时间,在切换域名指向IP前先检查备份数据正确性
进入nexus工作目录/opt/nexus/后执行命令java -jar ./lib/support/nexus-orient-console.jar 进入orientdb命令行
3、执行命令:CONNECT PLOCAL:/opt/sonatype-work/nexus3/db/${dbname} admin admin 连接到数据库并执行命令检查数据文件
REBUILD INDEX *
REPAIR DATABASE –fix-graph
REPAIR DATABASE –fix-links
REPAIR DATABASE –fix-ridbags
REPAIR DATABASE –fix-bonsai
4、修复完毕后修改文件属主属组为nexus,并启动nexus备库,至此,备库开始提供服务
三、事故定位
1、查看日志,发现日志报错如下
经确认,assetdownloadcount记录的是asset下载次数的数据,报错是因为记录delete失败,该表数据并不重要,故采用人工删除的方式解决,筛选日志,发现需要删除的表为truncate cluster assetdownloadcount_3,truncate cluster assetdownloadcount_5,truncate cluster assetdownloadcount_10,truncate cluster assetdownloadcount_15
2、尝试启动服务,发现有日志报错为
定位为INDEX quartz_job_detail_name_group_idx重复导致
四、事故处理
1、进入/opt/nexus/目录下,执行命令:java -jar ./lib/support/nexus-orient-console.jar 进入orientdb命令行,并执行命令:CONNECT PLOCAL:/opt/sonatype-work/nexus3/db/component admin admin 连接到component库后执行命令:
truncate cluster assetdownloadcount_3
truncate cluster assetdownloadcount_5
truncate cluster assetdownloadcount_10
truncate cluster assetdownloadcount_15
删除有问题的cluster
2、执行命令:CONNECT PLOCAL:/opt/sonatype-work/nexus3/db/config admin admin 连接到config库
执行命令:drop INDEX quartz_job_detail_name_group_idx
3、依次修复所有库的数据
REBUILD INDEX *
REPAIR DATABASE –fix-graph
REPAIR DATABASE –fix-links
REPAIR DATABASE –fix-ridbags
REPAIR DATABASE –fix-bonsai
4、重启nexus 发现服务正常,日志输出正常,至此,问题完美解决
5、修改数据备份策略,此时主备库以互换
- 本文作者: Devops旭
- 本文链接: http://yoursite.com/2020/04/14/记一次nexus事故/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!