النسخ الاحتياطي والاستعادة الدورية في نظام مجموعة «تصميم الخدمة» على Azure

«تصميم الخدمة» هي نظام أساسي لنظم موزّعة يجعل من السهل إجراء عملية تطوير وإدارة التطبيقات السحابية المستندة إلى الخدمات المصغرة والموزّعة والموثوقة. كما يسمح بتشغيل كل من الخدمات المصغرة عديمة الحالة وذات الحالة. يمكن أن تحافظ الخدمات ذات الحالة الموثوقة المتغيرة بعد الطلب والاستجابة أو العملية الكاملة. إذا تعطلت إحدى الخدمات ذات الحالة لفترة طويلة أو فقدت المعلومات بسبب كارثة، فقد تحتاج إلى استعادتها إلى نسخة احتياطية حديثة لحالتها من أجل الاستمرار في تقديم الخدمة بعد أن تعود مرة أخرى.

يقوم «تصميم الخدمة» بتكرار الحالة عبر عقد متعددة لضمان توفر الخدمة بشكل كبير. حتى في حالة فشل عقدة واحدة في نظام المجموعة، تظل الخدمة متوفرة. غير أنه في بعض الحالات، لا يزال من المستصوب أن تكون بيانات الخدمة موثوقة ضد حالات الفشل الأوسع.

على سبيل المثال، قد ترغب الخدمة في عمل نسخة احتياطية من بياناتها للحماية من السيناريوهات التالية:

  • في حالة الفقدان الدائم لنظام مجموعة «تصميم الخدمة» بالكامل.
  • الفقد الدائم لمعظم النسخ المتماثلة لقسم خدمة
  • وجود بعض الأخطاء الإدارية حيث تُحذف بيانات الحالة أو تُتلف عن طريق الخطأ. على سبيل المثال، يقوم مسؤول ما يتمتع بامتياز كاف بحذف الخدمة عن طريق الخطأ.
  • الأخطاء الموجودة في الخدمة التي تسبب تلف البيانات. على سبيل المثال، قد يحدث هذا عند بدء ترقية تعليمة برمجية لخدمة ما في كتابة بيانات خاطئة إلى مجموعة موثوقة. في مثل هذه الحالة، قد يتعين إعادة كل من التعليمة البرمجية والبيانات إلى الحالة السابقة.
  • معالجة البيانات دون اتصال. قد يكون من المناسب معالجة البيانات في وضع دون اتصال للحصول على المعلومات المهنية التي تحدث بشكل منفصل عن الخدمة التي تنشئ البيانات.

يوفر «تصميم الخدمة» واجهة برمجة تطبيقات مدمجة للقيام بالنسخ الاحتياطي والاستعادة في نقطة زمنية. قد يستخدم مطوّرو التطبيقات واجهات برمجة التطبيقات هذه لإجراء نسخ احتياطي لحالة الخدمة بشكل دوري. بالإضافة إلى ذلك، إذا أراد مسؤولو الخدمة تشغيل نسخة احتياطية من خارج الخدمة في وقت محدد، كما هو الحال قبل ترقية التطبيق، يحتاج المطوّرون إلى عرض النسخ الاحتياطي (والاستعادة) كواجهة برمجة تطبيقات من الخدمة. الحفاظ على النسخ الاحتياطية هو تكلفة إضافية تتجاوز ذلك. على سبيل المثال، قد ترغب في أخذ خمس نسخ احتياطية إضافية كل نصف ساعة، متبوعة بنسخ احتياطي كامل. بعد النسخ الاحتياطي الكامل، يمكنك حذف النسخ الاحتياطية الإضافية السابقة. يتطلب هذا النهج تعليمة برمجية إضافية تؤدي إلى تكلفة إضافية أثناء تطوير التطبيق.

تتيح خدمة النسخ الاحتياطي والاستعادة في «تصميم الخدمة» النسخ الاحتياطي السهل والتلقائي للمعلومات المخزنة في الخدمات ذات الحالة. يعد النسخ الاحتياطي لبيانات التطبيق على أساس دوري أمراً أساسياً للحماية من فقدان البيانات وعدم توفر الخدمة. يوفر «تصميم الخدمة» خدمة اختيارية للنسخ الاحتياطي والاستعادة، والتي تسمح لك بتكوين نسخة احتياطية دورية من الخدمات الموثوقة ذات الحالة (بما في ذلك خدمات المستخدمين) دون الحاجة إلى كتابة أي تعليمات برمجية إضافية. كما أنه يسهل استعادة النسخ الاحتياطية التي تم أخذها مسبقًا.

