Alibaba Cloud Elasticsearch menyediakan beberapa perintah untuk membuat snapshot manual data indeks yang disimpan di klaster Elasticsearch Anda, menyimpan snapshot di repositori bersama, serta memulihkan data dari snapshot tersebut. Topik ini menjelaskan cara membuat snapshot manual dan memulihkan data dari snapshot.
Informasi latar belakang
Pencadangan dan pemulihan data pada klaster Alibaba Cloud Elasticsearch bergantung pada plugin elasticsearch-repository-oss. Plugin ini dipasang secara default pada klaster Alibaba Cloud Elasticsearch dan tidak dapat dilepas. Untuk informasi lebih lanjut tentang plugin ini, lihat elasticsearch-repository-oss.
Prasyarat
Object Storage Service (OSS) telah diaktifkan, dan sebuah bucket OSS dengan kelas penyimpanan Standar dan daftar kontrol akses (ACL) Publik Baca telah dibuat di wilayah tempat klaster Elasticsearch Anda berada. Elasticsearch tidak mendukung bucket OSS dari kelas penyimpanan Arsip. Untuk informasi lebih lanjut, lihat Aktifkan OSS dan Buat bucket.
Jika menggunakan pengguna RAM, pastikan kebijakan
AliyunOSSFullAccesstelah dilampirkan ke pengguna RAM. Untuk informasi lebih lanjut, lihat Berikan izin kepada pengguna RAM.
Peringatan
Snapshot hanya menyimpan data indeks. Informasi berikut dari klaster Elasticsearch tidak disimpan dalam snapshot: data pemantauan (seperti indeks yang namanya dimulai dengan
.monitoringatau.security_audit), metadata, translog, konfigurasi, paket perangkat lunak, plugin bawaan dan kustom, serta log.Semua kode yang disediakan dalam topik ini dapat dijalankan di konsol Kibana klaster Elasticsearch Anda. Untuk informasi lebih lanjut, lihat Masuk ke konsol Kibana.
Buat repositori
Buat repositori bernama my_backup.
Buat repositori untuk klaster di cloud.
PUT _snapshot/my_backup/ { "type": "oss", "settings": { "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com", "access_key_id": "xxxx", "secret_access_key": "xxxxxx", "bucket": "xxxxxx", "compress": true, "chunk_size": "500mb", "base_path": "snapshot/" } }Buat repositori untuk klaster mandiri V8.X. Dalam hal ini, Anda harus menginstal plugin elasticsearch-repository-oss pada klaster. Untuk informasi lebih lanjut, lihat Instal plugin elasticsearch-repository-oss.
CatatanUntuk informasi lebih lanjut tentang plugin ini, lihat elasticsearch-repository-oss.
PUT /_snapshot/my_backup { "type": "oss", "settings": { "oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com", "oss.client.access_key_id": "xxx", "oss.client.secret_access_key": "xxx", "oss.client.bucket": "xxxxxx", "oss.client.base_path":"snapshot/", "oss.client.compress": true } }
Parameter | Deskripsi |
endpoint | Titik akhir internal dari bucket OSS. Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat Wilayah dan titik akhir. |
access_key_id | ID AccessKey akun Anda. Untuk informasi lebih lanjut tentang cara mendapatkan ID AccessKey, lihat Dapatkan pasangan AccessKey. |
secret_access_key | Rahasia AccessKey akun Anda. Untuk informasi lebih lanjut tentang cara mendapatkan Rahasia AccessKey, lihat Dapatkan pasangan AccessKey. |
bucket | Nama bucket OSS. Untuk informasi lebih lanjut tentang cara mendapatkan nama, lihat Buat bucket. |
compress | Menentukan apakah akan mengaktifkan fitur kompresi data untuk snapshot. Nilai valid:
|
chunk_size | Jika Anda ingin mengunggah volume besar data ke bucket OSS, Anda dapat mengunggah data dalam beberapa bagian. Dalam hal ini, Anda dapat menggunakan parameter ini untuk menetapkan ukuran setiap bagian. Jika ukuran suatu bagian mencapai nilai parameter ini, data berlebih didistribusikan ke bagian lain. |
base_path | Lokasi awal repositori. Nilai default adalah direktori root. Anda dapat menentukan direktori tempat snapshot tertentu disimpan. Contoh: snapshot/myindex/. |
Kueri informasi repositori
Kueri informasi tentang semua repositori
GET _snapshotKueri informasi tentang repositori tertentu
GET _snapshot/my_backupBuat snapshot
Buat snapshot untuk semua indeks yang diaktifkan
PUT _snapshot/my_backup/snapshot_1Perintah sebelumnya membuat snapshot snapshot_1 untuk semua indeks yang diaktifkan dan menyimpan snapshot di repositori my_backup. Setelah menjalankan perintah, sistem segera mengembalikan respons dan membuat snapshot. Jika ingin sistem mengembalikan respons setelah snapshot dibuat, tentukan parameter wait_for_completion dalam perintah. Parameter ini memblokir semua panggilan API hingga snapshot dibuat. Jika total ukuran indeks besar, respons dikembalikan setelah periode waktu yang lama.
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=trueRepositori menyimpan beberapa snapshot. Setiap snapshot adalah salinan semua indeks, indeks tertentu, atau satu indeks dalam klaster.
Snapshot pertama adalah salinan lengkap data dalam klaster. Snapshot berikutnya hanya menyimpan data tambahan. Saat membuat snapshot berikutnya, sistem hanya menambahkan atau menghapus data dari snapshot sebelumnya. Oleh karena itu, waktu yang diperlukan untuk membuat snapshot berikutnya lebih singkat daripada snapshot pertama.
Buat snapshot untuk indeks tertentu
Secara default, snapshot berisi semua indeks yang diaktifkan. Jika Kibana digunakan saat membuat snapshot, Anda mungkin ingin mengabaikan semua indeks diagnostik (indeks .kibana) karena ruang disk terbatas. Dalam hal ini, jalankan perintah berikut untuk membuat snapshot hanya untuk indeks tertentu:
PUT _snapshot/my_backup/snapshot_2
{
"indices": "index_1,index_2"
}Perintah sebelumnya membuat snapshot hanya untuk indeks index_1 dan index_2.
Kueri informasi snapshot
Kueri informasi tentang semua snapshot
GET _snapshot/my_backup/_allJika perintah berhasil dijalankan, hasil berikut dikembalikan:
{
"snapshots": [
{
"snapshot": "snapshot_1",
"uuid": "vIdSCkthTeGa0nSj4D****",
"version_id": 5050399,
"version": "5.5.3",
"indices": [
".kibana"
],
"state": "SUCCESS",
"start_time": "2018-06-28T01:22:39.609Z",
"start_time_in_millis": 1530148959609,
"end_time": "2018-06-28T01:22:39.923Z",
"end_time_in_millis": 1530148959923,
"duration_in_millis": 314,
"failures": [],
"shards": {
"total": 1,
"failed": 0,
"successful": 1
}
},
{
"snapshot": "snapshot_3",
"uuid": "XKO_Uwz_Qu6mZrU3Am****",
"version_id": 5050399,
"version": "5.5.3",
"indices": [
".kibana"
],
"state": "SUCCESS",
"start_time": "2018-06-28T01:25:00.764Z",
"start_time_in_millis": 1530149100764,
"end_time": "2018-06-28T01:25:01.482Z",
"end_time_in_millis": 1530149101482,
"duration_in_millis": 718,
"failures": [],
"shards": {
"total": 1,
"failed": 0,
"successful": 1
}
}
]
}Kueri informasi tentang snapshot tertentu berdasarkan nama snapshot
GET _snapshot/my_backup/snapshot_3Jika perintah berhasil dijalankan, hasil berikut dikembalikan:
{
"snapshots": [
{
"snapshot": "snapshot_3",
"uuid": "vIdSCkthTeGa0nSj4D****",
"version_id": 5050399,
"version": "5.5.3",
"indices": [
".kibana"
],
"state": "SUCCESS",
"start_time": "2018-06-28T01:22:39.609Z",
"start_time_in_millis": 1530148959609,
"end_time": "2018-06-28T01:22:39.923Z",
"end_time_in_millis": 1530148959923,
"duration_in_millis": 314,
"failures": [],
"shards": {
"total": 1,
"failed": 0,
"successful": 1
}
}
]
}Panggil API _status untuk kueri informasi tentang snapshot tertentu
GET _snapshot/my_backup/snapshot_3/_statusAPI _status memungkinkan Anda mengkueri informasi rinci tentang snapshot, termasuk status snapshot dan statistik tentang setiap indeks dan shard. Jika perintah berhasil dijalankan, hasil berikut dikembalikan:
{
"snapshots": [
{
"snapshot": "snapshot_3",
"repository": "my_backup",
"state": "IN_PROGRESS",
"shards_stats": {
"initializing": 0,
"started": 1,
"finalizing": 0,
"done": 4,
"failed": 0,
"total": 5
},
"stats": {
"number_of_files": 5,
"processed_files": 5,
"total_size_in_bytes": 1792,
"processed_size_in_bytes": 1792,
"start_time_in_millis": 1409663054859,
"time_in_millis": 64
},
"indices": {
"index_3": {
"shards_stats": {
"initializing": 0,
"started": 0,
"finalizing": 0,
"done": 5,
"failed": 0,
"total": 5
},
"stats": {
"number_of_files": 5,
"processed_files": 5,
"total_size_in_bytes": 1792,
"processed_size_in_bytes": 1792,
"start_time_in_millis": 1409663054859,
"time_in_millis": 64
},
"shards": {
"0": {
"stage": "DONE",
"stats": {
"number_of_files": 1,
"processed_files": 1,
"total_size_in_bytes": 514,
"processed_size_in_bytes": 514,
"start_time_in_millis": 1409663054862,
"time_in_millis": 22
}
}
}
}
}
}
]
}Hapus snapshot
Anda dapat menjalankan perintah berikut untuk menghapus snapshot tertentu. Jika snapshot sedang dibuat, sistem akan menghentikan pembuatan dan menghapus snapshot dari repositori.
DELETE _snapshot/my_backup/snapshot_3Anda hanya dapat menghapus snapshot dengan memanggil API DELETE. Anda tidak dapat menghapus snapshot secara manual karena snapshot mungkin terkait dengan data di snapshot lain. Jika Anda menghapus snapshot secara manual, snapshot lain mungkin rusak. Jika beberapa data dalam snapshot yang ingin Anda hapus terkait dengan snapshot lain, API DELETE menemukan data tersebut dan hanya menghapus data yang tidak terkait dengan snapshot lain.
Pulihkan indeks dari snapshot
Disarankan agar Anda tidak memulihkan indeks yang namanya dimulai dengan tanda titik (
.). Jika Anda memulihkan indeks ini, Anda mungkin gagal mengakses konsol Kibana.Jika indeks dengan nama yang sama dengan indeks yang akan dipulihkan ada di klaster Anda, Anda harus menghapus atau menonaktifkan indeks di klaster terlebih dahulu. Jika tidak, pemulihan akan gagal.
Jika ingin memulihkan data dalam snapshot lintas wilayah, Anda harus memigrasikan data ke bucket OSS di wilayah tujuan dan memulihkan data ke klaster Elasticsearch yang diinginkan di wilayah tujuan. Untuk informasi lebih lanjut, lihat Migrasikan data.
Buat repositori OSS bersama di klaster tujuan
Sebelum memulihkan data dari snapshot ke klaster, buat repositori OSS bersama di klaster dan petakan ke titik akhir OSS yang sama dengan snapshot. Untuk informasi lebih lanjut, lihat Buat repositori.
PUT _snapshot/my_backup_restore/
{
"type": "oss",
"settings": {
"endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
"access_key_id": "xxxx",
"secret_access_key": "xxxxxx",
"bucket": "xxxxxx",
"compress": true,
"chunk_size": "500mb",
"base_path": "snapshot/"
}
}Pulihkan indeks tertentu
Jika hanya ingin memverifikasi atau memproses data dalam indeks dan tidak ingin menimpa data di klaster Elasticsearch, gunakan metode ini untuk memulihkan indeks.
POST /_snapshot/my_backup_restore/snapshot_1/_restore
{
"indices": "index_1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}Parameter | Deskripsi |
indices | Nama indeks yang ingin Anda pulihkan. Dalam contoh ini, sistem hanya memulihkan indeks index_1 dari snapshot yang ditentukan. |
rename_pattern | Format nama indeks. Sistem mencari indeks yang ingin Anda pulihkan berdasarkan nama indeks. Nama tersebut harus sesuai dengan format yang Anda tentukan. |
rename_replacement | Ekspresi reguler yang digunakan untuk mengganti nama indeks. |
Pulihkan semua indeks selain indeks yang namanya dimulai dengan tanda titik (.)
POST _snapshot/my_backup_restore/snapshot_1/_restore
{"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}Pulihkan semua indeks, termasuk indeks yang namanya dimulai dengan tanda titik (.)
POST _snapshot/my_backup_restore/snapshot_1/_restoreSebagai contoh, jika snapshot snapshot_1 berisi lima indeks, perintah sebelumnya memulihkan semua indeks tersebut ke klaster Elasticsearch.
Setelah memanggil API _restore, sistem segera mengembalikan respons dan memulihkan indeks. Jika ingin memblokir semua panggilan API hingga pemulihan selesai, tentukan parameter wait_for_completion dalam perintah.
POST _snapshot/my_backup_restore/snapshot_1/_restore?wait_for_completion=true
Kueri informasi pemulihan
Anda dapat memanggil API _recovery untuk mengkueri informasi tentang tugas pemulihan indeks, seperti status dan kemajuan tugas tersebut.
Kueri informasi tentang pemulihan indeks tertentu
GET restored_index_3/_recoveryKueri informasi tentang pemulihan semua indeks
Informasi tersebut mungkin mencakup informasi tentang shard yang tidak terlibat dalam proses pemulihan.
GET /_recovery/Jika perintah berhasil dijalankan, hasil berikut dikembalikan:
{
"restored_index_3" : {
"shards" : [ {
"id" : 0,
"type" : "snapshot",
"stage" : "index",
"primary" : true,
"start_time" : "2014-02-24T12:15:59.716",
"stop_time" : 0,
"total_time_in_millis" : 175576,
"source" : {
"repository" : "my_backup",
"snapshot" : "snapshot_3",
"index" : "restored_index_3"
},
"target" : {
"id" : "ryqJ5lO5S4-lSFbGnt****",
"hostname" : "my.fqdn",
"ip" : "10.0.**.**",
"name" : "my_es_node"
},
"index" : {
"files" : {
"total" : 73,
"reused" : 0,
"recovered" : 69,
"percent" : "94.5%"
"bytes" : {
"total" : 79063092,
"reused" : 0,
"recovered" : 68891939,
"percent" : "87.1%"
},
"total_time_in_millis" : 0
},
"translog" : {
"recovered" : 0,
"total_time_in_millis" : 0
},
"start" : {
"check_index_time" : 0,
"total_time_in_millis" : 0
}
} ]
}
}Hasil yang dikembalikan mencantumkan semua indeks yang sedang dipulihkan dan semua shard dari indeks tersebut. Hasil tersebut berisi informasi berikut untuk setiap shard: waktu mulai pemulihan, waktu akhir pemulihan, durasi pemulihan, kemajuan pemulihan, dan byte yang ditransmisikan. Tabel berikut menjelaskan beberapa parameter dalam hasil sebelumnya.
Parameter | Deskripsi |
type | Jenis pemulihan. Nilai snapshot menunjukkan bahwa shard sedang dipulihkan dari snapshot. |
source | Snapshot dan repositori tempat shard tersebut berada. |
percent | Kemajuan pemulihan. Nilai 94.5% menunjukkan bahwa 94.5% data di shard telah dipulihkan. |
Hapus indeks yang sedang dipulihkan dari snapshot
Anda dapat menggunakan API DELETE untuk menghapus indeks yang sedang dipulihkan guna membatalkan pemulihan indeks tersebut.
DELETE /restored_index_3Jika indeks restored_index_3 sedang dipulihkan, perintah sebelumnya akan menghentikan pemulihan dan menghapus data yang telah dipulihkan ke klaster Elasticsearch.