Migrasikan data indeks Elasticsearch dari domain Amazon OpenSearch Service ke kluster Alibaba Cloud Elasticsearch menggunakan mekanisme snapshot dan restore.
Ikhtisar migrasi
Migrasi ini mentransfer data indeks melalui snapshot Elasticsearch dengan menggunakan Amazon Simple Storage Service (Amazon S3) dan Object Storage Service (OSS) sebagai penyimpanan perantara. Langkah-langkah utamanya adalah:
Buat repositori snapshot pada domain Amazon OpenSearch Service dan ambil snapshot lengkap dari indeks Anda.
Transfer snapshot dari bucket S3 ke bucket OSS menggunakan ossimport atau Data Online Migration.
Daftarkan repositori snapshot pada kluster Alibaba Cloud Elasticsearch yang mengarah ke bucket OSS tersebut.
Pulihkan snapshot ke kluster Alibaba Cloud Elasticsearch.
Sinkronkan perubahan inkremental dengan mengulangi siklus snapshot-transfer-restore hingga cutover.
Lakukan cutover akhir dengan menghentikan penulisan data, mengambil snapshot terakhir, lalu mengalihkan traffic ke Alibaba Cloud Elasticsearch.

Kompatibilitas versi
Versi kluster Elasticsearch tujuan harus sama atau lebih baru daripada versi kluster sumber. Snapshot hanya kompatibel maju sebanyak satu versi utama:
| Versi snapshot sumber | Target Pemulihan yang Didukung |
|---|---|
| Elasticsearch 1.x | Elasticsearch 2.x |
| Elasticsearch 2.x | Elasticsearch 5.x |
| Elasticsearch 5.x | Elasticsearch 6.x |
Untuk detail lengkap, lihat Snapshot restore version compatibility.
Mekanisme ini tidak terbatas pada AWS. Snapshot Elasticsearch apa pun yang disimpan di Amazon S3, Tencent Cloud Object Storage (COS), atau layanan object storage lainnya dapat ditransfer ke OSS dan dipulihkan. Untuk informasi selengkapnya, lihat Migrate data dan Create manual snapshots and restore data from manual snapshots.
Prasyarat
Sisi AWS
| Prasyarat | Deskripsi |
|---|---|
| Domain Amazon OpenSearch Service | Domain yang sedang berjalan dengan indeks yang akan dimigrasikan. Panduan ini menggunakan Elasticsearch 5.5.2 di wilayah Singapura sebagai contoh. Lihat Create an Amazon OpenSearch Service domain. |
| Bucket S3 | Menyimpan snapshot manual. Catat Amazon Resource Name (ARN)-nya, misalnya arn:aws:s3:::eric-es-index-backups. Biaya standar S3 berlaku. |
| Peran IAM | Memberikan akses Amazon OpenSearch Service ke bucket S3. Hubungan kepercayaan (trust relationship) harus menentukan es.amazonaws.com dalam elemen Service. |
| Kebijakan IAM | Menentukan aksi S3 (s3:ListBucket, s3:GetObject, s3:PutObject, s3:DeleteObject) yang dapat dilakukan oleh peran IAM pada bucket tersebut. |
| Lingkungan Python | Diperlukan untuk menjalankan skrip pendaftaran repositori snapshot. Instal library requests dan requests-aws4auth. |
Sisi Alibaba Cloud
| Prasyarat | Deskripsi |
|---|---|
| Kluster Alibaba Cloud Elasticsearch | Kluster yang sedang berjalan dengan versi yang sama atau lebih baru daripada sumber. Panduan ini menggunakan V5.5.3 di wilayah Tiongkok (Hangzhou). Lihat Create an Alibaba Cloud Elasticsearch cluster. |
| Bucket OSS | Menerima data snapshot. Panduan ini menggunakan bucket dengan kelas penyimpanan Standard dan daftar kontrol akses (ACL) Private di wilayah Tiongkok (Hangzhou). Lihat Create buckets. |
| ID AccessKey dan Rahasia AccessKey | Digunakan untuk mengautentikasi kluster Elasticsearch dengan OSS. |
Amazon OpenSearch Service secara otomatis membuat snapshot harian dari shard utama dan menyimpannya hingga 14 hari tanpa biaya. Namun, snapshot otomatis ini hanya dapat memulihkan data ke domain yang sama. Untuk memigrasikan data ke kluster lain, ambil snapshot manual.
Langkah 1: Siapkan izin IAM AWS
Sebelum mendaftarkan repositori snapshot, konfigurasikan IAM untuk memberikan akses Amazon OpenSearch Service ke bucket S3 Anda.
Buat peran IAM
Buka Konsol IAM dan buat peran.
Amazon OpenSearch Service tidak tercantum dalam dropdown Select role type. Pilih Amazon EC2 sebagai gantinya, lalu perbarui hubungan kepercayaan untuk mengganti
ec2.amazonaws.comdenganes.amazonaws.com.Atur hubungan kepercayaan sebagai berikut:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Buat dan lampirkan kebijakan IAM
Buat kebijakan yang memberikan akses peran IAM ke bucket S3. Ganti
<your-s3-bucket>dengan nama bucket Anda:{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::<your-s3-bucket>" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::<your-s3-bucket>/*" ] } ] }Lampirkan kebijakan tersebut ke peran IAM.
Langkah 2: Daftarkan repositori snapshot pada Amazon OpenSearch Service
Amazon OpenSearch Service memerlukan penandatanganan permintaan AWS untuk pendaftaran repositori snapshot, sehingga Anda tidak dapat menggunakan perintah cURL. Gunakan client Python yang disediakan sebagai gantinya.
Unduh skrip register_snapshot_repository.py.
Perbarui parameter skrip:
Untuk mengaktifkan enkripsi sisi server dengan kunci yang dikelola S3, tambahkan
"server_side_encryption": trueke JSONsettings. Jika bucket S3 berada di wilayahap-southeast-1, ganti"region": "ap-southeast-1"dengan"endpoint": "s3.amazonaws.com".Parameter Deskripsi regionWilayah AWS dari domain Amazon OpenSearch Service hostTitik akhir domain Amazon OpenSearch Service aws_access_key_idID kredensial IAM Anda aws_secret_access_keyKunci kredensial IAM Anda pathJalur repositori snapshot dataNama bucket S3 dan ARN peran IAM Instal library Python yang diperlukan:
pip install requests requests-aws4authJalankan skrip untuk mendaftarkan repositori snapshot:
python register_snapshot_repository.pyVerifikasi pendaftaran. Masuk ke Konsol Kibana domain Amazon OpenSearch Service, klik Dev Tools di panel navigasi kiri, lalu jalankan perintah berikut di tab Console: Tanggapan akan menampilkan daftar repositori snapshot yang telah didaftarkan.
GET _snapshot/<repository>/snapshot_1
Langkah 3: Buat snapshot lengkap
Jalankan perintah berikut di Konsol Dev Tools Kibana atau menggunakan cURL dari command line.
Buat snapshot. Ganti
<repository>dengan nama repositori snapshot Anda dan<index>dengan indeks yang akan dimigrasikan: Contoh dengan indeksmovies:PUT _snapshot/<repository>/snapshot_1 { "indices": "<index>" }PUT _snapshot/eric-snapshot-repository/snapshot_movies_1 { "indices": "movies" }Periksa status snapshot: Tunggu hingga bidang
statemenunjukkanSUCCESS. Catat nilaistart_time_in_millisdanend_time_in_millisuntuk transfer snapshot inkremental nanti.GET _snapshot/<repository>/snapshot_1Verifikasi bahwa objek snapshot muncul di Konsol S3.
Langkah 4: Transfer snapshot dari S3 ke OSS
Transfer objek snapshot dari bucket S3 ke bucket OSS. Untuk petunjuk lengkap, lihat Migrate data from Amazon S3 to Alibaba Cloud OSS.
Setelah transfer selesai, verifikasi bahwa objek snapshot muncul di Konsol OSS.
Langkah 5: Pulihkan snapshot pada Alibaba Cloud Elasticsearch
Masuk ke Konsol Kibana kluster Alibaba Cloud Elasticsearch Anda. Untuk informasi selengkapnya, lihat Log on to the Kibana console.
Klik Dev Tools di panel navigasi kiri dan buka tab Console.
Daftarkan repositori snapshot yang mengarah ke bucket OSS. Nama repositori harus sama dengan yang didaftarkan pada Amazon OpenSearch Service. Ganti nilai placeholder: Contoh:
PUT _snapshot/<repository> { "type": "oss", "settings": { "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com", "access_key_id": "<your-AccessKey-ID>", "secret_access_key": "<your-AccessKey-secret>", "bucket": "<your-oss-bucket>", "base_path": "<snapshot-directory-path>", "compress": true } }PUT _snapshot/eric-snapshot-repository { "type": "oss", "settings": { "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com", "access_key_id": "your AccessKeyID", "secret_access_key": "your AccessKeySecret", "bucket": "eric-oss-aws-es-snapshot-s3", "base_path": "my/snapshot/directory", "compress": true } }Verifikasi bahwa snapshot dapat diakses:
GET _snapshot/<repository>/snapshot_1Pulihkan snapshot:
POST _snapshot/<repository>/snapshot_1/_restore { "indices": "<index>" }Verifikasi bahwa pemulihan berhasil:
GET <index>/_recovery
Langkah 6: Migrasi perubahan inkremental
Setelah memulihkan snapshot garis dasar, ulangi siklus snapshot-transfer-restore untuk menyinkronkan perubahan inkremental. Dalam contoh ini, indeks movies awalnya berisi 3 dokumen. Setelah menambahkan 2 dokumen lagi pada domain sumber, snapshot inkremental menangkap perubahan tersebut.
Buat snapshot inkremental
Pada domain Amazon OpenSearch Service, buat snapshot baru:
PUT _snapshot/<repository>/snapshot_2 { "indices": "<index>" }Periksa status snapshot:
GET _snapshot/<repository>/snapshot_2
Transfer snapshot inkremental
Gunakan ossimport untuk mentransfer hanya objek snapshot baru. Dalam file local_job.cfg, atur isSkipExistFile ke true untuk melewati objek yang sudah ada di bucket OSS berdasarkan size dan LastModifiedTime.
isSkipExistFile | Perilaku |
|---|---|
false (default) | Menimpa objek yang sudah ada |
true | Melewati objek yang cocok berdasarkan ukuran dan waktu modifikasi terakhir |
JikajobTypediatur keaudit, pengaturanisSkipExistFiletidak berpengaruh.
Untuk informasi selengkapnya, lihat ossimport description and configuration.
Pulihkan snapshot inkremental
Tutup indeks sebelum memulihkan:
POST /<index>/_closeVerifikasi bahwa indeks telah ditutup:
GET <index>/_statsPulihkan snapshot inkremental:
POST _snapshot/<repository>/snapshot_2/_restore { "indices": "<index>" }Buka kembali indeks:
POST /<index>/_openVerifikasi jumlah dokumen sesuai dengan sumber. Dalam contoh ini, indeks
moviesharus berisi 5 dokumen (3 asli + 2 tambahan):GET <index>/_count
Tutup indeks target sebelum memulihkan snapshot inkremental. Pemulihan ke indeks yang terbuka akan gagal.
Langkah 7: Lakukan cutover akhir
Hentikan semua layanan yang menulis ke indeks sumber pada domain Amazon OpenSearch Service.
Buat snapshot terakhir pada domain Amazon OpenSearch Service:
PUT _snapshot/<repository>/snapshot_final { "indices": "<index>" }Transfer snapshot terakhir ke OSS dan pulihkan ke kluster Alibaba Cloud Elasticsearch. Ikuti langkah-langkah yang dijelaskan di Langkah 6: Migrasi perubahan inkremental.
Alihkan traffic aplikasi ke titik akhir kluster Alibaba Cloud Elasticsearch.
Verifikasi hasil migrasi
Setelah pemulihan, pastikan data lengkap dan benar:
Periksa jumlah dokumen. Bandingkan jumlah dokumen pada kedua kluster:
GET <index>/_countPeriksa kesehatan indeks. Pastikan status indeks adalah
green:GET _cluster/health/<index>Periksa status pemulihan. Pastikan semua shard telah sepenuhnya dipulihkan:
GET <index>/_recoveryPeriksa sampel data. Kueri beberapa dokumen untuk memastikan integritas data:
GET <index>/_search { "size": 5 }
FAQ
Mengapa pemulihan gagal dengan error tentang objek snapshot di OSS?
Hal ini biasanya terjadi ketika nama objek snapshot di OSS mengandung karakter khusus seperti garis miring (/). Gunakan ossbrowser untuk memindahkan objek snapshot yang terpengaruh ke folder biasa, lalu coba lagi pemulihan tersebut.
Dapatkah saya menggunakan cURL untuk mendaftarkan repositori snapshot pada Amazon OpenSearch Service?
Tidak. Amazon OpenSearch Service memerlukan penandatanganan permintaan AWS, yang tidak didukung oleh cURL. Gunakan client Python dengan library requests dan requests-aws4auth sebagai gantinya.
Apakah saya perlu menutup indeks sebelum setiap pemulihan?
Hanya untuk pemulihan inkremental. Saat memulihkan ke indeks yang sudah ada dan sedang terbuka, tutup terlebih dahulu dengan POST /<index>/_close, lalu buka kembali dengan POST /<index>/_open setelah pemulihan selesai.