يوفر نظام تصميم الخدمة مجموعة من واجهات برمجة التطبيقات لتحقيق الوظائف التالية المتعلقة بميزة النسخ الاحتياطي والاستعادة الدورية:

  • جدولة النسخ الاحتياطي الدوري للخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين مع دعم تحميل النسخ الاحتياطي إلى مواقع التخزين (الخارجية). مواقع التخزين المدعومة
    • تخزين Azure
    • مشاركة الملفات (محليًا)
  • تعداد النسخ الاحتياطية
  • تشغيل نسخة احتياطية مخصصة من قسم
  • استعادة قسم باستخدام نسخة احتياطية سابقة
  • توقيف النسخ الاحتياطية مؤقتًا
  • إدارة استبقاء البيانات بالنسخ الاحتياطية (القادمة)

المتطلبات الأساسية

  • نظام مجموعة «تصميم الخدمة» مع الإصدار 6.4 من Fabric أو الإصدارات الأحدث. راجع هذه المقالة للحصول على خطوات لإنشاء نظم مجموعة «تصميم الخدمة» باستخدام قالب مورد Azure.
  • شهادة X.509 لتشفير البيانات السرية اللازمة للاتصال بالمخزن لتخزين النسخ الاحتياطية. راجع المقالة لمعرفة كيفية الحصول على شهادة X.509 أو إنشائها.
  • تطبيق «تصميم الخدمة» الموثوق به الذي تم إنشاؤه باستخدام الإصدار 3.0 من Service Fabric SDK أو الإصدارات الأحدث. بالنسبة إلى التطبيقات التي تستهدف .NET Core 2.0، يجب إنشاء التطبيق باستخدام الإصدار 3.1 من SDK «لتصميم الخدمة» أو الإصدارات الأحدث.
  • إنشاء حساب Azure Storage لتخزين النسخ الاحتياطية للتطبيقات.
  • قم بتثبيت الوحدة النمطية 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'

تمكين خدمة النسخ الاحتياطي والاستعادة

استخدام مدخل Microsoft Azure

تمكين خانة اختيار Include backup restore service ضمن + Show optional settings في علامة التبويب Cluster Configuration.

تمكين خدمة استعادة النسخ الاحتياطي باستخدام المدخل

استخدام قالب Azure Resource Manager

