img

از SQL Server در کلاد آمازون پشتیبان بگیرید…

/
/
/

مشگل: سازمان من به تازگی سرمایه‌گذاری در زیرساخت به عنوان یک سرویس (IaaS) را آغاز کرده است و یکی از چیزهایی که علاقمند به انجام آن هستم، انتقال پشتیبان‌های SQL Server به ابر است. چگونه می‌توانم این کار را به شکلی مطمئن، امن و مقرون به صرفه انجام دهم؟

راه حل: Simple Storage Solution(S3) یک شیوه موثر و ارزانقیمت برای انتقال نسخه‌های پشتیبان برون سایتی (off-site) با حداقل تلاش ممکن است. شما در سه مرحله ساده می‌توانید ماهانه با کمتر از ۵ سنت بازای هر گیگابایت، از SQL Server خود در زیرساخت اضافی آمازون، پشتیبان بگیرید. قبل از آن که این سه مرحله را توضیح دهیم، امیدواریم که خوانندگان این مقاله تجربه کار با AWS ، PoweShell، SQL Server Maintenance Plans و SQL Server Agent Jobs را داشته باشند و اگر نه بهتر است در مورد آن‌ها مطالعه کنند.

مرحله اول: تنظیم ذخیره‌سازی S3 آمازون
اگر با دستورالعمل‌های ساخت اکانت AWS آمازون آشنا هستید، کمی وقت بگذارید و یک اکانت تنظیم کنید. بعد از تنظیم اکانت Amazon AWS باید یک زوج کاربر (user pair) و یک زوج کلید (key pair) بسازید.این‌ها توسط AWS PowerShell Toolkit برای دسترسی و ساختن آبجکت‌ها در AWS مورد استفاده قرار می‌گیرند. کار را در کنسول AWS آغاز می‌کنیم روی آیکن Identity and Access Management (IAM) کلیک کنید تا به داشبورد IAM بروید.
در منوی سمت چپ “Users” را انتخاب کرده و در صفحه بعد دکمه آبی رنگ “Create new users” را کلیک کنید. نام کاربری را در اولین کادر وارد کرده و مطمئن شوید که این کادر با برچسب «Generate an access key for each user» تیک خورده باشد، سپس «create» را در قسمت پایین سمت چپ کلیک کنید.

شما با هشدار بالا مواجه می‌شوید.
روی دکمه «download credentials» در پایین صفحه کلیک کنید و فایل credentials.csv file را در جای امنی ذخیره نمایید، بعدا وقتی می‌خواهیم PowerShell را برای AWS تنظیم کنیم به آن نیاز خواهیم داشت. پس از آن که فایل اعتبارنامه‌ها را دانلود کردید، می‌توانید برای برگشتن به داشبورد IAM روی “Close”کلیک کنید و خواهید دید که کاربر جدید شما در فهرست قرار دارد. روی کادر نارنجی رنگ در بالا سمت راست کلیک کنید تا به کنترل پنل AWS برگردید.
سپس یک S3 bucket را خواهید دید که در آن می‌توانید فایل‌های پشتیبان خود را آپلود کنید. روی آیکن S3 در کنترل پنل AWS کلیک کنید.
در کنسول S3 روی دکمه “Create Bucket” در بالا سمت چپ کلیک کنید تا یک bucket dialog بسازید.
به bucket خود یک نام منحصر به فرد اختصاص دهید، فضای نام برای bucketهای S3 جهانی است و باید تابع قوانین نامگذاری DNS باشند و همه با حروف کوچک. نگران تنظیم logging هم نباشید، ما در این مورد از آن استفاده نمی‌کنیم، فقط روی “Create”کلیک کنید. در این صورت به کنسول S3 برگردانده می‌شوید.
روی دکمه “Properties” در بالا سمت راست صفحه کلیک کنید. برای این مورد قصد داریم سیاست نگهداری bucket تا ۳۰ روز و سپس حذف آن را تنظیم کنیم. شما می‌توانید زمان نگهداری راتا به هر اندازه که بخواهید بستگی به مقدار پولی که برای ذخیره‌سازی پرداخت می‌کنید، تنظیم نمایید. همچنین می‌توانید انتخاب کنید که فایل‌های قدیمی به Glacier آمازون منتقل شوند که ذخیره‌سازی گرانتری است، اما ایرادش این است که زمان بازگرداندن بسیار کندی دارد و نرخ بازیابی داده‌ها در آن بسیار گرانتر می‌باشد. روی نوار “Lifecycle” کلیک کنید تا گسترده شود و سپس دکمه “add rule” را کلیک نمایید. در این صورت دیالوگ قوانین چرخه حیات ظاهر می‌شود. برای گام اول قانون برای کل bucket را به کار ببرید سپس دکمه «Configure Rule» را کلیک کنید تا به مرحله بعد بروید.

