النسخ الاحتياطي والاستعادة الدورية في نظام تصميم الخدمة المستقل
إن تصميم الخدمة هو نظام أساسي لنظم موزعة تسهّل من عملية تطوير التطبيقات السحابية الموثوق بها والموزعة والمستندة إلى الخدمات المصغرة وإدارتها. فهو يسمح بتشغيل كلًا من الخدمات المصغرة عديمة الحالة وذات الحالة. يمكن أن تحافظ الخدمات ذات الحالة على أي حالة موثوقة وقابلة للتغيير تتجاوز الطلب والاستجابة أو تتجاوز عملية كاملة. في حال تعطل خدمات ذات الحالة لفترة طويلة أو فقدت المعلومات بسبب خطأ ما، فقد تحتاج استعادتها إلى بعض النسخ الاحتياطي الأخير لحالتها من أجل الاستمرار في تقديم الخدمة بعد نسخها مرة أخرى.
ينسخ نظام تصميم الخدمة الحالة نسخًا متماثلًا عبر عقد متعددة لضمان توفر الخدمة بشكل كبير. حتى في حالة فشل عقدة واحدة في نظام المجموعة، تظل الخدمة متوفرة. غير أنه في بعض الحالات، لا يزال من المستحسن أن تكون بيانات الخدمة موثوقة ضد حالات الفشل الأوسع نطاقًا.
على سبيل المثال، قد تحتاج خدمة ما إلى عمل نسخة احتياطية لبياناتها للحماية من السيناريوهات التالية:
- الفقدان الدائم لنظام مجموعة تصميم الخدمة بالكامل.
- الفقدان الدائم لغالبية النسخ المتماثلة لقسم خدمة ما
- وجود بعض الأخطاء الإدارية حيث تُحذف بيانات الحالة أو تُتلف عن طريق الخطأ. على سبيل المثال، يقوم مسؤول ما يتمتع بامتياز كاف بحذف الخدمة عن طريق الخطأ.
- الأخطاء الموجودة في الخدمة التي تسبب تلف البيانات. على سبيل المثال، قد يحدث هذا عند بدء ترقية تعليمة برمجية لخدمة ما في كتابة بيانات خاطئة إلى مجموعة موثوقة. في مثل هذه الحالة، قد يتعين إعادة كل من التعليمة البرمجية والبيانات إلى الحالة السابقة.
- معالجة البيانات دون اتصال. قد يكون من المناسب معالجة البيانات دون اتصال من أجل المعلومات المهنية التي تحدث بشكل منفصل عن الخدمة التي تنشئ البيانات.
يوفر نظام تصميم الخدمة واجهة برمجة تطبيقات مضمنة للقيام بالنسخ الاحتياطي والاستعادة في الوقت المناسب. قد يستخدم مطورو التطبيقات واجهات برمجة التطبيقات هذه لإجراء نسخ احتياطي لحالة الخدمة بشكل دوري. بالإضافة إلى ذلك، إذا أراد مسؤولو الخدمة تشغيل نسخة احتياطية من خارج الخدمة في وقت محدد (مثل الفترة قبل ترقية التطبيق)، يحتاج المطورون إلى عرض النسخ الاحتياطي (والاستعادة) كواجهة برمجة تطبيقات من الخدمة. للحفاظ على النسخ الاحتياطية قد يكلفك تكلفة إضافية فوق هذا. على سبيل المثال، قد ترغب في أخذ خمس نسخ احتياطية إضافية كل نصف ساعة، متبوعة بنسخ احتياطي كامل. بعد النسخ الاحتياطي الكامل، يمكنك حذف النسخ الاحتياطية الإضافية السابقة. يتطلب هذا النهج رمزًا إضافيًا يؤدي إلى تكلفة إضافية أثناء تطوير التطبيق.
تُعد الحاجة إلى النسخ الاحتياطي لبيانات التطبيق على أساس دوري مطلوبة لإدارة تطبيق موزع والحماية من فقدان البيانات أو فقدان توافر الخدمة لفترة طويلة. يوفر لك نظام تصميم الخدمة ميزة النسخ الاحتياطي والاستعادة، والتي تسمح لك بتكوين نسخة احتياطية دورية من الخدمات الموثوقة ذات الحالة (بما في ذلك خدمات المستخدمين) دون الحاجة إلى كتابة أية تعليمات برمجية إضافية. كما أنه يسهل استعادة النسخ الاحتياطية التي تم أخذها مسبقًا.
يوفر نظام تصميم الخدمة مجموعة من واجهات برمجة التطبيقات لتحقيق الوظائف التالية المتعلقة بميزة النسخ الاحتياطي والاستعادة الدورية:
- جدولة النسخ الاحتياطي الدوري للخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين مع دعم تحميل النسخ الاحتياطي إلى مواقع التخزين (الخارجية). مواقع التخزين المدعومة
- تخزين Azure
- مشاركة الملفات (محليًا)
- تعداد النسخ الاحتياطية
- تشغيل نسخة احتياطية غير مخطط لها من أي قسم
- استعادة قسم ما باستخدام نسخة احتياطية سابقة
- توقيف النسخ الاحتياطية مؤقتًا
- إدارة استبقاء البيانات بالنسخ الاحتياطية (القادمة)
المتطلبات الأساسية
نظام مجموعة تصميم الخدمة مع الإصدار 6.4 أو أي إصدار أحدث. راجع هذه المقالة لمعرفة خطوات تنزيل الحزمة المطلوبة.
شهادة X.509 لتشفير البيانات السرية اللازمة للاتصال بالتخزين لتخزين النسخ الاحتياطية. راجع المقالة لمعرفة كيفية الحصول على شهادة X.509 موقعة ذاتيًا أو إنشائها.
تم إنشاء تطبيق تصميم الخدمة ذات الحالة الموثوق باستخدام Service Fabric SDK بإصدار 3.0 أو أعلى. بالنسبة للتطبيقات التي تستهدف .NET Core 2.0، يجب إنشاء التطبيق باستخدام Service Fabric SDK بإصدار 3.1 أو أحدث.
قم بتثبيت الوحدة النمطية (إصدار أولي) Microsoft.ServiceFabric.PowerShell.Http لإجراء مكالمات التكوين.
Install-Module -Name Microsoft.ServiceFabric.PowerShell.Http -AllowPrerelease
ملاحظة
إذا كان إصدار PowerShellGet أقل من 1.6.0، فسوف تحتاج إلى التحديث لإضافة دعم للإشارة -AllowPrerelease:
Install-Module -Name PowerShellGet -Force
- تأكد من توصيل نظام المجموعة باستخدام الأمر قبل إجراء أي طلب تكوين باستخدام
Connect-SFCluster
الوحدة النمطية Microsoft.ServiceFabric.PowerShell.Http.
Connect-SFCluster -ConnectionEndpoint 'https://mysfcluster.southcentralus.cloudapp.azure.com:19080' -X509Credential -FindType FindByThumbprint -FindValue '1b7ebe2174649c45474a4819dafae956712c31d3' -StoreLocation 'CurrentUser' -StoreName 'My' -ServerCertThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'
تمكين خدمة النسخ الاحتياطي والاستعادة
تحتاج أولًا إلى تمكين خدمة النسخ الاحتياطي والاستعادة في نظام المجموعة الخاص بك. احصل على قالب نظام المجموعة الذي تريد توزيعه. يمكنك استخدام عينة القوالب. قم بتمكين خدمة النسخ الاحتياطي والاستعادة من خلال الخطوات التالية:
تحقق من ضبط الخدمة في ملف تكوين نظام المجموعة، وإذا لم يكن الأمر كذلك، فقم بتحديثها
apiversion
كما هو موضح في القصاصة البرمجية10-2017
التالية:{ "apiVersion": "10-2017", "name": "SampleCluster", "clusterConfigurationVersion": "1.0.0", ... }
الآن قم بتمكين خدمة النسخ الاحتياطي والاستعادة عن طريق إضافة القسم التالي ضمن
addonFeatures
هذا القسم كما هو موضح في القصاصة البرمجية التاليةproperties
:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ ... ] ... }
تكوين شهادة X.509 لتشفير معلومات تسجيل الدخول. هذا مهم لضمان تشفير معلومات تسجيل الدخول المقدمة، إن وجدت، للاتصال بالتخزين قبل الاستمرار. قم بتكوين شهادة التشفير عن طريق إضافة القسم التالي ضمن
BackupRestoreService
هذا القسم كما هو موضح في القصاصة البرمجية التاليةfabricSettings
:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [{ "name": "BackupRestoreService", "parameters": [{ "name": "SecretEncryptionCertThumbprint", "value": "[Thumbprint]" }, { "name": "SecretEncryptionCertX509StoreName", "value": "My" }] } ... }
ملاحظة
يجب استبدال [بصمة الإبهام] ببصمة إبهام شهادة صالحة لاستخدامها في التشفير.
بعد تحديث ملف تكوين نظام المجموعة الخاص بك بالتغييرات السابقة، قم بتطبيقه واترك الترقية والتوزيع يكتملان. بمجرد الانتهاء، تبدأ خدمة النسخ الاحتياطي والاستعادة في نظام المجموعة الخاص بك. معرّف هذه الخدمة هو Uri
fabric:/System/BackupRestoreService
ويمكن أن توجد الخدمة ضمن قسم خدمة النظام في مستكشف نظام تصميم الخدمة.
تمكين النسخ الاحتياطي الدوري لخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين
دعنا ننتقل عبر هذه الخطوات لتمكين النسخ الاحتياطي الدوري لخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين. تفترض هذه الخطوات
- يتم تكوين نظام المجموعة باستخدام خدمة النسخ الاحتياطي والاستعادة.
- يتم توزيع خدمات ذات الحالة الموثوقة على نظام المجموعة. لغرض إرشاد التشغيل السريع هذا، فإن Uri هو المعرف لهذا التطبيق ولخدمة ذات الحالة الموثوقة التي تنتمي إلى هذا التطبيق
fabric:/SampleApp
fabric:/SampleApp/MyStatefulService
. يتم توزيع هذه الخدمة باستخدام قسم واحد، ومعرّف القسم هو23aebc1e-e9ea-4e16-9d5c-e91a614fefa7
.
إنشاء نهج النسخ الاحتياطي
الخطوة الأولى هي إنشاء نهج النسخ الاحتياطي الذي يصف جدولة النسخ الاحتياطي والتخزين المستهدف لبيانات النسخ الاحتياطي واسم النهج والحد الأقصى للنسخ الاحتياطي التزايدي الذي يجب السماح به قبل تشغيل النسخ الاحتياطي الكامل ونهج الاستبقاء لتخزين النسخ الاحتياطي.
لتخزين النسخ الاحتياطي، قم بإنشاء مشاركة الملفات وامنح ReadWrite حق الوصول إلى مشاركة الملفات هذه لكافة الأجهزة التي تدعم عقدة تصميم الخدمة. يفترض هذا المثال أن المشاركة بالاسم BackupStore
موجودة على StorageServer
.
PowerShell using Microsoft.ServiceFabric.PowerShell.Http Module
New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -FileShare -Path '\\StorageServer\BackupStore' -Basic -RetentionDuration '10.00:00:00'
استدعاء Rest باستخدام PowerShell
قم بتنفيذ البرنامج النصي PowerShell التالي لاستدعاء واجهة برمجة تطبيقات REST المطلوبة لإنشاء نهج جديد.
$ScheduleInfo = @{
Interval = 'PT15M'
ScheduleKind = 'FrequencyBased'
}
$StorageInfo = @{
Path = '\\StorageServer\BackupStore'
StorageKind = 'FileShare'
}
$RetentionPolicy = @{
RetentionPolicyType = 'Basic'
RetentionDuration = 'P10D'
}
$BackupPolicy = @{
Name = 'BackupPolicy1'
MaxIncrementalBackups = 20
Schedule = $ScheduleInfo
Storage = $StorageInfo
RetentionPolicy = $RetentionPolicy
}
$body = (ConvertTo-Json $BackupPolicy)
$url = "http://localhost:19080/BackupRestore/BackupPolicies/$/Create?api-version=6.4"
Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json'
استخدام مستكشف نظام تصميم الخدمة
في مستكشف نظام تصميم الخدمة، انتقل إلى علامة التبويب النسخ الاحتياطي وحدد إجراءات > إنشاء نهج النسخ الاحتياطي.
املأ المعلومات. بالنسبة لأنظمة المجموعات المستقلة، يجب تحديد FileShare.
تمكين النسخ الاحتياطي الدوري
بعد تحديد النهج لاكتمال متطلبات حماية البيانات الخاصة بالتطبيق، يجب أن يكون نهج النسخ الاحتياطي مقترن بالتطبيق. وبناءً على المتطلبات، يمكن إقران نهج النسخ الاحتياطي بتطبيق أو خدمة أو قسم.
PowerShell using Microsoft.ServiceFabric.PowerShell.Http Module
Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'
استدعاء Rest باستخدام PowerShell
قم بتنفيذ البرنامج النصي PowerShell التالي لاستدعاء واجهة برمجة تطبيقات REST المطلوبة لإقران نهج النسخ الاحتياطي بالاسم BackupPolicy1
الذي تم إنشاؤه في الخطوة أعلاه مع التطبيق SampleApp
.
$BackupPolicyReference = @{
BackupPolicyName = 'BackupPolicy1'
}
$body = (ConvertTo-Json $BackupPolicyReference)
$url = "http://localhost:19080/Applications/SampleApp/$/EnableBackup?api-version=6.4"
Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json'
استخدام مستكشف نظام تصميم الخدمة
حدد تطبيقًا وانتقل إلى الإجراءات. انقر فوق تمكين وتحديث النسخ الاحتياطي للتطبيق.
وفي النهاية، حدّد النهج المطلوب وحدد تمكين النسخ الاحتياطي.
تحقّق من عمل النسخ الاحتياطية الدورية
بعد تمكين النسخ الاحتياطي للتطبيق، ستبدأ جميع الأقسام التي تختص بالخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين تحت التطبيق في الحصول على نسخة احتياطية بشكل دوري وفقًا لنهج النسخ الاحتياطي المقترنة به.
قائمة النسخ الاحتياطية
يمكن تعداد النسخ الاحتياطية المقترنة بجميع الأقسام التي تختص بالخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين للتطبيق باستخدام واجهة برمجة تطبيقات GetBackups. واعتمادًا على المتطلبات، يمكن تعداد نسخ احتياطية لتطبيق أو خدمة أو قسم.
PowerShell using Microsoft.ServiceFabric.PowerShell.Http Module
Get-SFApplicationBackupList -ApplicationId WordCount
استدعاء Rest باستخدام PowerShell
قم بتنفيذ البرنامج النصي PowerShell التالي لاستدعاء واجهة برمجة تطبيقات HTTP لتعداد النسخ الاحتياطية التي تم إنشاؤها لكافة الأقسام داخل SampleApp
التطبيق.
$url = "http://localhost:19080/Applications/SampleApp/$/GetBackups?api-version=6.4"
$response = Invoke-WebRequest -Uri $url -Method Get
$BackupPoints = (ConvertFrom-Json $response.Content)
$BackupPoints.Items
إخراج عينة لما سبق ذكره:
BackupId : d7e4038e-2c46-47c6-9549-10698766e714
BackupChainId : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName : fabric:/SampleApp
ServiceName : fabric:/SampleApp/MyStatefulService
PartitionInformation : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 19.39.40.zip
BackupType : Full
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord : 2058
CreationTimeUtc : 2018-04-01T19:39:40Z
FailureError :
BackupId : 8c21398a-2141-4133-b4d7-e1a35f0d7aac
BackupChainId : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName : fabric:/SampleApp
ServiceName : fabric:/SampleApp/MyStatefulService
PartitionInformation : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 19.54.38.zip
BackupType : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord : 2237
CreationTimeUtc : 2018-04-01T19:54:38Z
FailureError :
BackupId : fc75bd4c-798c-4c9a-beee-e725321f73b2
BackupChainId : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName : fabric:/SampleApp
ServiceName : fabric:/SampleApp/MyStatefulService
PartitionInformation : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 20.09.44.zip
BackupType : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord : 2437
CreationTimeUtc : 2018-04-01T20:09:44Z
FailureError :
استخدام مستشكف «تصميم الخدمة»
لعرض النسخ الاحتياطية في مستكشف تصميم الخدمة، انتقل إلى قسم وحدّد علامة تبويب النسخ الاحتياطية.
القيود والتحذيرات
- خدمة Fabric PowerShell cmdlets في وضع المعاينة.
- لا يوجد دعم لأنظمة مجموعات تصميم الخدمة على Linux.