来自远程群集的AWS ElasticSearch重新索引方案、主机和白名单问题

uemypmqf  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(4)|浏览(240)

背景:

  • 我们在同一个AWS账户和地区的6.8版上有两个AWS ElasticSearch集群。
  • 我们需要将其中一个索引从集群1(源)重新索引到集群2(目标)。

我尝试使用6.8的reindex API,如documentation of ES中所述

POST <https://endpoint of destination Elasticsearch>/_reindex 

    {
      "source": {
        "remote": {
          "host": "https://endpoint-of-source-elasticsearch-cluster-1.es.amazonaws.com"
        },
        "index": "source-index-name"
      },
      "dest": {
        "index": "destination-index-name"
      }
    }

问题:

我正在接近错误

{
    "error": {
        "root_cause": [
            {
                "type": "x_content_parse_exception",
                "reason": "[8:3] [reindex] failed to parse field [source]"
            }
        ],
        "type": "x_content_parse_exception",
        "reason": "[8:3] [reindex] failed to parse field [source]",
        "caused_by": {
            "type": "illegal_argument_exception",
            "reason": "[host] must be of the form [scheme]://[host]:[port](/[pathPrefix])? but was [https://endpoint-of-source-elasticsearch-cluster-1.es.amazonaws.com]",
            "caused_by": {
                "type": "u_r_i_syntax_exception",
                "reason": "The port was not defined in the [host]: https://endpoint-of-source-elasticsearch-cluster-1.es.amazonaws.com"
            }
        }
    },
    "status": 400
}

可能的原因:

1.根据单据,host参数必须包含方案、主机、端口(如https://otherhost:9200)。
1.必须使用reindex.emote.White elist属性显式地将远程主机列入elasticearch.yaml的白名单

由于我使用的是AWS集群,我不确定如何遵循主机、POST或如何将集群列入白名单的方案,因为我不知道如何在AWS集群上进行这些更改。

请求帮助(如果有解决方法可用)。谢谢,

7d7tgy0s

7d7tgy0s1#

遗憾的是,在AWS管理的Elasticearch中,您将不能修改静态配置设置,如reindex.emote.White elist参数,因为要配置reindex.emote.White elist参数,需要修改ElasticSearch.yml文件。这是因为AWS ES托管服务,而目前客户无法访问操作系统/文件系统。

作为替代方案,

1.您可以获取以前域的manual snapshot并将其恢复为新域。与从远程重新建立索引相比,这种方法一次只影响一个域,即快照的来源域或将快照恢复到的域。
1.您还可以将Logstash与Elasticearch inputoutput插件一起使用,从本质上从原始域中的索引读取数据,并将其索引到任何其他/index domain中。

rqqzpn5f

rqqzpn5f2#

从未设法在AWS ES中使用远程重新索引功能,它就是不起作用。

好的旧elasticdump从不失败:

elasticdump 
  --input=https://xxxx.eu-west-1.es.amazonaws.com:443/index-name 
  --output=https://xxxx.eu-west-1.es.amazonaws.com:443/index-name 
  --type=data 
  --limit=500 
  --concurrency=5

要在没有sudo的情况下安装,请执行以下操作:


# Install node without root

curl -s https://webinstall.dev/node | bash

# Install elasticdump

npm install elasticdump -g
hc2pp10m

hc2pp10m3#

AWS Elasticearch v7.9现在支持远程重新索引,您只需发出一个重新索引命令,例如:

POST <local-domain-endpoint>/_reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443"
    },
    "index": "remote_index"
  },
  "dest": {
    "index": "local_index"
  }
}

您必须在远程域终结点的末尾添加443以进行验证检查。

要验证索引是否已复制到本地域,请执行以下操作:

GET <local-domain-endpoint>/local_index/_search

如果远程索引位于与本地域不同的区域,则传入其区域名称,例如在以下示例请求中:

POST <local-domain-endpoint>/_reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443",
      "region": "eu-west-1"
    },
    "index": "test_index"
  },
  "dest": {
    "index": "local_index"
  }
}

注意:1-您必须在源地址中包括端口

2-使用AWS Elasticearch,您不再需要像使用标准Elasticearch那样将源IP/地址列入白名单,AWS Elasticearch假定通过发出此命令,源地址是可信的。

此处提供ElasticSearch AWS文档以供参考:https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/remote-reindex.html

4c8rllxm

4c8rllxm4#

如果要从不是OpenSearch域本身的远程设备重建索引,请记住添加"external": true

POST _reindex?pretty=true&scroll=30m&wait_for_completion=false
{
    "source": {
        "remote": {
            "host": "http://x.x.x.x:9200",
            "external": true
        },
        "index": "from_index",
        "size": 1000
    },
    "dest": {
        "index": "to_index"
    }
}

相关问题