این مرحله جایی است که ما زمان نگهداری و استقرار فایل‌ها بعد از انقضاء را پیکربندی می‌کنیم. «Permanently Delete Only» را از منوی کرکره‌ای “Action on Objects» انتخاب کردیم. گزینه‌های دیگری هم وجود دارند، کاری نکردن، آرشیو کردن فقط در Glacier یا آرشیو کردن در glacier و حذف. وقتی گزینه‌ای را انتخاب کردید می‌توانید تعداد روزهای بعد از ساخته شدن آبجکت را مشخص کنید و این کار صورت می‌گیرد. می‌توانید برای توضیح گرافیکی آنچه تنظیم می‌کنید، لینک «See an example» را کلیک نمایید.
قوانین چرخه حیات با کنترل کردن چرخه حیات آبجکت‌های شما کمک می‌کنند تا هزینه‌های ذخیره‌ساری را مدیریت کنید. قوانین چرخه حیات را برای آرشیو کردن خودکار آبجکت‌های خود در Glacier Storage Class بسازید و بعد از یک مدت معین حذف نمایید.
گزینه‌های مختلف زیر را انتخاب کنید تا ببینید بهترین مورد برای شما کدام است. هیچ قانون اعمال نمی‌شود مگر آن که آن‌ها را در انتهای این ویزارد فعال کنید.
روی دکمه “Review” کلیک کنید تا پیکربندی و نامگذاری قانون چرخه حیات به پایان برسد. یک نام توصیفی به آن اختصاص دهید، سپس روی “Create and Activate Rule” کلیک کنید. شما این شانس را دارید تا تنظیمات را در اینجا انجام دهید و به عقب برگردید و بعداً قانون چرخه حیات را تغییر دهید.

وقتی به کنسول S3 برمی‌گردید می‌توانید قانون جدید در بخش Lifecycle را ببینید.
حالا ما یک S3 bucket برای فایل‌های پشتیبان خود ساخته‌ایم و یک سیاست حفظ و نگهداری را در مورد آن به کار می‌بریم. آماده‌ایم تا ابزارهای مورد نیازمان را برای انتقال نسخه‌های پشتیبان به ابر دانلود و پیکربندی نماییم.

 

مرحله دوم: نصب و پیکربندی ماژول
Amazon PowerShell
آمازون دارای یک API بسیار کامل است که می‌تواند با انواع زبان‌ها و همچنین یک رابط خط فرمان به کار گرفته شود. آن‌ها همچنین یک تولکیت PowerShell ساخته‌اند که بتوانید هر کاری که می‌خواهید از کنسول AWS انجام دهید و در برخی موارد حتی بیشتر. SDK و تولکیت PoweShell با همدیگر عرضه می‌شوند و از سایت

http://aws.amazon.com/powershell

قابل دانلود هستند. روی دکمه «AWS Tools for Windows» کلیک کنید تا installer را دانلود نمایید. اجرای installer به شما اجازه می‌دهد تا انتخاب کنید که کدام مولفه‌ها را می‌خواهید نصب کنید، SDK کامل، فقط PoweShell ، کد نمونه و یک تولکیت مخصوص ویژوال استودیو. از آنجایی که ما از نمونه EC2 استفاده می‌کنیم ، پیش فرض را نصب کردیم.
چه از PoweShell استفاده کنید، چه API های مختلف یا رابط خط فرمان، هر تماس با AWS باید با استفاده از اعتبارنامه‌هایی که در مرحله اول ساخته و دانلود کرده‌ایم، تایید شود. راهکار آمازون در مورد PowerShell حفظ و نگهداری اعتبارنامه‌های شما در یک انباره حافظه محلی و امن و لود کردن آن‌ها در حافظه در صورت نیاز است، بنابراین لازم نیست این اعتبارنامه‌ها در اسکریپت‌های شما hard code شوند. فایل در

