استراتژی مناسب برای بک‌آپ سرور مجازی چگونه است؟

وقتی داده‌ها و کارهای‌تان را در محیط دیجیتال ذخیره‌سازی می‌کنید، یک ملاحظه مهم این است که چگونه می‌توان مطمئن شد که اگر مشکلی روی دهد، اطلاعات‌مان حفظ خواهد شد. این به عوامل زیادی بستگی دارد. مثلاً اینکه از چه اپلیکیشن‌هایی استفاده می‌کنید، داشتن غلبه سریع بر خرابی چقدر برای‌تان مهم است و اینکه انتظار چه نوع مشکلاتی را دارید.
در این راهنما چند رویکرد مختلف برای تهیه بک‌آپ و افزونگی داده‌ها (data redundancy) را مطرح خواهیم کرد. از آنجایی که موارد استفاده مختلف، راه‌حل‌های مختلفی را طلب می‌کند قادر نخواهیم بود پاسخی یکسره بدهیم ولی خواهید آموخت که در شرایط متفاوت چه چیزی مهم است و برای عملیاتی که مد نظر دارید، چه چیزهایی را باید به‌کار بگیرید.
در اولین قسمت این راهنما راه‌حل‌های بک‌آپی که می‌توانید استفاده کنید را مطرح خواهیم کرد. مزایای نسبی هرکدام را خواهیم گفت تا بتوانید طرحی را انتخاب کنید که متناسب شرایط شماست. در قسمت دوم گزینه‌های افزونگی را مطرح می‌کنیم.

تفاوت بین افزونگی و بک‌آپ در سرور مجازی چیست؟

تعریف این دو اغلب با هم هم‌پوشانی دارد و در بسیاری موارد باهم قاطی شده است. افزونگی و پشتیبان‌گیری دو مفهوم مجزا و متفاوت هستند که با هم نسبت دارند. بعضی راه‌حل‌ها هر دو را ارائه می‌کنند.

افزونگی

افزونگی در اطلاعات یعنی اگر مشکلی برای سیستم پیش بیاید، یک فیل‌اور آنی وجود خواهد داشت. فیل‌اور یعنی اگر مجموعه‌ای از داده‌ها از دسترس خارج شود، یک کپی کامل دیگر وارد کار می‌شود تا جای‌اش را بگیرد. درنتیجه مدت ازکارافتادگی (down time) نامحسوس می‌شود و اپلیکیشن یا وب‌سایت می‌تواند به درخواست‌ها رسیدگی کند انگار که هیچ اتفاقی نیافتاده است. درعین‌حال مدیر سیستم (administrator) فرصت دارد تا مشکل را حل کند و سیستم را به حالت کاملاً عملیاتی برگرداند.
هرچند افزونگی ممکن است همچون یک راه‌حل فوق‌العاده پشتیبان‌گیری به نظر برسد ولی خطرناک است. در برابر خطاهایی که کل سیستم را تحت تاثیر قرار می‌دهند، افزونگی نمی‌تواند حفاظتی فراهم آورد. مثلاً اگر یک رید آینه‌ای (mirrored RAID) داشته باشید مثل RAID1، داده‌های شما در آن افزونه شده است و اگر یک درایو دچار مشکل شود درایو دیگر هنوز قابل دسترس است. اما اگر خود ماشین دچار نقص شود ممکن است همه داده‌های‌تان از دست برود.
یک عیب دیگر این طرح این است که هر عملیاتی، بر روی همه‌ی کپی‌های آن داده انجام می‌شود که ممکن است عملیات‌های مخرب و اتفاقی را هم شامل شود. یک راه‌حل حقیقی بک‌آپ باید این امکان را بدهد که داده را از زمانی که می‌دانیم وضع داده در آن زمان خوب بوده است، بازیابی کنیم.
بک‌آپ
همان‌طور که گفتیم، نگهداری بک‌آپ‌های کارا برای داده‌های مهم ضروری است. این قضیه بسته به موقعیت می‌تواند شامل پشتیبان‌گیری از اپلیکیشن یا داده‌های کاربر یا کل وب‌سایت یا کل ماشین باشد. اندیشه‌ای که در پس بک‌آپ است این است که اگر اتفاقی برای سیستم یا ماشین بیافتد یا داده از دست برود (data loss) بتوانید بازیابی کنید، ازنو دیپلوی کنید یا به‌طرق دیگر به داده‌های‌تان دسترسی پیدا کنید. درست است که بازیابی یک بک‌آپ زمان می‌برد و باعث مدتی ازکارافتادگی می‌شود ولی بهتر است کار را از جایی ادامه دهید که مثلاً دیروز بود و نه از اول کار. هرچیزی را که نمی‌خواهید از دست بدهید باید به‌تمام‌معنا از آن بک‌آپ بگیرید.
وقتی صحبت از متدهای پشتیبان‌گیری باشد چندین سطح متفاوت وجود دارد. در مواقع نیاز می‌توان این انواع مختلف بک‌آپ را برای مقابله با انواع مشکلات طبقه‌بندی کرد. مثلاً شاید قبل از انجام تغییرات در یک فایلِ پیکربندی از آن بک‌آپ بگیرید تا اگر مشکلی پیش آمد راحت بتوانید به تنظیمات قبلی برگردید. برای تغییرات کوچکی که کاملاً بر آن نظارت دارید این نوع بک‌آپ ایده‌آل است. ولی درصورت بروز نقص در هارد یا اتفاقات پیچیده‌تر، این روش شکست سختی می‌خورد. همچنین باید بک‌آپ‌هایی خودکار و منظم به محلی راه‌دور (remote location) داشته باشید.
بک‌آپ‌ها به‌خودی‌خود باعث فیل‌اور اتوماتیک نمی‌شوند یعنی خطاهایی که روی می‌دهد باعث ازبین‌رفتن هیچ داده‌ای نخواهد شد (البته اگر پشتیبان‌های شما صددرصد به‌روز باشند) و برای شما آپ‌تایم (زمانی که سیستم به‌درستی کار می‌کند) به‌ارمغان می‌آورد و این یکی از دلایلی است که افزونگی و بک‌آپ باهم مورد استفاده قرار می‌گیرند نه به‌جای هم.

