修改JVM堆内存后SolrCloud副本宕机,如何恢复至活跃状态?
SolrCloud副本Down状态恢复步骤
1. 校验JVM内存配置
- 确认系统可用物理内存充足:Windows下通过任务管理器查看,10G堆内存需确保系统剩余内存不低于该值的1.5倍(避免OOM或系统资源耗尽)
- 修正配置文件:仅保留
solr.in.cmd中的set SOLR_HEAP=10g配置,删除solr.cmd中手动添加的内存参数——solr.cmd会自动读取solr.in.cmd的配置,重复配置会导致启动异常 - 检查JVM参数冲突:查看solr.in.cmd中是否存在独立的
-Xmx/-Xms参数,这类参数会覆盖SOLR_HEAP设置,需删除或统一
2. 按顺序重启所有节点
- 停止全部节点:在solr/bin目录执行
solr stop -all - 逐个启动节点:进入每个节点的solr/bin目录,执行
solr start -cloud -z <ZK连接串> -p <节点端口>,启动时观察控制台输出,确认无内存溢出、ZK连接失败等报错 - 每启动一个节点,通过
http://<节点IP>:<端口>/solr访问Admin UI,确认节点成功加入集群后再启动下一个
3. 修复ZK元数据与节点状态不匹配
- 连接ZK集群:执行
zkCli.cmd(Windows)进入ZK命令行 - 查看节点存活状态:执行
ls /live_nodes,确认已启动的节点均在列表中;执行ls /collections/<集合名>/shards/<分片名>/replicas查看副本元数据 - 清理异常副本状态:若副本实际已启动但元数据显示Down,执行
rmr /collections/<集合名>/shards/<分片名>/replicas/<副本ID>/state.json,Solr会自动同步最新状态
4. 手动恢复异常副本
- 通过Admin UI的Cloud面板,定位Down状态的副本
- 执行强制恢复命令:
solr collection -action RECOVERY -collection <集合名> -shard <分片名> -replica <副本ID> - 若恢复失败,重新创建副本:
solr collection -action ADDREPLICA -collection <集合名> -shard <分片名> -node <节点IP:端口>
5. 排查深层启动错误
- 查看节点
server/logs下的solr.log和solr_gc.log,重点排查启动阶段的JVM启动失败、ZK超时、文件权限等日志 - 检查Windows事件查看器的系统日志,确认是否存在内存不足导致Solr进程被强制终止的记录
内容的提问来源于stack exchange,提问作者sridharnetha
相关产品推荐
相关产品推荐

