Email: info@developit.ir

تهیه snapshot و بازگردانی آن در elasticsearch

ایمیل یکی از دوستانم مبنی بر اینکه هنگام کار با elasticsearch تمام اطلاعاتشُ از دست داده و دنبال راه حلی برای بازگردانی اونها بود یادم انداخت که بارها این اتفاق برای خودمم افتاده.

حقیقتش روشی برای بازگردانی اطلاعات در صورتی که snapshot یا backup از elasticsearch نداریم بلد نیستم. من تا الان همیشه از elasticsearch در محیط های تست استفاده کردم و از دست دادن اطلاعاتم(که زیاد هم اتفاق افتاده چون همه چیز رو دستکاری میکنم) اهمیت چندانی نداشته.

ماژول snapshot در elasticsearch این امکان رو به شما میده تا از یک شاخص تکی یا تمام مجموعه کلاستر با استفاده از مخزن(repository)که میتونه فایل سیستم اشتراکی، S3 یا HDFS باشه snapshot تهیه کنید. snapshot گزینه ی خوبی برای تهیه نسخه پشتیبان هست چون خیلی سریع تهیه یا بازگردانی میشه اما به عنوان آرشیو یا ابزاری برای انتقال اطلاعات مناسب نیست چون:

- snapshot تهیه شده در نسخه 2 رو میتونید در نسخه 5 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو میتونید در نسخه 2 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو نمیتونید در نسخه 5 بازگردانی کنید.

برای اینکه snapshot نسخه 1 رو به 5 ببرید میتونید اول اون رو به 2 بازگردانی و بعدش با استفاده از reindex-from-remote اون رو برای 5 بازسازی کنید که خب با توجه به اینکه ممکنه دیتای شما زیاد باشه کار زمانبری هست.

به عنوان نمونه تصمیم دارم یک snapshot از نوع فایل سیستم تهیه کنم.

ابتدا باید snapshot repository رو در elasticsearch رجیستر کرد:

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
        "location": "/mount/backups"
  }
}

من از postman برای کار با api استفاده میکنم.

location محل ذخیره سازی snapshot رو مشخص میکنه. با ارسال درخواست بالا پیام خطایی مبنی بر اینکه مسیر mount/backups در تنظیمات elasticsearch و در path.repo ست نشده صادر میشه. elasticsearch.yml رو باز و مسیر رو اضافه کنید چیزی شبیه به این:

path.repo: ["/mount/backups", "/mount/longterm_backups"]

بعد از اینکه repository مون رو register کردیم از اطلاعاتمون snapshot میگیریم:

PUT /_snapshot/my_backup/snapshot_1

گفتم که میتونید از یک شاخص تکی یا حتی چند شاخص snapshot بگیرید. کافیه اونها رو داخل درخواستتون مشخص کنید:

PUT /_snapshot/my_backup/snapshot_1
{
  "indices": "index_1,index_2"
}

اگر snapshot با موفقیت تهیه شد میتونید با ارسال درخواست زیر جزئیات اون رو ببینید:

GET /_snapshot/my_backup/snapshot_1

یا جزئیات تمام snapshot هایی رو که اسمشون با _snapshot شروع میشه:

GET /_snapshot/my_backup/snapshot_*

یا همه ی snapshot ها:

GET /_snapshot/my_backup/_all

برای بازگردانی(restore) هم کافیه چنین درخواستی رو ارسال کنید:

POST /_snapshot/my_backup/snapshot_1/_restore

خیلی خیلی واضح هست و فکر نمیکنم نیازی باشه توضیح بدم که از مخزن my_backup یک snapshot به نام snapshot_1 بازگردانی میشه :/

حذف snapshot هم خیلی آسونه:

DELETE /_snapshot/my_backup/snapshot_1

خلاصه گفتم و برای اطلاعات بیشتر اینجا رو بخونید.

این مطلب آخرین بار در تاریخ 22:43 - 1396/01/01 ویرایش شده است.

ارسال نظر
عضویت در خبرنامه
جهت اطلاع از آخرین فعالیت های من لطفا در خبرنامه عضو شوید