%LOCALAPPDATA%\AWSToolKit\RegisteredAccounts.json

مستقر است و کلیدها گیج کننده هستند-چه هش شده و چه رمزگذاری شده.
ما قصد داریم بخش PoweShell طرح Backup Maintenance خود را با استفاده از یک اکانت جداگانه اجرا کنیم که تنها مجوزهای لازم برای اجرای نسخه‌های پشتیبان، کپی کردن فایل‌ها در S3 و حذف فایل‌های قدیمی را دارد. در سرور، یک اکانت جدید با نام “Backup User” بدون هیچ مجوز خاصی بسازید و فقط در دایرکتوری پشتیبان به آن حق دسترسی کامل بدهید.
در Database، یک Windows Loginرا تنظیم کرده و نقش sysadmin را به آن بدهید تا بتوانید Maintenance Plan را ایجاد و اجرا کنید.
حالا ما اعتبارنامه‌‌هایی را که در یک انباره حافظه امن محلی ساخته بودیم را لود می‌کنیم. ابتدا باید وارد سرور با اکانت BackupUser شویم چون در PowerShell اجرا خواهد شد. پس از وارد شدن، فایل credentials.csv را که قبلاً در یک صفحه گسترده یا ویرایشگر متن دانلود کرده بودیم را باز می‌کنیم.
برای این که اعتبارنامه‌های شما در اسکریپت‌ها در دسترس باشند، از Set-AWSCredentials cmdlet استفاده کنید به این صورت:

Set-AWSCredentials -AccessKey =
AKIAJ2G7LB7Z6EXAMPLE -SecretKey = tOcCPhuPufirLNpydXeU4MWeC7V4YhExampleKey -StoreAs default

می‌توانید تایید کنید که اعتبارنامه‌ها برای استفاده با Get-AWSCredentials cmdlet با آرگومان –ListStoredCredentials در دسترش باشند و در این صورت نام تمام پروفایل‌های ثبت شده در مخزن را باز می‌گرداند.

PS C:\> Get-AWSCredentials -ListStored Credentials default

Set-AWSCredentials cmdlet کلیدهای شما را در انباره حافظه محلی برای اکانت سیستم عاملی که تحت آن اجرا می‌شود، می‌نویسد و شما باید این فرمان را برای هر اکانتی که از تولکیت AWS PowerShell استفاده می‌کند، اجرا نمایید.

 

گام سوم:
تنظیم طرح حفظ و نگهداری با استفاده از پشتیبان‌های بومی SQL و یک اسکریپت ساده PoweShell
برای این مورد ما یک طرح حفظ و نگهداری می‌سازیم تا از پایگاه‌های اطلاعاتی و گزارشات تراکنش پشتیبان بگیرد، نسخه‌های پشتیبان را با استفاده از PowerShell به S3 منتقل و کپی‌های پشتیبان محلی را پاک می‌کنیم.
از آنجاییکه اکانت SQL Server Agent مجوزهای لازم را در سرور ندارد تا این کار را انجام دهد، ما یک پراکسی تنظیم می‌کنیم تا SQL Server Agent Jobs را که بخشی از این طرح هستند، اجرا کند. ابتدا، یک اعتبارنامه برای اکانت BackupUser می‌سازیم:

USE [master]
GO
CREATE CREDENTIAL [SQLBackupUser] WITH IDENTITY = N›DOMAINNAME\BackupUser›, SECRET = N›verysecurepasswordhere›
GO
Then create a proxy for the account configured to run CmdExe (subsystem_id 3).
USE [msdb]
GO
EXEC msdb.dbo.sp_add_proxy @proxy_name=N›SQLBackupUser›, @credential_name=N›SQLBackupUser›, @enabled=1
GO
EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name=N›SQLBackupUser›, @subsystem_id=3
GO

 

ما نمی‌توانیم PowerShell را مستقیماً از Maintenance Planاجرا کنیم. باید ابتدا آن را در یک SQL Server Agent Job بپیچید. بعلاوه، به دلیل نوع روشی که عامل محیط را برای این جاب آماده می‌کند، ما باید PowerShell را در یک برنامه دسته‌ای بپیچیم جایی که %USERPROFILE% را تنظیم می‌کنیم، در غیر اینصورت به جای c:\Users\BackupUser روی c:\Users\Default تنظیم می‌شود و PowerShell نمی‌تواند اعتبارنامه‌های AWS را که ما در گام قبل ذخیره کرده بودیم را بیابد. فایل دسته‌ای همچنین یک پارامتر خط فرمان را می‌پذیرد که مستقیم به PowerShell می‌رود تا به آن بگوید که آیا برای پشتیبان‌گیری‌کامل اجرا می‌شود یا گزارش تراکنش.

