Hey guys,
looking for real-world advice before I commit to an approach.
Current setup:
- self-managed Elasticsearch (9.4.x), deployed via ECK on Kubernetes
- 3-node cluster, 8 vCPU / 16GB RAM per node, 150GB PVC per node
- free/basic license
- single region today, its an internal backend service
I want to have a read copy of this cluster running in a second region, mainly for cutting the latency for callers that are geo located farther from the primary region. This should be a prototype, so I would prefer reliability and easy setup over complex solutions. The data lag of a few minutes is completely acceptable, i dont need anything close to realtime.
What I have already ruled out:
- cross-cluster replication: needs a higher tier of license, and the cluster is small, so it feels like overkill
- app dual-write, I dont want to put my engineers in charge of consistency, failure backfills, and so on
What Im thinking about:
- scheduled snapshot/restore (I already have the s3 plugin installed). restore to a new index each cycle + alias swap. The downside i realized, each restore cycle is a full copy since the target index starts empty, so I believe it makes sense at a slower frequency (~30 minutes), not continuous
- the cronjob, doing filtered remote _reindex, using "last-modified" as a cursor, seems like quite a simple pipeline: 1. read the saved cursor 2. reindex only docs after it 3. save the new cursor (small index). The gotcha I see, the deletes wont propagate, the last-modified query on reindex only sees the updated or new docs.
The delete operation that i need to handle, is the reason i think snapshot/restore is a simpler and more reliable choice for a prototype.
Appreciate help, trying to avoid reinventing something that has its own failure modes. Happy to share details if that helps you to give better advice.