Overview
A typical engagement starts when a search cluster loses a node and one shard stops accepting updates while queries are still answered. The on-call team can see replicas in a recovering state but cannot tell why no leader is elected.
Challenge
A SolrCloud shard needs a leader chosen from its replicas, and a PULL replica is never eligible. A layout built for read scaling can leave a single leader-eligible replica per shard, so one node failure is enough to stop indexing. ZooKeeper health, garbage-collection pauses that outlast the client timeout and the update log all affect how quickly a shard recovers.
Environment
SolrCloud on Kubernetes with a ZooKeeper ensemble, collections using a mix of NRT, TLOG and PULL replicas, and an indexing pipeline that retries on failure.
Approach
AceMQ engineers join a live bridge, read the cluster state and the node logs, and check which replicas are leader-eligible and whether ZooKeeper has kept its quorum. They restore an eligible replica first and look for the cause only once indexing has resumed, then review replica types, ZooKeeper timeouts and heap behavior.
Solution
- Cluster state and replica type review for each affected shard to confirm which replicas can become leader
- ZooKeeper member health and latency check, and a comparison of Solr garbage-collection pauses with the client timeout
- Restoration of a leader-eligible replica so the shard accepts updates again
- Replica layout change so that every shard keeps more than one leader-eligible replica
- ZooKeeper and Solr timeout settings reviewed against observed pause times
- Written runbook for the next node loss, so the on-call team can check eligibility and quorum without escalating
Outcome
The engagement delivers the restored shard, a written root-cause analysis covering the replica layout and the timeout settings, the layout and configuration changes that prevent a repeat, and a runbook the customer's on-call team can follow for the same condition.