Todos os produtos
Search
Central de documentação

Elasticsearch:Migrate self-managed Elasticsearch to Alibaba Cloud Elasticsearch with OSS

Última atualização: Aug 22, 2026

Migre dados de um cluster Elasticsearch autogerenciado para o Alibaba Cloud Elasticsearch: crie um repositório de snapshot no OSS, faça backup dos índices e restaure os snapshots no cluster de destino.

Limitações

  • O bucket do OSS deve atender aos seguintes requisitos:

    • A classe de armazenamento deve ser Standard.

    • O bucket deve estar na mesma região do cluster do Alibaba Cloud Elasticsearch.

  • Versão do cluster: É possível migrar dados de uma versão secundária anterior para uma posterior dentro da mesma versão principal do Elasticsearch (por exemplo, de 8.15.1 para 8.17.1). Não recomendamos a migração de dados entre versões principais diferentes (por exemplo, de 7.7.1 para 8.17.1).

    Nota

    O Alibaba Cloud Elasticsearch é totalmente compatível com o Elasticsearch open-source. No entanto, os tipos de dados podem mudar entre versões principais open-source. Por exemplo, o tipo string na versão 5.x foi dividido em text e keyword na versão 6.x. A migração de dados entre versões principais pode causar erros no reconhecimento de tipos de campo.

Pré-requisitos

  • Crie um cluster do Alibaba Cloud Elasticsearch e um bucket do OSS. O cluster do Alibaba Cloud Elasticsearch deve ter a mesma versão principal do seu cluster autogerenciado.

  • Verifique se o usuário RAM possui a política de permissões AliyunOSSFullAccess. Grant permissions to a RAM user.

Contexto

Este exemplo utiliza um índice chamado products_info para demonstrar a migração.

Crie um índice e insira dados

Crie um índice:

curl -X PUT "http://localhost:9200/products_info" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "productName": { "type": "text" },
      "annual_rate": { "type": "text" },
      "describe": { "type": "text" }
    }
  }
}'

Insira dados:

curl -X POST "http://localhost:9200/products_info/_bulk" -H 'Content-Type: application/json' -d'
{ "index": { "_id": "1" } }
{ "productName": "Financial Product A", "annual_rate": "3.2200%", "describe": "180-day fixed-term investment, 20.000 minimum, stable returns, optional message notifications." }
{ "index": { "_id": "2" } }
{ "productName": "Financial Product B", "annual_rate": "3.1100%", "describe": "90-day investment product, 10.000 minimum, daily return notifications." }
{ "index": { "_id": "3" } }
{ "productName": "Financial Product C", "annual_rate": "3.3500%", "describe": "270-day investment product, 40.000 minimum, instant daily return notifications." }
{ "index": { "_id": "4" } }
{ "productName": "Financial Product D", "annual_rate": "3.1200%", "describe": "90-day investment product, 12.000 minimum, daily return notifications." }
{ "index": { "_id": "5" } }
{ "productName": "Financial Product E", "annual_rate": "3.0100%", "describe": "Recommended 30-day investment product, 8.000 minimum, daily return notifications." }
{ "index": { "_id": "6" } }
{ "productName": "Financial Product F", "annual_rate": "2.7500%", "describe": "Popular short-term product, 3-day term, no fees, 500 minimum, get return notifications via SMS." }
'

Execute curl -X GET "http://localhost:9200/products_info/_search?pretty". Se a resposta for semelhante à seguinte, os dados do índice estarão prontos:

Exemplo de resposta

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 6,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "products_info",
        "_type" : "_doc",
        "_id" : "kRjec5gBZDsv98SA0Bmx",
        "_score" : 1.0,
        "_source" : {
          "productName" : "Financial Product A",
          "annual_rate" : "3.2200%",
          "describe" : "180-day fixed-term investment, 20.000 minimum, stable returns, optional message notifications."
        }
      },
      {
        "_index" : "products_info",
        "_type" : "_doc",
        "_id" : "khjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "Financial Product B",
          "annual_rate" : "3.1100%",
          "describe" : "90-day investment product, 10.000 minimum, daily return notifications."
        }
      },
      {
        "_index" : "products_info",
        "_type" : "_doc",
        "_id" : "kxjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "Financial Product C",
          "annual_rate" : "3.3500%",
          "describe" : "270-day investment product, 40.000 minimum, instant daily return notifications."
        }
      },
      {
        "_index" : "products_info",
        "_type" : "_doc",
        "_id" : "lBjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "Financial Product D",
          "annual_rate" : "3.1200%",
          "describe" : "90-day investment product, 12.000 minimum, daily return notifications."
        }
      },
      {
        "_index" : "products_info",
        "_type" : "_doc",
        "_id" : "lRjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "Financial Product E",
          "annual_rate" : "3.0100%",
          "describe" : "Recommended 30-day investment product, 8.000 minimum, daily return notifications."
        }
      },
      {
        "_index" : "products_info",
        "_type" : "_doc",
        "_id" : "lhjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "Financial Product F",
          "annual_rate" : "2.7500%",
          "describe" : "Popular short-term product, 3-day term, no fees, 500 minimum, get return notifications via SMS."
        }
      }
    ]
  }
}

