首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Elasticsearch数据复制到新服务器?

如何将Elasticsearch数据复制到新服务器?
EN

Stack Overflow用户
提问于 2019-10-11 21:43:13
回答 2查看 450关注 0票数 0

我在一台新服务器上安装了Elasticsearch。我有一个名为metrics的索引,其中推送来自我的应用程序的自定义指标。我要做的是将旧服务器中的指标添加到此索引中。

我曾尝试在旧服务器上使用弹性转储,如下所示:elasticdump --input=http://oldserver:9200/metrics --output=metrics_dump.json --type=data,但在将大约1,000,000个条目添加到文件后,我得到了一个错误(metrics在旧服务器上大约有10,000,000个条目)。因此,我想使用滚动并批量保存条目:elasticdump --input=http://oldserver:9200/metrics --output=metrics_dump_1.json --type=data --searchBody='{ "sort": ["_doc"], "query": { "match_all": {} }, "size": 100000 },但这不起作用。条目在100,000标记之后不断写入到文件中。此外,在检查输出文件的第一行时,我没有看到scroll_id,所以我怀疑searchBody参数被忽略了。

有没有其他方法可以移动这些数据?我不需要丢失来自新服务器指标的任何较新条目。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-11 21:47:20

您有几个选项。如果可以在旧服务器上停止elasticsearch,只需停止它并复制数据目录即可。它将复制所有内容。

如果没有,那么您可以使用snapshots。制作快照并恢复新服务器中的数据。您可以指定要备份和/或恢复的索引。快照制作示例:

代码语言:javascript
复制
PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false,
  "metadata": {
    "taken_by": "kimchy",
    "taken_because": "backup before upgrading"
  }
}

恢复快照的示例(将快照文件夹复制到新服务器后):

代码语言:javascript
复制
POST /_snapshot/my_backup/snapshot_1/_restore

除非您已经配置了任何快照文件夹,否则您将不得不重新配置并重新启动elasticsearch。

第三种选择是使用远程服务器通过reindex复制数据。

代码语言:javascript
复制
POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "username": "user",
      "password": "pass"
    },
    "index": "source",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

第三个选项不需要重启elasticsearch就可以工作。

票数 1
EN

Stack Overflow用户

发布于 2019-10-12 21:06:32

除了@julodnik发布的答案之外,复制数据的最简单方法之一是使您的new ES集群成为旧的/现有的ES集群。这可以通过在新集群的elasticsearch.yml中配置与现有集群相似的属性来实现,特别是属性主节点(discovery.zen.ping.unicast.hosts)和集群名称('cluster.name`)。这样,新集群将加入现有集群,数据将均匀平衡。

代码语言:javascript
复制
PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "IP_of_old_cluster"
  }
}

在关闭它之前。

另一种选择是设置logstash来读取索引metrics和写入ES。您需要为它配置logstash.conf,以便它读取整个metrics索引。就像这样

代码语言:javascript
复制
## SOURCE
input {
  elasticsearch {
    hosts => ["http://your_old_es_host:9200"]
    user => "elastic"
    password => "foopass"
    index => "metrics"
    scroll => "5m"
    size => 5000
    docinfo_fields => [ "_id" ]
    query => '{"query":
               {"match_all": {}
                }}'
  }
}

## TARGET
output {
  elasticsearch {
    hosts => ["http://your_new_es_host:9200"]
    index => "metrics-new"
    user => "elastic"
    password => "foopass"
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58342558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档