All Products
Search
Document Center

Elasticsearch:Migrasi Elasticsearch yang dikelola sendiri ke Alibaba Cloud Elasticsearch dengan OSS

Last Updated:May 28, 2026

Migrasikan data dari kluster Elasticsearch yang dikelola sendiri ke Alibaba Cloud Elasticsearch dengan membuat repositori snapshot OSS, mencadangkan indeks Anda, dan memulihkan snapshot tersebut ke kluster Alibaba Cloud Anda.

Batasan

  • Bucket OSS harus memenuhi persyaratan berikut:

    • Kelas penyimpanan harus Standard.

    • Bucket harus berada di wilayah yang sama dengan kluster Alibaba Cloud Elasticsearch.

  • Versi kluster: Anda dapat memigrasikan data dari versi minor yang lebih lama ke versi minor yang lebih baru dalam versi utama Elasticsearch yang sama (misalnya, dari 8.15.1 ke 8.17.1). Migrasi data antar versi utama (misalnya, dari 7.7.1 ke 8.17.1) tidak disarankan.

    Catatan

    Alibaba Cloud Elasticsearch sepenuhnya kompatibel dengan Elasticsearch open-source. Namun, tipe data dapat berubah antar versi utama open-source. Misalnya, tipe string pada versi 5.x dipisah menjadi text dan keyword pada versi 6.x. Migrasi data antar versi utama dapat menyebabkan error pengenalan tipe field.

Prasyarat

  • Buat kluster Alibaba Cloud Elasticsearch dan bucket OSS. Kluster Alibaba Cloud Elasticsearch harus memiliki versi utama yang sama dengan kluster yang dikelola sendiri Anda.

  • Pastikan Pengguna RAM memiliki kebijakan izin AliyunOSSFullAccess. Berikan izin kepada Pengguna RAM.

Latar Belakang

Contoh ini menggunakan indeks bernama products_info untuk menunjukkan proses migrasi.

Buat indeks dan masukkan data

Buat indeks:

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" }
    }
  }
}'

Masukkan data:

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." }
'

Jalankan curl -X GET "http://localhost:9200/products_info/_search?pretty". Jika Anda menerima tanggapan berikut, data indeks sudah siap:

Contoh tanggapan

{
  "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."
        }
      }
    ]
  }
}

Ikhtisar solusi

image

Solusi ini paling cocok untuk dataset besar (lebih dari 500 GB) yang memerlukan efisiensi migrasi tinggi. Setelah backup penuh awal, hanya data inkremental yang disinkronkan, sehingga mengurangi waktu migrasi. Solusi ini cocok untuk migrasi ke cloud, peningkatan lintas versi, dan pemulihan bencana.

Migrasi data

Langkah 1: Instal plugin elasticsearch-repository-oss

  1. Sambungkan ke Instance ECS yang menjalankan kluster Elasticsearch yang dikelola sendiri Anda dan unduh plugin elasticsearch-repository-oss. Contoh ini menggunakan versi 8.17.0.

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

    Untuk versi lainnya, lihat Versi lain plugin elasticsearch-repository-oss.

  2. Instal plugin pada kluster Elasticsearch Anda.

    # Instal plugin dengan mengekstraknya ke direktori plugins di setiap node instalasi Elasticsearch Anda.
    sudo unzip -d /usr/local/elasticsearch-8.17.0/plugins/elasticsearch-repository-oss elasticsearch-repository-oss-8.17.0.zip
  3. Jalankan ulang node di kluster Elasticsearch yang dikelola sendiri Anda.

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

Langkah 2: Buat repositori snapshot untuk kluster yang dikelola sendiri

Pada server yang menjalankan kluster Elasticsearch yang dikelola sendiri Anda, buat repositori snapshot:

Catatan

Perintah ini berlaku untuk Elasticsearch 8.x. Untuk versi lainnya, lihat Backup dan pemulihan manual.

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
    }
}
'

Parameter

Deskripsi

<yourBackupName>

Nama kustom untuk repositori.

type

Tipe repositori. Nilai ini harus diatur ke oss.

oss.client.endpoint

Titik akhir bucket OSS. Wilayah dan titik akhir.

Catatan

Jika Instance ECS untuk kluster Elasticsearch yang dikelola sendiri Anda berada di wilayah yang sama dengan bucket OSS, gunakan titik akhir internal. Jika tidak, gunakan titik akhir publik.

oss.client.access_key_id

