1

我在服务器上运行了 elasticsearch 5.5,其中索引了一些数据。我想将此 ES 数据迁移到 AWS elasticsearch 集群。我如何执行此迁移。我知道一种方法是创建 ES 集群的快照,但我找不到任何合适的文档。

4

2 回答 2

2

迁移的最佳方式是使用快照。您需要将数据快照到 Amazon S3,然后从那里进行恢复。可以在此处找到 S3 快照的文档。或者,您也可以重新索引您的数据,尽管这是一个较长的过程,并且存在一些限制,具体取决于 AWS ES 的版本。

我还建议查看Elastic Cloud,它是 AWS 上的官方托管产品,包括额外的 X-Pack 监控、管理和安全功能。迁移到 Elastic Cloud的迁移指南还介绍了快照和重新索引。

于 2018-02-16T19:26:37.257 回答
0

我暂时为此创建了一个shell脚本 -

Github - https://github.com/vivekyad4v/aws-elasticsearch-domain-migration/blob/master/migrate.sh

#!/bin/bash

#### Make sure you have Docker engine installed on the host ####
###### TODO - Support parameters ######

export AWS_ACCESS_KEY_ID=xxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxx
export AWS_DEFAULT_REGION=ap-south-1
export AWS_DEFAULT_OUTPUT=json
export S3_BUCKET_NAME=my-es-migration-bucket
export DATE=$(date +%d-%b-%H_%M)

old_instance="https://vpc-my-es-ykp2tlrxonk23dblqkseidmllu.ap-southeast-1.es.amazonaws.com"
new_instance="https://vpc-my-es-mg5td7bqwp4zuiddwgx2n474sm.ap-south-1.es.amazonaws.com"
delete=(.kibana)
es_indexes=$(curl -s "${old_instance}/_cat/indices" | awk '{ print $3 }')
es_indexes=${es_indexes//$delete/}
es_indexes=$(echo $es_indexes|tr -d '\n')

echo "index to be copied are - $es_indexes"

for index in $es_indexes; do

# Export ES data to S3 (using s3urls) 
docker run --rm -ti taskrabbit/elasticsearch-dump \
  --s3AccessKeyId "${AWS_ACCESS_KEY_ID}" \
  --s3SecretAccessKey "${AWS_SECRET_ACCESS_KEY}" \
  --input="${old_instance}/${index}" \
  --output "s3://${S3_BUCKET_NAME}/${index}-${DATE}.json"

# Import data from S3 into ES (using s3urls) 
docker run --rm -ti taskrabbit/elasticsearch-dump \
  --s3AccessKeyId "${AWS_ACCESS_KEY_ID}" \
  --s3SecretAccessKey "${AWS_SECRET_ACCESS_KEY}" \
  --input "s3://${S3_BUCKET_NAME}/${index}-${DATE}.json" \
  --output="${new_instance}/${index}"

new_indexes=$(curl -s "${new_instance}/_cat/indices" | awk '{ print $3 }')
echo $new_indexes
curl -s "${new_instance}/_cat/indices"

done
于 2019-10-11T12:05:31.417 回答