Visão geral da solução

image

Esta solução é ideal para grandes conjuntos de dados (acima de 500 GB). Após o backup completo inicial, apenas as alterações incrementais são sincronizadas, o que reduz o tempo total de migração. Funciona bem para migração para a nuvem, atualizações entre versões e recuperação de desastres.

Migração de dados

Etapa 1: Instale o plugin elasticsearch-repository-oss

  1. Conecte-se à instância ECS que hospeda seu cluster Elasticsearch autogerenciado e baixe o plugin elasticsearch-repository-oss. Este exemplo usa a versão 8.17.0.

    wget https://github.com/aliyun/elasticsearch-repository-oss/releases/download/v8.17.0/elasticsearch-repository-oss-8.17.0.zip

    Para outras versões, consulte Other versions of the elasticsearch-repository-oss plugin.

  2. Instale o plug-in no seu cluster Elasticsearch.

    # Install the plug-in by unzipping it to the plugins directory of each node in your Elasticsearch installation.
    sudo unzip -d /usr/local/elasticsearch-8.17.0/plugins/elasticsearch-repository-oss elasticsearch-repository-oss-8.17.0.zip
  3. Inicie os nós do seu cluster Elasticsearch autogerenciado.

    cd /usr/local/elasticsearch-8.17.0
    ./bin/elasticsearch -d

Etapa 2: Crie um repositório de snapshot para o cluster autogerenciado

No servidor que hospeda seu cluster Elasticsearch autogerenciado, execute o comando a seguir para criar um repositório de snapshot:

Nota

Este comando aplica-se ao Elasticsearch 8.x. Para outras versões, consulte Manual backup and restoration.

curl -X PUT "http://localhost:9200/_snapshot/<yourBackupName>" -H 'Content-Type: application/json' -d'
{
    "type": "oss",
    "settings": {
        "oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com",
        "oss.client.access_key_id": "xxxx",
        "oss.client.secret_access_key": "xxxx",
        "oss.client.bucket": "<yourBucketName>",
        "oss.client.base_path":"snapshot/",
        "oss.client.compress": true
    }
}
'

Parâmetro

Descrição

<yourBackupName>

Nome personalizado para o repositório.

type

Tipo do repositório. Defina como oss.

oss.client.endpoint

Endpoint do bucket do OSS. Regions and endpoints.

Nota

Se a instância ECS do seu cluster Elasticsearch autogerenciado estiver na mesma região do bucket do OSS, use o endpoint interno. Caso contrário, utilize o endpoint público.

oss.client.access_key_id

AccessKey ID da conta usada para criar o bucket do OSS. Obtain an AccessKey pair.

oss.client.secret_access_key

AccessKey Secret da conta usada para criar o bucket do OSS. Obtain an AccessKey pair.

oss.client.bucket

Nome do bucket do OSS.

oss.client.base_path

Caminho de armazenamento para os snapshots.

oss.client.compress

Define se a compactação deve ser ativada:

  • true: Ativa a compactação para economizar espaço de armazenamento.

  • false: Desativa a compactação.

Uma criação bem-sucedida retorna a resposta {"acknowledged": true}.

Etapa 3: Crie um snapshot do índice

No seu cluster Elasticsearch autogerenciado, crie um snapshot chamado snapshot_1 para fazer backup do índice products_info.

curl -X PUT localhost:9200/_snapshot/<yourBackupName>/snapshot_1?pretty -H "Content-Type: application/json" -d'
{
"indices": "products_info"
}'

<yourBackupName> é o nome do repositório especificado durante a criação do repositório de snapshot.

Uma criação bem-sucedida retorna a resposta {"accepted": true}.

Execute curl -X GET localhost:9200/_snapshot/<yourBackupName>/snapshot_1/_status para verificar o progresso. Quando state for SUCCESS, o snapshot estará concluído.

Etapa 4: Crie um repositório no Alibaba Cloud Elasticsearch

No seu cluster do Alibaba Cloud Elasticsearch, log on to the Kibana console. No painel de navegação à esquerda, clique em 展开图标 e escolha Management > Developer Tools.

No Shell, crie um repositório com as mesmas configurações usadas no seu cluster autogerenciado:

