如何在elasticsearch集群之间同步数据?

zhu*_*zzz 2 elasticsearch

我想要在不同的物理位置进行 elasticsearch 数据备份。一开始我尝试将所有elasticsearch节点放在同一个集群中,但是当程序查询或更新elasticsearch时,大数据会在互联网上传输。会造成大量的网络流量费用,并且存在网络延迟。

有没有什么简单的方法可以在两个 elasticsearch 集群之间同步数据?这样我只能在互联网上同步更改的数据。

PS:我不太关心数据同步延迟,小于 1 分钟是可以接受的

小智 5

如果您正在运行最新版本的 Elasticsearch(5.0 或 5.2+),您需要拥有或添加date字段updatedAt或类似名称,然后在目标集群端cron每 1 分钟运行一次,这将运行如下Reindex API查询:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://sourcehost:9200",
      "username": "user",
      "password": "pass"
    },
    "index": "source",
    "query": {
      "range": {
        "updatedAt": {
          "gte": "2015-01-01 00:00:00"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处获取有关 Reindex API 的更多信息 - https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

如果您使用的是较旧的 Elasticsearch (<5.0),那么您可以使用工具elasticdump( https://github.com/taskrabbit/elasticsearch-dump ) 使用与updatedAt字段类似的方法传输数据。