بک‌آپ فایلی

یکی از آشناترین فرم‌های پشتیبان‌گیری، بک‌آپ در سطح فایل (file-level) است. این نوع از بک‌آپ از ابزارهای معمول کپی‌برداری در سطح فایل‌سیستم استفاده می‌کند تا فایل‌ها را به دستگاه یا محل دیگری منتقل کند.
چگونه از فرمان cp استفاده کنیم؟
ساده‌ترین نوع پشتیبان‌گیری از یک ماشین لینوکس (مثلاً وی‌پی‌اس) با فرمان cp است که خیلی ساده فایل‌ها را از یک محل لوکال به یک محل لوکال دیگر کپی می‌کند. می‌توانید یک درایو پرتابل را در یک کامپیوتر لوکال نصب (mount) کرده و فایل‌ها را آنجا کپی کنید:

mount /dev/sdc /mnt/my-backup
cp -a /etc/* /mnt/my-backup
umount /dev/sdc

نمونه بالا یک دیسک پرتابل را نصب می‌کند و سپس دایرکتوری /etc را در دیسک کپی می‌کند. بعد دیسک را جدا (unmount) کرده و می‌توان آن را در جای دیگری نگه‌داری کرد.
چگونه از آرسینک استفاده کنیم؟
فرمان rsync جایگزینی بهتر برای فرمان cp است و بک‌آپ‌های لوکال را با انعطاف بیشتری انجام می‌دهد. عملیات بالا را می‌توانیم در آرسینک با این فرمان‌ها اجرا کنیم:


mount /dev/sdc /mnt/my-backup
rsync -azvP /etc/* /mnt/my-backup
umount /dev/sdc

به‌زودی درخواهید یافت که بک‌آپ در فایل‌سیستم لوکال، مساله‌دار و مایه‌زحمت است. باید درایو بک‌آپ را به‌صورت فیزیکی وصل و سپس جدا کنید و باید آن را به مکان دیگری منتقل کنید تا درصورت آتش‌سوزی یا سرقت، داده‌ها محفوظ بمانند. بسیاری از مزایای این روش در بک‌آپ‌های شبکه‌ای هم هست.
آرسینک، بک‌آپ‌های ریموت را به همان راحتی بک‌آپ‌های لوکال انجام می‌دهد. برای این کار کافی‌ست تا از سینتکس‌هایی جایگزین استفاده کنید و بر روی هر میزبانی (host) که دسترسی SSH به آن داشته باشید عمل می‌کند. فقط باید آرسینک در هر دو سو نصب شده باشد:

rsync -azvP /etc/* username@remote_host:/backup/

این فرمان از دایرکتوری /etc در ماشین لوکال بک‌آپ می‌گیرد و به دایرکتوری که در /backup و در remote_host هست می‌برد. این کار به‌شرطی قابل انجام است که اجازه ضبط اطلاعات (write) در این دایرکتوری را داشته باشید و البته فضای خالی کافی هم در دسترس باشد.
برای اطلاعات بیشتر، این مقاله را بخوانید:
«چگونه از آرسینک برای سینک دایرکتوری‌های لوکال و ریموت در یک سرور شخصی مجازی (VPS) استفاده کنیم؟»
چگونه از سایر ابزارهای بک‌آپ استفاده کنیم؟
اگرچه آرسینک و سی‌پی ساده هستند و به‌راحتی می‌توان از آنها استفاده کرد، ولی همیشه یک راه‌حل ایده‌آل نیستند. برای خودکار کردن بک‌آپ‌ها مجبور خواهید بود این دو را اسکریپت کنید و هر کد لازم برای چرخش (rotation) و سایر نکات ظریف را بنویسید.
خوشبختانه بعضی برنامه‌های کاربردی هستند که بک‌آپ‌های پیچیده‌تر را به‌راحتی انجام می‌دهند.

باکولا در سرور مجازی (Bacula)

باکولا یک راه‌حل پیچیده ولی منعطف است که از مدل کلاینت سرور بهره می‌برد تا از هاست‌ها بک‌آپ بگیرد. باکولا خواسته‌های کلاینت‌ها، محل‌های بک‌آپ و خواسته‌های مدیران (مولفه‌ای که در عمل بک‌آپ را اجرا می‌کند) را جدا کرده است و همچنین هر تکلیف بک‌آپ را در واحدی به‌نام job پیکربندی می‌کند.

این شرایط، راه را برای یک پیکربندی منعطف و گرانولار باز می‌کند. می‌توانید چندین کلاینت را در یک دستگاه ذخیره‌سازی بک‌آپ بگیرید یا برعکس، یک کلاینت را در چندین دستگاه ذخیره‌سازی بک‌آپ بگیرید و طرح بک‌آپ را با اضافه‌کردن گره‌ها (node) و تنظیم و میزان‌کردن جزئیات‌شان، سریع و آسان تغییر دهید. در محیط شبکه خوب عمل می‌کند و قابل گسترش و پیمانه‌ای (modular) است. این ویژگی‌ها باعث شده برای پشتیبان‌گیری از سایت یا اپلیکیشنی که در چندین دستگاه گسترده است، بسیار عالی باشد.

 

بک‌آپ‌پی‌سی (BackupPC)

یک راه‌حل پرطرفدار دیگر بک‌آپ‌پی‌سی است و می‌توان از آن برای پشتیبان‌گیری از لینوکس و ویندوز استفاده کرد. روی VPS یا ماشینی نصب می‌شود که به‌عنوان بک‌آپ سرور عمل خواهد کرد. با استفاده از روش‌های معمول انتقال فایل، این سرور داده‌ها را از کلاینت pull می‌کند یعنی بیرون می‌کشد.

این روش مزایای نصب همه‌ی بسته‌های مربوطه روی یک ماشین متمرکز را دارد. تنها تنظیم لازم در سمت کلاینت این است که به سرور بک‌آپ اجازه دسترسی SSH داده شود. کار راحتی‌ست و همچنان‌که دیپلوی می‌کنید، با DigitalOcean می‌توانید کلیدهای SSH سرور بک‌آپ‌پی‌سی را داخل کلاینت تعبیه کنید. با این کار می‌توانید به‌آسانی بک‌آپ‌ها را از سرور بک‌آپ تنظیم کنید و بدون نیاز به نرم‌افزاری اضافی، محیط پروداکشن‌تان را خیلی راحت گسترش دهید.

 

دیوپلیسیتی

دیوپلیسیتی یک جایگزین فوق‌العاده دیگر برای ابزارهای مرسوم است. تفاوت اصلی این نرم‌افزار با بقیه در این است که از رمزگذاری گنوپرایوسی گارد (GNU Privacy Guard یا همان GPG) برای انتقال و ذخیره‌سازی داده‌ها استفاده می‌کند که مزایای قابل توجهی دارد.

مزیت آشکار استفاده از رمزگذاری GPG برای پشتیبان‌گیری از فایل‌ها این است که داده‌ها به‌شکل نوشته ساده (plain text) ذخیره نمی‌شوند و فقط دارنده‌ی کلید جی‌پی‌جی می‌تواند داده‌ها را رمزگشایی کند. این کار باعث افزایش معیارهای امنیتی می‌شود که وقتی داده‌ها را در چند محل مختلف ذخیره می‌کنیم، مورد نیاز است.

دیوپلیسیتی مزیت دیگری هم دارد که شاید برای کسانی که مرتباً از رمزگذاری GPG استفاده نمی‌کنند به‌راحتی قابل تشخیص نباشد و آن این است که هر انتقالی (transaction) کاملاً دقیق و با تصدیق (verification) انجام می‌گیرد. جی‌پی‌جی یک روش سخت‌گیرانه بررسی هش (hash) را اجرا می‌کند تا مطمئن شود که حین انتقال، هیچ داده‌ای از دست نرفته است. یعنی وقتی نیاز شد که داده را از بک‌آپ بازیابی کنید، احتمالش خیلی کم است که به مشکلات خرابی فایل بربخورید.

 

بک‌آپ بلوکی

یک جایگزین مهم برای بک‌آپ در سطح فایل، بک‌آپ بلوکی است که البته کمتر رایج است. این نوع بک‌آپ همچنین به‌نام ایمیجینگ (imaging) هم شناخته می‌شود چون می‌تواند برای تکثیر و دونسخه‌ای (duplicate) کردن کل دستگاه و ذخیره‌سازی آن به‌کار رود. با بک‌آپ بلوکی می‌توانید در سطحی عمیق‌تر از بک‌آپ فایلی کپی کنید. بک‌آپ فایلی مثلاً فایل یک و فایل دو و فایل سه را در محل بک‌آپ کپی می‌کند ولی سیستم بک‌آپ بلوکی کل بلوک را کپی می‌کند که آن فایل‌ها هم درونش هستند. یک راه دیگر توضیح این مفهوم این است که بگوییم بک‌آپ بلوکی، اطلاعات را بیت به بیت کپی می‌کند و به مفهوم مجرد فایلی که آن بیت‌ها معرفش هستند کاری ندارد و البته فایل‌ها سالم و دست‌نخورده منتقل خواهند شد.

یک مزیت بک‌آپ در سطح بلوک، سریع‌تر بودن آن است. بک‌آپ فایلی معمولاً برای هر فایل جدا یک انتقال جدید راه می‌اندازد ولی چون بک‌آپ بلوکی برای هر بلوک یک انتقال آغاز می‌کند و چون معمولاً بلوک‌ها بزرگ‌تر هستند، تعداد انتقال کمتری برای اتمام کپی‌ها نیاز است و درنتیجه سریع‌تر کار پایان می‌یابد.

 

استفاده از dd برای اجرای بک‌آپ بلوکی

 

شاید ساده‌ترین راه اجرای بک‌آپ بلوکی استفاده از فرمان dd (تشریح داده) باشد. نرم‌افزار منعطفی‌ست و می‌تواند اطلاعات را بیت به بیت در محل دیگری کپی کند. یعنی بدون هیچ مقدمه‌ای می‌توانیم از یک پارتیشن یا دیسک، به یک فایل یا یک دستگاه خام (raw device) بک‌آپ بگیریم.

اساسی‌ترین راه برای پشتیبان‌گیری از یک پارتیشن یا دیسک، استفاده از فرمان dd همچون این است:

dd if=/path/of/original/device of=/path/to/place/backup

در فرمان بالا if= دستگاه یا محل ورودی را مشخص می‌کند و of= محل یا فایل خروجی را نشان می‌دهد. به‌یاد داشتن این تمایز خیلی مهم است چون اگر اینها را برعکس بنویسید، کل دیسک پاک می‌شود.

اگر خواستید از پارتیشنی بک‌آپ بگیرید که documents شما در آن است و در /dev/sda3 هست، اینگونه می‌توانید یک فایل ایمیج بسازید:

dd if=/dev/sda3 of=~/documents.img

برای ماشین‌های لینوکس، چندین راه‌حل دیگر بک‌آپ بلوکی هست ولی در اینجا به انها اشاره‌ای نمی‌کنیم.

 

بک‌آپ ورژنینگ در سرور مجازی

یکی از اصلی‌ترین دلایل پشتیبان‌گیری از داده‌ها این است که اگر تغییر یا حذف ناخواسته‌ای روی داد، بتوانیم نسخه‌ی قبلی یک فایل یا گروهی از فایل‌ها را بازیابی کنیم. تمام مکانیسم‌های بک‌آپ که تابه‌حال ذکر کردیم تا اندازه‌ای این امکان را فراهم می‌کنند ولی می‌توانید چند ابزار دیگر اضافه کنید تا سیستمی قوی به‌دست آید.

روش دستی انجام این کار این است که قبل از ویرایش، یک فایل بک‌آپ بسازیم. مثل این:

cp file1 file1.bak

nano file1

برای خودکار کردن این فرایند می‌توانید هر زمانی که با ادیتورتان یک فایل را تغییر می‌دهید، فایل‌هایی مخفی با برچسب زمانی (timestamp) بسازید. برای مثال می‌توانید اینرا در فایل ~/.bashrc  قرار دهید:

nano() { cp $1 .${1}.date +%y-%m-%d_%H.%M.%S.bak; /usr/bin/nano $1; }

حال هروقت فرمان nano را فرابخوانید، خودش به‌صورت خودکار بک‌آپ می‌کند.

با این کار، سطحی از بک‌‌آپ را در اختیار دارید ولی خیلی شکننده و ضعیف است و اگر فایل‌ها را زیاد ویرایش می‌کنید، سریعاً دیسک را پر خواهد کرد. راه‌حل فوق‌العاده‌ای نیست و درآخر، زحمت‌اش بیشتر از حالتی خواهد شد که بخواهید به‌صورت دستی، فایل‌هایی که می‌خواهید تغییر دهید را کپی کنید.

برای حل مشکلاتی که در ذات این طرح هست، یک جایگزین این است که از git استفاده کنید که یک سیستم خاص کنترل نسخه (version control) است و با آن می‌توانید تقریباً هر فایلی را کنترل کنید.

می‌توانید سریعاً یک مخزن گیت (git repository) در هوم دایرکتوری بسازید. فقط کافی‌ست تایپ کنید:

cd ~

git init

شاید نیاز به برخی تغییرات و تنظیمات باشد تا فایل‌های به‌خصوصی را مستثنی کنید اما درکل، ورژنینگ‌های پیچیده را سریعاً ایجاد می‌کند. سپس می‌توانید محتوای دایرکتوری‌ها را اضافه کنید و فایل‌ها را کامیت کنید:

git add .

git commit -m “Initializing home directory”

با استفاده از سیستم توکار (built-in) گیت می‌توانید به‌راحتی به یک مکان ریموت، پوش (push) کنید:

git remote add backup_server git://backup_server/path/to/project

git push backup_server master

البته این سیستم به‌خودی خود یک سیستم فوق‌العاده بک‌آپ نیست ولی در ترکیب با سایر سیستم‌های بک‌آپ، با این نوع از کنترل نسخه، کنترلی بسیار دقیق برروی تغییرات خواهید داشت.

 

بک‌آپ در سطح وی‌پی‌اس

 

مهم است که بک‌آپ‌ها توسط خودتان مدیریت شود ولی دیجیتال اوشن (DigitalOcean) هم مکانیسم‌های خوبی در اختیارتان می‌گذارد که مکمل بک‌آپ‌های‌تان هستند.

یک گزینه بک‌آپ دارد که به‌صورت منظم، برای دراپلت‌هایی (droplet) که این قابلیت در آنها فعال شده، بک‌آپ‌هایی اتوماتیک را اجرا می‌کند. هنگام ساختن دراپلت، گزینه‌ی Enable Backups را تیک بزنید تا این سرویس فعال شود:

 

do_backup

با این کار از کل ایمیجِ وی‌پی‌اس (VPS image) بک‌آپ گرفته می‌شود. یعنی می‌توانید از بک‌آپ به‌راحتی ازنو دیپلوی کنید یا از آن به‌عنوان پایه‌ای برای دراپلت‌های جدید استفاده کنید.

اگر بخواهید یکبار برای همیشه از سیستم ایمیج بگیرید، می‌توانید از گزینه اسنپ‌شات استفاده کنید که همچون بک‌آپ عمل می کنند. برای اینکار به دراپلت‌تان بروید و از منوی بالایی گزینه Snapshots را انتخاب کنید:

 

 

بک آپ در سرور مجازی