ID AccessKey akun yang digunakan untuk membuat bucket OSS. Dapatkan pasangan AccessKey.

oss.client.secret_access_key

Rahasia AccessKey akun yang digunakan untuk membuat bucket OSS. Dapatkan pasangan AccessKey.

oss.client.bucket

Nama bucket OSS.

oss.client.base_path

Jalur penyimpanan untuk snapshot.

oss.client.compress

Menentukan apakah kompresi diaktifkan:

  • true: Mengaktifkan kompresi untuk menghemat storage space.

  • false: Menonaktifkan kompresi.

Pembuatan yang berhasil mengembalikan tanggapan {"acknowledged": true}.

Langkah 3: Buat snapshot indeks

Pada kluster Elasticsearch yang dikelola sendiri Anda, buat snapshot bernama snapshot_1 untuk mencadangkan indeks products_info.

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

<yourBackupName> adalah nama repositori yang Anda tentukan saat membuat repositori snapshot.

Pembuatan yang berhasil mengembalikan tanggapan {"accepted": true}.

Jalankan curl -X GET localhost:9200/_snapshot/<yourBackupName>/snapshot_1/_status untuk memeriksa progres. Saat state bernilai SUCCESS, snapshot telah selesai.

Langkah 4: Buat repositori di Alibaba Cloud Elasticsearch

Pada kluster Alibaba Cloud Elasticsearch Anda, login ke Konsol Kibana. Di panel navigasi kiri, klik ikon 展开图标 dan pilih Management > Developer Tools.

Pada Shell, buat repositori dengan pengaturan yang sama seperti repositori pada kluster yang dikelola sendiri Anda:

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/"
    }
}

Nilai <yourBackupName>, <yourBucketName>, dan <base_path> harus sesuai dengan nilai yang digunakan untuk repositori snapshot pada kluster Elasticsearch yang dikelola sendiri Anda.

Langkah 5: Pulihkan snapshot di Alibaba Cloud Elasticsearch

Pada Konsol Kibana, pulihkan snapshot_1 ke kluster. Ini memulihkan semua indeks kecuali indeks monitoring dan audit keamanan, serta melewati indeks yang tidak ada.

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

Permintaan yang berhasil mengembalikan tanggapan {"accepted": true}.

Jalankan GET products_info/_recovery untuk memeriksa progres pemulihan. Saat "stage" bernilai "DONE", indeks telah dipulihkan.

Catatan

Pada Elasticsearch 7.10.x dan 7.17.x, atur cluster.restore.ignore_revision.enable ke true untuk mengizinkan pemulihan snapshot dengan nomor revisi yang lebih tinggi. Nomor revisi adalah bagian ketiga dari versi (misalnya, 1 pada 7.10.1).

Contoh: Setelah mengatur cluster.restore.ignore_revision.enable ke true pada kluster 7.10.0, Anda dapat memulihkan snapshot dari 7.10.2:

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

Langkah 6: Verifikasi hasil

Pada Konsol Kibana, jalankan perintah berikut untuk memverifikasi pemulihan:

  • Lihat indeks yang dipulihkan:

    GET /_cat/indices?v
  • Lihat data dalam indeks yang dipulihkan:

    GET /products_info/_search

    Hasil yang diharapkan:

    {
      "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."
            }
          }
        ]
      }
    }

FAQ

Versi lain plugin elasticsearch-repository-oss

Unduh plugin dari Github. Jika versi tepat Anda tidak tersedia, unduh versi minor serupa dalam versi utama yang sama, perbarui nilai dalam plugin-descriptor.properties, repaket, dan instal.

  • version=Versi plugin yang diperlukan

  • elasticsearch.version=Versi kluster Elasticsearch yang dikelola sendiri Anda

    Catatan

    Versi plugin harus sesuai dengan versi kluster Elasticsearch yang dikelola sendiri Anda.

  • java.version=1.8

    Catatan
    • Versi Elasticsearch yang berbeda memerlukan versi JDK yang berbeda. Periksa persyaratan resmi Elasticsearch dan plugin.

    • Versi open-source Elasticsearch memiliki metode kompilasi yang berbeda. Anda harus mengompilasi plugin elasticsearch-repository-oss agar sesuai dengan versi Anda. Misalnya, kluster 7.6.2 yang dikelola sendiri memerlukan JDK 1.8 atau lebih baru. Plugin yang sesuai adalah elasticsearch-repository-oss-7.6.2.