عليك أولاً تمكين خدمة النسخ الاحتياطي والاستعادة في نظام مجموعتك. احصل على قالب نظام المجموعة التي تريد توزيعها. يمكنك إما استخدام عينات القوالب أو إنشاء قالب Resource Manager. قم بتمكين خدمة النسخ الاحتياطي والاستعادة من خلال الخطوات التالية:

  1. تحقق من تعيين apiversion على 2018-02-01 لمورد Microsoft.ServiceFabric/clusters، وإذا لم يكن كذلك، فقم بتحديثه كما هو موضح في القصاصة البرمجية التالية:

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. الآن قم بتمكين خدمة النسخ الاحتياطي والاستعادة عن طريق إضافة القسم التالي addonFeatures ضمن القسم properties كما هو موضح في القصاصة البرمجية التالية:

        "properties": {
            ...
            "addonFeatures":  ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. قم بتكوين شهادة X.509 لتشفير بيانات الاعتماد. هذا مهم لضمان تشفير بيانات الاعتماد المقدمة للاتصال بالتخزين قبل الاستمرار. قم بتكوين شهادة التشفير عن طريق إضافة القسم التالي BackupRestoreService ضمن القسم fabricSettings كما هو موضح في القصاصة البرمجية التالية:

    "properties": {
        ...
        "addonFeatures": ["BackupRestoreService"],
        "fabricSettings": [{
            "name": "BackupRestoreService",
            "parameters":  [{
                "name": "SecretEncryptionCertThumbprint",
                "value": "[Thumbprint]"
            },{
                "name": "SecretEncryptionCertX509StoreName",
                "value": "My"
            }]
        }
        ...
    }
    

    ملاحظة

    يجب استبدال [بصمة الإبهام] ببصمة إبهام شهادة صالحة لاستخدامها في التشفير.

  4. بمجرد تحديث قالب نظام مجموعتك بالتغييرات السابقة، قم بتطبيقها واترك التوزيع/الترقية كاملة. بمجرد الانتهاء، تبدأ خدمة النسخ الاحتياطي والاستعادة في نظام مجموعتك. معرّف هذه الخدمة هو Uri fabric:/System/BackupRestoreService ويمكن أن توجد الخدمة ضمن قسم خدمة النظام في مستكشف نظام تصميم الخدمة.

تمكين النسخ الاحتياطي الدوري لخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين

دعنا ننتقل عبر هذه الخطوات لتمكين النسخ الاحتياطي الدوري لخدمات ذات الحالة الموثوقة والمستخدمين الموثوقين. تفترض هذه الخطوات

  • أن يتم إعداد نظام المجموعة باستخدام أمان X.509 مع خدمة النسخ الاحتياطي والاستعادة.
  • يتم توزيع خدمة موثوقة ذات الحالة على نظام المجموعة. لغرض إرشاد التشغيل السريع هذا، فإن Uri هو المعرف لهذا التطبيق ولخدمة ذات الحالة الموثوقة التي تنتمي إلى هذا التطبيقfabric:/SampleAppfabric:/SampleApp/MyStatefulService. يتم توزيع هذه الخدمة مع قسم واحد، ومعرّف القسم هو 974bd92a-b395-4631-8a7f-53bd4ae9cf22.
  • يتم تثبيت شهادة العميل ذات دور المسؤول في اسم المخزن My (Personal) لموقع مخزن شهادات CurrentUser على الجهاز حيث سيتم استدعاء البرامج النصية أدناه. يستخدم هذا المثال 1b7ebe2174649c45474a4819dafae956712c31d3 كبصمة إبهام لهذه الشهادة. لمزيد من المعلومات حول شهادات العميل، راجع التحكم في الوصول استناداً إلى الدور لعملاء «تصميم الخدمة».

إنشاء نهج النسخ الاحتياطي

الخطوة الأولى هي إنشاء نهج النسخ الاحتياطي التي تصف جدول النسخ الاحتياطي، والتخزين المستهدف لبيانات النسخ الاحتياطي، واسم النهج، والحد الأقصى للنسخ الاحتياطي التزايدي الذي يجب السماح به قبل تشغيل نهج النسخ الاحتياطي الكامل ونهج الاستبقاء لتخزين النسخ الاحتياطي.

لتخزين النسخ الاحتياطي، استخدم حساب Azure Storage الذي تم إنشاؤه أعلاه. يتم تكوين الحاوية backup-container لتخزين النسخ الاحتياطية. يتم إنشاء حاوية بهذا الاسم، إذا لم تكن موجودة بالفعل، أثناء تحميل النسخة الاحتياطية. قم بتعبئة ConnectionString باستخدام سلسلة اتصال صالحة لحساب Azure Storage، واستبداله account-name باسم حساب التخزين، وaccount-key بمفتاح حساب التخزين.

PowerShell باستخدام Microsoft.ServiceFabric.Powershell.Http الوحدة النمطية

قم بتنفيذ أوامر cmdlets في PowerShell التالية لإنشاء نهج نسخ احتياطي جديد. استبدل account-name باسم حساب التخزين، وaccount-key بمفتاح حساب التخزين.


New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -AzureBlobStore -ConnectionString 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net' -ContainerName 'backup-container' -Basic -RetentionDuration '10.00:00:00'

استدعاء REST باستخدام PowerShell

قم بتنفيذ البرنامج النصي PowerShell التالي لاستدعاء واجهة برمجة تطبيقات REST المطلوبة لإنشاء نهج جديد. استبدل account-name باسم حساب التخزين، وaccount-key بمفتاح حساب التخزين.

$StorageInfo = @{
    ConnectionString = 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net'
    ContainerName = 'backup-container'
    StorageKind = 'AzureBlobStore'
}

$ScheduleInfo = @{
    Interval = 'PT15M'
    ScheduleKind = 'FrequencyBased'
}

$RetentionPolicy = @{
    RetentionPolicyType = 'Basic'
    RetentionDuration =  'P10D'
}

$BackupPolicy = @{
    Name = 'BackupPolicy1'
    MaxIncrementalBackups = 20
    Schedule = $ScheduleInfo
    Storage = $StorageInfo
    RetentionPolicy = $RetentionPolicy
}

$body = (ConvertTo-Json $BackupPolicy)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/BackupRestore/BackupPolicies/$/Create?api-version=6.4"

Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

استخدام مستشكف «تصميم الخدمة»

  1. في مستكشف نظام تصميم الخدمة، انتقل إلى علامة التبويب النسخ الاحتياطي وحدد إجراءات > إنشاء نهج النسخ الاحتياطي.

    إنشاء نهج النسخ الاحتياطي

  2. املأ المعلومات. راجع خاصية TimeGrain للحصول على تفاصيل حول كيفية تحديد فاصل زمني يستند إلى التردد. بالنسبة إلى نظم مجموعات Azure، يجب تحديد AzureBlobStore.

    إنشاء نهج النسخ الاحتياطي Azure Blob Storage

تمكين النسخ الاحتياطي الدوري

بعد تحديد نهج النسخ الاحتياطي للوفاء بمتطلبات حماية البيانات الخاصة بالتطبيق، يجب أن تكون نهج النسخ الاحتياطي مقترن بالتطبيق. بناءً على المتطلبات، يمكن إقران نهج النسخ الاحتياطي بتطبيق أو خدمة أو قسم.

PowerShell باستخدام Microsoft.ServiceFabric.Powershell.Http الوحدة النمطية


Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'

استدعاء REST باستخدام PowerShell

قم بتنفيذ البرنامج النصي PowerShell التالي لاستدعاء واجهة برمجة تطبيقات REST المطلوبة لإقران نهج النسخ الاحتياطي بالاسم BackupPolicy1 الذي تم إنشاؤه في الخطوة أعلاه مع التطبيق SampleApp.

$BackupPolicyReference = @{
    BackupPolicyName = 'BackupPolicy1'
}

$body = (ConvertTo-Json $BackupPolicyReference)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Applications/SampleApp/$/EnableBackup?api-version=6.4"

Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

استخدام مستشكف «تصميم الخدمة»

تأكد من تمكين الوضع المتقدم لمستكشف «تصميم الخدمة»

  1. انقر فوق الترس في الجزء العلوي الأيسر من SF Explorer Window.

  2. حدد المربع "الوضع المتقدم" وقم بتحديث صفحة SF Explorer.

  3. حدد تطبيقًا وانتقل إلى الإجراءات. انقر فوق تمكين وتحديث النسخ الاحتياطي للتطبيق.

    تمكين النسخ الاحتياطي للتطبيق

  4. وأخيرا، حدد النهج المطلوب وانقر فوق «Enable Backup».

    تحديد النهج

تحقق من عمل النسخ الاحتياطية الدورية

بعد تمكين النسخ الاحتياطي على مستوى التطبيق، ستبدأ جميع الأقسام التي تنتمي إلى الخدمات الموثوقة ذات الحالة والمستخدمين الموثوقين ضمن التطبيق في الحصول على نسخة احتياطية بشكل دوري وفقاً لنهج النسخ الاحتياطي المقترنة بها.

حدث صحة النسخ الاحتياطي للقسم

قائمة النسخ الاحتياطية

يمكن تعداد النسخ الاحتياطية المقترنة بجميع الأقسام التي تنتمي إلى الخدمات الموثوقة ذات الحالة والمستخدمين الموثوقين للتطبيق باستخدام واجهة برمجة تطبيقات GetBackups. يمكن تعداد النسخ الاحتياطية لتطبيق أو خدمة أو قسم.

PowerShell باستخدام Microsoft.ServiceFabric.Powershell.Http الوحدة النمطية


Get-SFApplicationBackupList -ApplicationId WordCount

استدعاء REST باستخدام PowerShell

قم بتنفيذ البرنامج النصي PowerShell التالي لاستدعاء واجهة برمجة تطبيقات HTTP لتعداد النسخ الاحتياطية التي تم إنشاؤها لكافة الأقسام داخل SampleApp التطبيق.

$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Applications/SampleApp/$/GetBackups?api-version=6.4"

$response = Invoke-WebRequest -Uri $url -Method Get -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

$BackupPoints = (ConvertFrom-Json $response.Content)
$BackupPoints.Items

إخراج عينة لما سبق ذكره:

BackupId                : b9577400-1131-4f88-b309-2bb1e943322c
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 20.55.16.zip
BackupType              : Full
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3334
CreationTimeUtc         : 2018-04-06T20:55:16Z
FailureError            :

BackupId                : b0035075-b327-41a5-a58f-3ea94b68faa4
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.10.27.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3552
CreationTimeUtc         : 2018-04-06T21:10:27Z
FailureError            :

BackupId                : 69436834-c810-4163-9386-a7a800f78359
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.25.36.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3764
CreationTimeUtc         : 2018-04-06T21:25:36Z
FailureError            :

استخدام مستشكف «تصميم الخدمة»

لعرض النسخ الاحتياطية في مستكشف تصميم الخدمة، انتقل إلى قسم وحدّد علامة تبويب النسخ الاحتياطية.

تعداد النسخ الاحتياطية

القيود والتحذيرات

  • خدمة Fabric PowerShell cmdlets في وضع المعاينة.
  • لا يوجد دعم لأنظمة مجموعات تصميم الخدمة على Linux.

الخطوات التالية