@echo off
echo ================= BEGIN ================
echo USERNAME ……. %USERNAME%
echo USERPROFILE …. %USERPROFILE%
set USERPROFILE=C:\Users\%USERNAME%
echo NEW USERPROFILE. %USERPROFILE%
echo ================= PS ===================
PowerShell c:\AWS\BackupToS3.ps1 %1
echo ================= END

حالا این جاب را تنظیم می‌کنیم و سپس به PoweShell می‌رویم که کار سنگین انتقال نسخه‌های پشتیبان به S3 را انجام می‌دهد و step.
step فایل دسته‌ای را با کدی از بالا اجرا می‌کند و “*.bak” را برای کپی کامل نسخه پشتیبان به S3 یا “*.trn” را برای کپی نسخه پشتیبان گزارش تراکنش منتقل می‌کند. توجه داشته باشید که job step باید به صورت پراکسی که قبلاً ساخته‌اید اجرا شود، بنابراین حق دسترسی به فایل‌های موجود در دایرکتوری پشتیبان را دارد.
این‌ها همه به جاب پشتیبان کامل مربوط می‌شوند، حالا یک جاب دومی درست شبیه جاب مربوط به گزارش تراکنش ایجاد می‌کنیم به جز این که به جای “*.bak” ،“*.trn” را به عنوان یک پارامتر به فرمان منتقل می‌کند.
طرح حفظ و نگهداری بسیار مهم خواهد بود، و برای پشتیبان‌گیری‌های کامل و پشتیبان‌گیری‌های گزارش تراکنش یک زیرطرح دارد که عمدتاً یکسان است غیر از زمانبندی و فایل‌هایی که پشتیبان می‌گیرند. یک Maintenance Plan به نام “Database Backup” بسازید و اولین زیر طرح را راه‌اندازی کنید.
ابتدا Back Up Database را بسازید. در این مورد ما از تمام پایگاه‌های اطلاعاتی پشتیبان می‌گیریم و نسخه‌های پشتیبان را فشرده می‌کنیم، از آنجایی که ما بابت ذخیره‌سازی پول می‌پردازیم، می‌خواهیم هزینه‌های خود را تا حد امکان کم کنیم. تمام پشتیبان‌ها را در یک دایرکتوری با زیردایرکتوری‌هایی برای هر پایگاه اطلاعاتی قرار می‌دهیم، اینجا همان جاست که PowerShell زمانی که می‌خواهد در S3 کپی کند، دنبال پشتیبان‌ها می‌گردد.
در SQL Server Management Studio اگر بخواهیم یک فرمان خارجی از یک طرح حفظ و نگهداری را اجرا کنیم، نیاز داریم از تسک «execute SQL Server Agent Job» استفاده کنیم و به آن بگوییم که اولین جابی را که تعریف کرده‌ایم ( ورژن “*.bak”) اجرا کند.
در آخر، می‌گذاریم جدیدترین پشتیبان‌هایی که به آن‌ها نیاز داریم سه روز در دیسک محلی باشند و بقیه در S3 خواهند بود تا برای استفاده دوباره آن‌ها را کپی کنیم.
حالا، سه گام را پیوند دهید و یک زمانبندی را بیافزایید تا زیرطرح کامل شود. در این مثال پشتیبان‌گیری کامل به صورت روزانه زمانبندی شده است.
حالا دومین زیرطرح را برای پشتیبان‌های گزارش تراکنش می‌سازیم، توجه داشته باشید که در Execute SQL Server Agent Job Task، ‌”*.trn” را به عنوان آرگومان در فایل دسته‌ای مشخص نمایید. همچنین زمانبندی را به یک زمان متداولتر تنظیم کنید، برای این مورد ما ۴ ساعت را استفاده می‌کنیم.
آماده‌ایم تا PowerShell را بنویسیم تا پشتیبان‌ها را به S3 منتقل کند. اولین گام این است که مطمئن شوید AWS PoweShell Toolkit اضافه شده باشد. بسته به نسخه PoweShell این کار ممکن است خودکار انجام شود، اما در این مورد کد زیر را اضافه کردیم.