PUT _snapshot/<yourBackupName>/
{
    "type": "oss",
    "settings": {
        "endpoint": "oss-cn-shanghai.aliyuncs.com",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxxxx",
        "bucket": "<yourBucketName>",
        "compress": true,
        "chunk_size": "500mb",
        "base_path": "snapshot/"
    }
}

Os valores de <yourBackupName>, <yourBucketName> e <base_path> devem corresponder aos usados no repositório de snapshot do seu cluster Elasticsearch autogerenciado.

Etapa 5: Restaure o snapshot no Alibaba Cloud Elasticsearch

No console do Kibana, restaure o snapshot_1 no cluster. Isso restaura todos os índices, exceto os de monitoramento e auditoria de segurança, e ignora índices indisponíveis.

POST _snapshot/<yourBackupName>/snapshot_1/_restore
{"indices":"*,-.monitoring*,-.security_audit*","ignore_unavailable":"true"}

Uma solicitação bem-sucedida retorna a resposta {"accepted": true}.

Execute GET products_info/_recovery para verificar o progresso da restauração. Quando stage for DONE, o índice terá sido restaurado.

Nota

Nas versões 7,10.x e 7,17.x do Elasticsearch, defina cluster.restore.ignore_revision.enable como true para permitir a restauração de snapshots com um número de revisão superior. O número de revisão é a terceira parte da versão (por exemplo, 1 em 7.10.1).

Exemplo: Após definir cluster.restore.ignore_revision.enable como true em um cluster 7.10.0, você pode restaurar snapshots da versão 7.10.2:

PUT _cluster/settings
{
  "persistent": {
    "cluster.restore.ignore_revision.enable": true
  }
}

Etapa 6: Verifique os resultados

No console do Kibana, execute os comandos a seguir para confirmar que os dados foram restaurados:

  • Visualize os índices restaurados:

    GET /_cat/indices?v
  • Consulte os dados no índice restaurado:

    GET /products_info/_search

    Resultado esperado:

    {
      "took": 3,
      "timed_out": false,
      "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": {
          "value": 6,
          "relation": "eq"
        },
        "max_score": 1,
        "hits": [
          {
            "_index": "products_info",
            "_id": "1",
            "_score": 1,
            "_source": {
              "productName": "Financial Product A",
              "annual_rate": "3.2200%",
              "describe": "180-day fixed-term investment, 20.000 minimum, stable returns, optional message notifications."
            }
          },
          {
            "_index": "products_info",
            "_id": "2",
            "_score": 1,
            "_source": {
              "productName": "Financial Product B",
              "annual_rate": "3.1100%",
              "describe": "90-day investment product, 10.000 minimum, daily return notifications."
            }
          },
          {
            "_index": "products_info",
            "_id": "3",
            "_score": 1,
            "_source": {
              "productName": "Financial Product C",
              "annual_rate": "3.3500%",
              "describe": "270-day investment product, 40.000 minimum, instant daily return notifications."
            }
          },
          {
            "_index": "products_info",
            "_id": "4",
            "_score": 1,
            "_source": {
              "productName": "Financial Product D",
              "annual_rate": "3.1200%",
              "describe": "90-day investment product, 12.000 minimum, daily return notifications."
            }
          },
          {
            "_index": "products_info",
            "_id": "5",
            "_score": 1,
            "_source": {
              "productName": "Financial Product E",
              "annual_rate": "3.0100%",
              "describe": "Recommended 30-day investment product, 8.000 minimum, daily return notifications."
            }
          },
          {
            "_index": "products_info",
            "_id": "6",
            "_score": 1,
            "_source": {
              "productName": "Financial Product F",
              "annual_rate": "2.7500%",
              "describe": "Popular short-term product, 3-day term, no fees, 500 minimum, get return notifications via SMS."
            }
          }
        ]
      }
    }

Perguntas frequentes

Outras versões do plugin elasticsearch-repository-oss

Baixe o plugin no GitHub. Se a sua versão exata não estiver disponível, baixe uma versão secundária similar dentro da mesma versão principal, atualize os valores em plugin-descriptor.properties, reempacote o plugin e instale-o.

  • version=Versão necessária do plug-in

  • elasticsearch.version=Versão do seu cluster Elasticsearch autogerenciado

    Nota

    A versão do plug-in deve corresponder à versão do seu cluster Elasticsearch autogerenciado.

  • java.version=1.8

    Nota
    • Diferentes versões do Elasticsearch exigem diferentes versões do JDK. Para mais informações, consulte os requisitos oficiais do Elasticsearch e do plugin.

    • Versões distintas do Elasticsearch open-source possuem métodos de compilação diferentes. Compile o plugin elasticsearch-repository-oss para corresponder à sua versão. Por exemplo, um cluster autogerenciado 7.6.2 requer JDK 1.8 ou superior. O plugin correspondente é o elasticsearch-repository-oss-7.6.2.