از بحران تا پایداری: پشتیبانگیری و محافظت از دادهها در زمان صلح
چند هفته پیش ، در هیاهوی جنگ و بحران، با شما از اهمیت پشتیبانگیری (Backup) گفتم . از pg_dump و mysqldump تا mongoexport و rsync؛ از اینکه چگونه در شرایط بحرانی میتوان جلوی از دست رفتن اطلاعات رو گرفت
حالا که فضا کمی آرامتر شده، وقتشه که نگاه دوبارهای به این موضوع داشته باشیم . در پست قبلی بیشتر سعی کردم نشون بدم دستگیره چتر نجات چطور عمل میکنه . در این پست میخوام بگم ایمنی دادهها رو چطور بیشتر حفظ بکنیم . یه چیزی شبیه استفاده از بستهای ایمنی ویژه 🙂
۱. برنامهریزی پشتیبانگیری : خودکار و زمانبندیشده
اگر در روزهای جنگ از طریق اسکریپتهای فوری نسخه پشتیبان گرفتین، حالا وقتشه که فرآیندها رو خودکار (automate) کنیم.
به نظرم استفاده از ابزارهایی مثل cronjob + bash script میتونن کافی باشن. به عنوان مثال:
crontab -e
رو در ترمینال بزنین تا وارد cron editor بشین و بعد:
0 2 * * * pg_dump -U your_username -d mydb > /backups/pg/mydb_$(date +\%Y\%m\%d_\%H\%M\%S).sql 2>> /var/log/pg_backup.log
البته ابزارهای دیگهای هم مثل Barman و Percona هم هستن که من شخصاً استفاده نکردم . ممنون میشم اگه تجربهای در استفاده از این ابزارها دارین با من به اشتراک بذارین.
موقع پشتیبانگیری تنظیم برنامهی زمانی و ایجاد ساختار استاندارد پوشهای و نامگذاری قابل پیگیری رو فراموش نکنین . فایل بکاپ خوب خودش میگه مال کی و کجاست. همچنین اسم گذاری درست بهمون اجازه میده فضای سیستم رو هم مدیریت کنیم که جلوتر بهش اشاره میکنم.
۲. نگهداری نسخههای مختلف (Versioning + Retention Strategy)
داشتن فقط یک نسخه بکاپ، مخصوصاً در صورت وجود خطای انسانی یا حملهی باجافزار، کمکی نمیکنه. حداقل باید سه نسخهی آخر رو نگه دارید و نسخههای قدیمیتر رو حذف کنید.
به عنوان مثال میتونین به کمک find و mtime مشابه دستور زیر برای پیدا کردن و حذف فایلهای قدیمیتر از ۷ روز استفاده کنین:
find /backups/pg/ -type f -name "*.sql" -mtime +7 -delete
اینکه فایلهای بکاپ رو چه مدت نگهداری کنین معمولاً سیاستها کلی، قوانین، محدودیتها و اهمیت دادهها تعیین میکنه.
۳. پشتیبانگیری افزایشی (Incremental Backups): هوشمندی و صرفهجویی
پشتیبانگیری کامل (Full Backup) ضروریه اما اجرای روزانه اون روی حجم زیادی از دادهها میتونه باعث هدر رفت زمان و منابع بشه. برای همین بهتره به راه حلهایی مثل Incremental Backup و Differential Backup رو بیارین. همینجا خیلی کوتاه تفاوت هر دو رو میگم. اما قبلش یادتون باشه برای هر دو روش یک Full Backup انجام میشه.
- روش Incremental: در این روش تغییرات اخیر روی هر نوع بکاپی ذخیره میشه. فرقی نمیکنه Incremental باشه یا Full.
- در روش Differential: تغییرات هر روز با Full Backup مقایسه میشه و در صورتی که تفاوتی وجود داشته باشه ذخیره میشه.
توجه داشته باشین که اگر چه بکاپ گرفتن به روش incremental سریعتره و حجم کمتری اشغال میکنه اما برای restore کردن نیاز به تعداد بیشتری فایل دارین در حالی که در روش Differential تنها به دو فایل (یعنی فایل بکاپ اصلی و آخرین تغییرات) نیاز دارین.
۴. تست بازیابی (Restore Testing)
خیلی دردناک میشه اگه فقط بکاپ گرفته باشین و قبل از اینکه از صحت عملکرد اون مطمئن شده باشین با بحران مواجه بشین. برنامهریزی کنین که به طور متناوب بکاپها رو در یک محیط آزمایشی بازیابی و بررسی کنین تا مطمئن بشین فقط فضا و زمان رو هدر ندادین 🙂
۵. از جغرافیا غافل نشوید
در روزهای بحران، مکان ذخیرهسازی پشتیبان نقش حیاتی داره. اگر فایلهای پشتیبان روی همون سروری باشن که در معرض خطر فیزیکی یا اینترنتیه، عملاً فایدهای ندارن.
در روزهای آرام، برنامهای برای ذخیرهی توزیعشده (geo-distributed backup) تدوین کنید.
پیشنهاد میکنم یک نسخه محلی، یک نسخه در دیتاسنتر دیگر و اگر امکانپذیر است، یک نسخه در object storage نگه داری کنین.
۶.مستندسازی فرآیندها (Documentation)
معمولاً موقع بروز بحرانهای این چنینی سرعت عمل در بازیابی اهمیت زیادی داره. من خودم ازونجایی که حافظه خوبی ندارم، به مستندسازی علاقهمند هستم. اینطوری چیزهایی که یادم نیست هم توی یه سند ذخیره شده و خیلی سریع میتونم بازیابی رو انجام بدم. از طرف دیگه توی این شرایط شما همکارانتون رو بیشتر مشغول انجام یه سری کارها میبینین و بنابراین امکان گرفتن جواب ازشون رو ندارین، ممکنه یه سرویسی که شما زیاد در جریانش نبودین رو لازم باشه که بازیابی کنین. در این صورت فرصتی برای پرسیدن و پاسخ گرفتن نیست. پس از مستندسازی غافل نشین.
سخن پایانی
درسته که ما آدمهای معمولی هستیم و برخلاف سیاستمدارها نه در حرف و نه در عمل به دنبال جنگ نیستیم، اما به عنوان آدمهای برنامهنویس و مهندس داده باید مسئولیت حفاظت و امنیت دادهها و سرویسها رو تأمین بکنیم. بکاپ شاید کوچکترین کاری باشه که در توان ما هست، اما به وقتش خیلی خوب کمکمون میکنه. پس ازش غافل نشین 🙂