#
# SQL Server Backup to S3
#
# Get the AWS Stuff
Import-Module -Name AWSPowerShell
Next, we›ll check that the parameter passed on the command line is okay. We only know two kinds of backups, anything else will cause the script to terminate
# Should be «*.bak» or «*.trn»
if ( $args[0] -eq «*.bak» -or $args[0] -eq «*.trn» ) { $backuptype = $args[0] } else { exit 1 }

 

در اینجا اعتبارنامه‌ها را از انباره حافظه ماندگاری که ساخته‌ایم لود می‌کنیم. این کار زمانی عملی است که اسکریپت توسط همان کاربری که این انباره حافظه را ساخته، اجرا شود و متغییر محیطی %USERPROFILE% هم تنظیم شده باشد. «ProfileName» هم باید با آنچه ذخیره شده هماهنگ باشد، اگر به عقب برگردید خواهید دید که وقتی اعتبارنامه‌ها را ذخیره می‌کردیم، «پیش فرض» را مشخص کردیم.

# Get credentials from the persisted store
Initialize-AWSDefaults -ProfileName default -Region us-east-1

# Go to base backup location
Set-Location s:\mssql\bkup

# Loop thru the subdirectories for each database
Get-ChildItem | Foreach-Object {
if ($_.PSIsContainer) {

# Set the prefix for the S3 key
$keyPrefix = «sql-server-backups/» + $_.name

# Switch to database subdirectory
Set-Location $_.name;

 

و در این نقطه ما به دایرکتوری پشتیبان می‌رویم به هر کدام از زیردایرکتوری‌های پایگاه اطلاعاتی سر می‌زنیم. متغیر $keyPrefix را برای نام فولدری که در S3 ایجاد کرده‌ایم بعلاوه نام زیر فولدر پایگاه‌های اطلاعاتی را تنظیم می‌کنیم. سپس نام جدیدترین فایل پشتیبان مشخص شده را بدست می‌آوریم. این اسکریپت به سرعت بعد از پشتیبان گیری در Maintenance plan اجرا می‌شود بنابراین می‌خواهیم فایلی را که به تازگی ساختیم، پیدا کنیم.

# Get the newest file in the list

$backupName = Get-ChildItem $backuptype | Sort-Object -Property LastAccessTime | Select-Object -Last 1

 

S3 یک سیستم فایلی نیست، S3 آبجکت‌ها را به عنوان یک زوج کلید/مقدار ذخیره می‌کند. برای تمام مقاصد و اهداف، شبیه یک سیستم فایل به نظر می‌رسد، اما مهم است که تفاوت را بدانید. فایل به عنوان یک آبجکت با یک کلید ذخیره می‌شود، سپس با استفاده از همان کلید بازیابی می‌شود ( که بسیار شبیه نام فایل و دایرکتوری است اما نه واقعاً).

# build the S3 Key
$s3Keyname = $keyPrefix + «/» + $backupName.Name

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

# Copy the file out to Amazon S3 storage
Write-S3Object -BucketName mssqltips-demo-bucket-01 -Key $s3keyname -File $backupName -ServerSideEncryption AES256

# Go back the the base backup location
Set-Location s:\mssql\bkup
}
}

 

برای بازیابی فایل‌های خود از S3 از فرمان زیر استفاده کنید

Read-S3Object -BucketName «BUCKETNAME» -Key «S3KEYNAME» -File «LOCALFILENAME»

حال شما یک سیستم کامل برای پشتیبان‌گیری پایگاه‌های اطلاعاتی SQl Server خود در ابر دارید آن هم در سه مرحله!

خلاصه
در مرحله اول ما کار را با ساختن اکانت Amazon Web Services آغاز کردیم. سپس یک کاربر را به اکانت اضافه کردیم و اعتبارنامه‌های را ساختیم تا برای دسترسی به S3 bucket ما استفاده شوند با فولدری برای نسخه‌های پشتیبان و زمان نگهداری ۳۰ روز.
در مرحله دوم تولکیت Maintenance Plan را برای پشتیبان‌گیری از پایگاه‌های اطلاعاتی ساختیم، PowerShell را برای کپی کردن پشتیبان‌ها در S3 اجرا و دایرکتوری پشتیبان محلی خود را پاکسازی نمودیم.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text