elasticsearch中的跨数据中心复制策略

Cross data centre replication strategy in elasticsearch

对于按需备份,我们有 2 个相同数据的集群。 一个是主要生产,另一个是故障转移。 实现一个集群到另一个集群的实时复制的最佳选择是什么? 在这种情况下,即使一个集群出现故障,我们也应该能够立即故障转移到另一个集群。 我们可以使用副本吗?

Elasticsearch 实际上并没有专门的跨数据中心复制功能。复制是同步的,因此远非理想,因为延迟增加会导致问题。

然而,人们使用 shared allocation awareness to implement such a setup. Have a look at this walk-through: https://crate.io/docs/en/latest/best_practice/multi_zone_setup.html

Elasticsearch 文档也会有所帮助,但请注意潜在问题:http://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_network

Elasticsearch 对跨数据中心复制的支持很差。 但是我们尝试过的一种方法如下,它适用于某种体积。 从一个数据中心,我们将 ES 集群的快照发送到 S3,而从另一个数据中心,我们从同一个 S3 进行恢复。 我们定期执行此操作以确保我们在两个数据中心获得一致的数据。 由于 snapshot/restore 本质上是递增的,因此非常适合这个问题。这确保只有新数据被移动到另一个数据中心。 虽然这在本质上不是实时的,但它仍然为我们设定了账单。

如果您需要在两个集群之间进行实时同步,请在第二个集群上执行您在一个集群上执行的所有操作。这意味着,您的应用程序或访问一个集群的客户端也应该访问第二个集群。这将是在两个集群上同步实时数据的最佳方法。

否则,如果您不在乎是否错过了一些更新,@Vineeth Mohan 提到的就是要走的路。

你想要的在ElasticSearch blog post about clustering across multiple datacenters

中有描述

you would have your application code write to a replicated queuing system (e.g. Kafka, Redis, RabbitMQ) and have a process (e.g. Logstash) in each DC reading from the relevant queue and indexing documents into the local Elasticsearch cluster

请注意,在您提出此问题时,该文档尚不存在。我只是在自己研究这个问题时偶然发现了它。听到这种方法的其他一些经验会很酷。干杯。