سیستمهای پشتیبانگیری زیادی وجود دارد، اما اگر سرورهای ارائهشده در مناطق و کلاینتهای مختلف پراکنده هستند و باید به سیستم عامل بسنده کنید، چه باید کرد؟
عصر به خیر، هابر!
نام من ناتالیا است. من رهبر تیم گروه مدیران برنامه در NPO Krista هستم. ما عملیاتی برای گروه پروژه شرکت خود هستیم. ما یک موقعیت نسبتاً منحصر به فرد داریم: ما نرم افزار خود را هم بر روی سرورهای شرکت خود و هم در سرورهای واقع در سایت های مشتریان نصب و نگهداری می کنیم. در این صورت نیازی به پشتیبان گیری از کل سرور نیست. فقط "داده های ضروری" مهم است: DBMS و فهرست های سیستم فایل فردی. البته، کلاینتها مقررات پشتیبان خود را دارند (یا ندارند) و اغلب نوعی فضای ذخیرهسازی خارجی برای ذخیرهسازی نسخههای پشتیبان در آنجا فراهم میکنند. در این صورت، پس از ایجاد یک نسخه پشتیبان، از ارسال به حافظه خارجی اطمینان حاصل می کنیم.
برای مدتی، برای اهداف پشتیبان، به یک اسکریپت bash بسنده میکردیم، اما با افزایش گزینههای پیکربندی، پیچیدگی این اسکریپت به تناسب افزایش یافت و در یک نقطه به این نیاز رسیدیم که «آن را به زمین نابود کنیم، و سپس ...».
راه حل های آماده به دلایل مختلف مناسب نبودند: به دلیل نیاز به غیرمتمرکز کردن پشتیبان گیری، نیاز به ذخیره نسخه پشتیبان به صورت محلی در مشتری، پیچیدگی راه اندازی، جایگزینی واردات، محدودیت های دسترسی.
به نظرمان می رسید که نوشتن چیزی از خودمان راحت تر است. در همان زمان، من می خواستم چیزی به دست بیاورم که برای وضعیت ما برای N سال آینده کافی باشد، اما با امکان گسترش بالقوه دامنه.
شرایط انجام وظیفه به شرح زیر بود:
- نمونه اصلی پشتیبان مستقل است و به صورت محلی اجرا می شود
- ذخیره سازی پشتیبان ها و گزارش ها همیشه در شبکه مشتری است
- یک نمونه از ماژول ها تشکیل شده است - نوعی "سازنده"
- سازگاری با توزیعهای لینوکس فعلی، از جمله توزیعهای قدیمی، مورد نیاز است، پلتفرم متقابل بالقوه مطلوب است
- برای کار با نمونه، دسترسی از طریق ssh کافی است؛ باز کردن پورت های اضافی ضروری نیست
- حداکثر سهولت راه اندازی و عملکرد
- امکان (اما نه ضروری) وجود یک نمونه جداگانه که به شما امکان می دهد وضعیت پشتیبان گیری از سرورهای مختلف را به صورت متمرکز مشاهده کنید.
شما می توانید آنچه را که به آن رسیدیم در اینجا ببینید:
نرم افزار به زبان python3 نوشته شده است. روی Debian، Ubuntu، CentOS، AstraLinux 1.6 کار می کند.
مستندات در دایرکتوری docs مخزن پست شده است.
مفاهیم اساسی که سیستم عمل می کند:
اقدام – عملی که یک عملیات اتمی (پشتیبان گیری از پایگاه داده، پشتیبان گیری دایرکتوری، انتقال از دایرکتوری A به دایرکتوری B و غیره) را اجرا می کند. اقدامات موجود در فهرست core/actions قرار دارند
وظیفه - وظیفه، مجموعه ای از اقدامات که یک "وظیفه پشتیبان" منطقی را توصیف می کند.
برنامه - برنامه، مجموعه ای از کارها با یک نشانه اختیاری از زمان اجرای کار
پیکربندی پشتیبان در یک فایل yaml ذخیره می شود. ساختار پیکربندی کلی:
- تنظیمات عمومی
- بخش اقدامات: شرح اقدامات مورد استفاده در این سرور
- بخش برنامه: شرح همه وظایف (مجموعه اقدامات) و برنامه زمانی برای راه اندازی آنها توسط cron، در صورت نیاز به چنین راه اندازی
آنچه برنامه در حال حاضر می تواند انجام دهد:
- عملیات اصلی برای ما پشتیبانی می شود: پشتیبان گیری PostgreSQL از طریق pg_dump، پشتیبان گیری دایرکتوری سیستم فایل از طریق tar. عملیات با حافظه خارجی؛ rsync بین دایرکتوری ها. چرخش پشتیبان (حذف کپی های قدیمی)
- فراخوانی یک اسکریپت خارجی
- اجرای دستی یک کار جداگانه
/opt/KristaBackup/KristaBackup.py run make_full_dump
- می توانید یک کار یا کل برنامه را به crontab اضافه کنید (یا حذف کنید).
/opt/KristaBackup/KristaBackup.py enable all
- تولید یک فایل ماشه بر اساس نتایج پشتیبان. این عملکرد در ارتباط با Zabbix برای نظارت بر پشتیبان گیری مفید است
- می تواند در پس زمینه در حالت webapi یا وب کار کند
/opt/KristaBackup/KristaBackup.py web start [--api]
تفاوت بین حالت ها: webapi خود رابط وب ندارد، اما برنامه به درخواست های نمونه دیگری پاسخ می دهد. برای حالت وب، باید فلاسک و چندین بسته اضافی را نصب کنید، و این در همه جا قابل قبول نیست، به عنوان مثال در AstraLinux SE تایید شده.
از طریق رابط وب، میتوانید وضعیت و گزارشهای پشتیبانگیری سرورهای متصل را مشاهده کنید: «نمونه وب» دادهها را از «نمونههای پشتیبان» از طریق API درخواست میکند. دسترسی به وب نیاز به مجوز دارد، دسترسی به webapi نیازی به مجوز ندارد.
گزارش های پشتیبان گیری نادرست با رنگ مشخص شده اند: هشدار - زرد، خطا - قرمز.
اگر مدیر نیازی به تقلب در پارامترها نداشته باشد و سیستم عامل سرور همگن باشد، می توانید فایل را کامپایل کرده و بسته آماده را توزیع کنید.
ما این ابزار را عمدتاً از طریق Ansible توزیع می کنیم، ابتدا آن را در برخی از سرورهای کم اهمیت و پس از آزمایش در بقیه سرورها ارائه می کنیم.
در نتیجه، ما یک ابزار کپی فشرده و مستقل دریافت کردیم که می تواند خودکار باشد و حتی توسط مدیران بی تجربه قابل استفاده باشد. برای ما راحت است - شاید برای شما هم مفید باشد؟
منبع: www.habr.com