Sunday, September 17, 2017

Elasticsearch Snapshot and Restore Data



Halo Sobat Nostra, pada kali in saya akan berbagi tutorial bagaimana cara membuat snapshot (backup) dan restore data pada elasticsearch dengan mudah. Apa itu elasticsearch? elasticsearch adalah adalah salah satu database yang masuk ke dunia NoSQL dengan fokus di search engine database. Kenapa kita memerlukan backup data? Apabila suatu ketika kita memiliki kerusakan data atau kehilangan data kita dapat mengambil kembali dari data yang sudah kita backup sebelumnya. Karena data itu sangat penting sehingga kita harus memiliki backup. Snapshot juga dapat kita lakukan apabila kita ingin migrasi ke elastic versi yang lebih baru. Sebelum kita mulai, elasticsearch harus sudah terinstall dan pastikan sudah listen di port default elasticsearch 9200 dan 9300. Mari kita mulai tutorialnya.

Hal pertama yang kita lakukan adalah menambahkan lokasi repo.path di elasticsearch.yml. Path ini adalah filesystem lokal dimana snapshot akan disimpan.

Kita buat folder di /home/elasticsearch/backup
 mkdir –p /home/elasticsearch/backup  
 chown -R elasticsearch. /etc/elasticsearch/backup  

Tambahkan konfigurasi di elasticsearch.yml
 path.repo: ["/etc/elasticsearch/backup"]  

Restart service elasticsearch
 systemctl restart elasticsearch  


Setup the snapshot repository

Sebelum kita snapshot dan restore, kita harus mendaftarkan path repository di Elasticsearch dengan menggunakan perintah:

 curl -XPUT "http://localhost:9200/_snapshot/es_backup" -H 'Content-Type: application/json' -d'  
 {  
   "type": "fs",  
   "settings": {  
     "location": ["/etc/elasticsearch/backup "  
     , "compress": true  
   }  
 }'  

Untuk mengeceknya dengan command:
curl -XGET 'localhost:9200/_snapshot/es_backup?pretty'

Take snapshots

Sekarang kita sudah bisa melakukan backup atau restore. Kita lanjut cara backup data (index).
cek list index pada elasticsearch
 curl -XGET 'localhost:9200/_cat/indices?v&pretty'  

Create snapshot dengan perintah:
 curl -XPUT 'localhost:9200/_snapshot/es_backup/snapshot_1?wait_for_completion=true&pretty'  

Defaultnya semua index yang open dan start akan disnapshot. Kita dapat membuat snapshot hanya index yang kita ingin backup dengan cara dibawah ini:
 curl -XPUT 'localhost:9200/_snapshot/es_backup/snapshot_1?pretty' -H 'Content-Type: application/json' -d'  
 {  
  "indices": "index_1,index_2",  
  "ignore_unavailable": true,  
  "include_global_state": false  
 }'  

Untuk melihat hasil semua snapshot dengan perintah:
 curl -XGET 'localhost:9200/_snapshot/es_backup/_all?pretty'  

Untuk menghapus snapshot dapat menggunakan:
 curl -XDELETE 'localhost:9200/_snapshot/es_backup/snapshot_1?pretty'  

Restore snapshots

Kita akan merestore data dari snapshot ke elasticsearch. Ada yang harus kita perhatikan sebelum restore data. Pertama index yang kita snapshot sebelumnya akan memiliki nama yang sama dengan  index pada elasticsearch sehingga kita harus close atau delete index tersebut.
 curl -XPOST 'localhost:9200/my_index/_close'  

Kemudian lakukan restore snapshot:
 curl -XPOST 'localhost:9200/_snapshot/es_backup/snapshot_1/_restore?pretty'  

Untuk memonitor progress restore/snapshot dengan perintah:
 curl -XGET 'localhost:9200/_snapshot/es_backup/snapshot_1?pretty'  

Jika kita ingin memindahkan hasil snapshot ke mesin lain, hal yang kita lakukan adalah dengan mencopy folder dimana snapshot kita simpan ke mesin tersebut dan selanjutnya merestore snapshot ke elasticsearch.


Elasticdump

Ada cara lain untuk membackup data elasticsearch yaitu dengan menggunakan elasticdump. Kekurangan elasticdump adalah sulit untuk restore. Jadi apabila kita hanya ingin menyimpan datanya tanpa ingin restore kita dapat menggunakan elasticdump. Hasil dari backup index tersebut akan berupa json dan dapat kita buat langsung ke dalam gzip file.

Pertama install terlebih dahulu service elasticdump:
 npm install elasticdump –g  

Kemudian lakukan backup:
 elasticdump \  
  --input=localhost:9200/my_index \  
  --output=$ \  
  | gzip > /home/elasticsearch/backup/my_index.json.gz  

Sekian dari saya semoga apa yang saya share dapat bermanfaat.
Terima kasih :)        

References:
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html
  • https://www.npmjs.com/package/elasticdump

No comments:

Post a Comment