AKS部署的SolrCloud副本反复恢复失败问题求助
排查与解决方案
1. 节点资源过载与驱逐排查
- 每个AKS节点总内存32G,你的Solr Pod内存请求设为20G,节点本身还要运行Kubelet、容器运行时及系统进程(至少占用4-6G),剩余可用内存空间极少。当Pod内存使用逼近请求阈值,或节点内存耗尽时,Kubernetes会触发OOMKiller或节点压力驱逐,直接导致Pod重启。
- 执行
kubectl describe pod <solr-pod-name>查看Pod事件,确认是否存在OOMKilled或Evicted记录 - 用
kubectl top node查看节点内存使用率,检查是否有节点内存负载接近100% - 下调Pod内存请求至18G以内,给节点预留足够缓冲空间
- 执行
2. JVM内存配置优化
- 当前JVM堆设为
xms12g、xmx16g,Pod内存请求20G,留给堆外内存(Direct Memory、MetaSpace、JNI内存等)的空间仅4G。若堆外内存占用超出该值,会导致Pod内存超限,触发Kubernetes的内存限制机制。- 在Solr启动命令中添加
-XX:+PrintFlagsFinal -XX:+PrintGCDetails参数,收集GC日志和堆外内存使用数据 - 尝试将JVM堆上限降至14G,给堆外内存多预留2G空间,观察重启现象是否缓解
- 在Solr启动命令中添加
3. 分片副本负载均衡调整
- 7分片3副本的集合共21个分片实例,仅5个Solr节点承载,单节点会分配4-5个副本,过多分片会导致节点IO、CPU负载过高,间接引发Pod重启。
- 登录Solr Admin UI的Cloud页面,检查每个节点的分片分布,确认是否有节点负载过载
- 创建集合时添加副本数限制规则,避免单节点承载过多副本:
solr create_collection -c mycollection -shards 7 -replicationFactor 3 -rule "replica:<=3"
4. 存储与StatefulSet配置检查
- 若Solr使用Azure Disk等持久化存储,IO性能瓶颈或挂载异常可能导致Pod重启。
- 在AKS控制台查看持久卷的IOPS、吞吐量指标,确认是否达到性能上限
- 执行
kubectl describe pvc <solr-pvc-name>检查存储挂载事件,排查磁盘满、挂载失败等问题 - 将StatefulSet的
terminationGracePeriodSeconds设置为300秒以上,给Solr足够时间优雅关闭,避免强制杀死导致分片损坏
5. 深层日志收集
- 仅查看Solr应用日志可能遗漏关键信息,需检查Kubernetes节点层面的日志:
- 查看节点Kubelet日志:
kubectl logs -n kube-system kubelet-<node-name>,搜索对应Pod的重启触发原因 - 查看容器重启前的错误输出:
kubectl logs <solr-pod-name> -c <solr-container-name> --previous
- 查看节点Kubelet日志:
内容的提问来源于stack exchange,提问作者Nguyen Tu
相关产品推荐
相关产品推荐

