زيادة أو تقليل نظام المجموعة

تحذير

اقرأ هذا القسم قبل تغيير الحجم

يتطلب توسيع نطاق موارد الحوسبة للحصول على حمل عمل التطبيق تخطيطاً متعمداً، وسيستغرق دائماً أكثر من ساعة لإكماله لبيئة التشغيل، ويتطلب منك فهم حمل العمل وسياق عملك؛ في الواقع، إذا لم تكن قد قمت بهذا النشاط من قبل، فمن المستحسن أن تبدأ بقراءة وفهم اعتبارات تخطيط سعة نظام مجموعة Service Fabric، قبل متابعة بقية هذا المستند. تهدف هذه التوصية إلى تجنب مشكلات LiveSite غير المقصودة، ويوصى أيضاً باختبار العمليات التي تقرر تنفيذها بنجاح مقابل بيئة غير معنية بالتشغيل. يمكنك في أي وقت الإبلاغ عن مشكلات الإنتاج أو طلب الدعم المدفوع لـ Azure. بالنسبة للمهندسين المخصصين لتنفيذ هذه العمليات التي تمتلك سياقاً مناسباً، ستصف هذه المقالة عمليات التحجيم، ولكن يجب عليك تحديد وفهم العمليات المناسبة لحالة الاستخدام الخاصة بك؛ مثل الموارد المطلوب قياسها (وحدة المعالجة المركزية، التخزين، الذاكرة)، والاتجاه المطلوب قياسه (رأسياً أو أفقيا)، والعمليات التي يجب تنفيذها (توزيع قالب الموارد، المدخل، PowerShell/CLI).

ملاحظة

نوصي باستخدام وحدة Azure Az PowerShell للتفاعل مع Azure. راجع تثبيت Azure PowerShell للبدء. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

تغيير حجم نظام مجموعة Service Fabric بالزيادة أو النقصان باستخدام قواعد القياس التلقائي أو يدوياً

مجموعات مقاييس الأجهزة الظاهرية عبارة عن مورد حوسبة Azure يمكنك استخدامه لتوزيع وإدارة مجموعة من الأجهزة الظاهرية كمجموعة. يتم إعداد كل نوع عقدة يتم تعريفه في نظام مجموعة Service Fabric كمجموعة مقياس جهاز ظاهري منفصلة. يمكن بعد ذلك تغيير حجم كل نوع عقدة بالزيادة أو النقصان بشكل مستقل، ويحتوي على مجموعات مختلفة من المنافذ المفتوحة، ويمكن أن يكون له مقاييس سعة مختلفة. اقرأ المزيد حول هذا الموضوع في مستند أنواع عقدة Service Fabric. نظراً لأن أنواع عقدة Service Fabric في نظام مجموعتك مصنوعة من مجموعات مقياس الجهاز الظاهري في الواجهة الخلفية، فأنت بحاجة إلى إعداد قواعد القياس التلقائي لكل نوع عقدة/مجموعة مقياس الجهاز الظاهري.

ملاحظة

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

ملاحظة

في حالة استخدام صورة نظام تشغيل Windows مع تمكين دور Hyper-V، على سبيل المثال، سيتم تكوين الجهاز الظاهري للمحاكاة الظاهرية المتداخلة، ولن يتوفر مقياس الذاكرة المتاحة «Available Memory Metric»؛ نظراً لأن برنامج تشغيل الذاكرة الديناميكي داخل الجهاز الظاهري سيكون في حالة توقف.

اختر نوع العقدة/مقياس الجهاز الظاهري الذي تم تعيينه للقياس

حالياً، لا يمكنك تحديد قواعد القياس التلقائي لمجموعات مقياس الجهاز الظاهري باستخدام المدخل لإنشاء نظام مجموعة Service Fabric، لذا دعنا نستخدم Azure PowerShell (1.0+) لسرد أنواع العقد ثم إضافة قواعد القياس التلقائي إليها.

للحصول على قائمة بمجموعة مقاييس الجهاز الظاهري التي تشكل نظام المجموعة الخاص بك، قم بتشغيل أوامر cmdlets التالية:

Get-AzResource -ResourceGroupName <RGname> -ResourceType Microsoft.Compute/VirtualMachineScaleSets

Get-AzVmss -ResourceGroupName <RGname> -VMScaleSetName <virtual machine scale set name>

تعيين قواعد القياس التلقائي لمجموعة مقاييس نوع العقدة/الجهاز الظاهري

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

ملاحظة

سيؤدي التحجيم في نوع العقدة الأساسية إلى أقل من الحد الأدنى للعدد إلى جعل نظام المجموعة غير مستقر أو حتى يؤدي إلى خفضه. قد يؤدي ذلك إلى فقدان البيانات لتطبيقاتك ولخدمات النظام.

في الوقت الحالي، لا تكون ميزة التحجيم التلقائي مدفوعة بالأحمال التي قد تقوم تطبيقاتك بالإبلاغ عنها إلى Service Fabric. لذلك في هذا الوقت، يكون التحجيم التلقائي الذي تحصل عليه مدفوعاً تماماً بعدادات الأداء التي تنبعث من كل مثيل من مثيلات مجموعة مقياس الجهاز الظاهري.

اتبع هذه الإرشادات لإعداد التحجيم التلقائي لكل مجموعة مقياس للجهاز الظاهري.

ملاحظة

في مقياس في السيناريو، ما لم يكن نوع العقدة لديك يحتوي على النوع «الذهبي» أو «الفضي» من مستوى قدرة على الصمود، فأنت بحاجة إلى استدعاء Remove-ServiceFabricNodeState cmdlet باسم العقدة المناسب. من أجل القدرة على الصمود من النوع «البرونزي»، لا ينصح بالتوسع في أكثر من عقدة واحدة في وقت واحد.

إضافة الأجهزة الظاهرية يدوياً إلى نوع عقدة/مجموعة مقياس الجهاز الظاهري

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

ملاحظة

تستغرق إضافة الأجهزة الظاهرية بعض الوقت، لذلك لا تتوقع أن تكون الإضافات فورية. خطط لإضافة السعة في وقت مبكر، مما يسمح لأكثر من 10 دقائق قبل توفر سعة الجهاز الظاهري لمثيلات النسخ المتماثلة / مثيلات الخدمة ليتم وضعها.

إضافة أجهزة ظاهرية باستخدام قالب

اتبع العينة/الإرشادات الموجودة في معرض قوالب التشغيل السريع لتغيير عدد الأجهزة الظاهرية في كل نوع عقدة.

إضافة أجهزة ظاهرية باستخدام أوامر PowerShell أو CLI

تحصل التعليمة البرمجية التالية على مجموعة مقياس تم تعيينه بالاسم، وتزيد من سعة المقياس الذي تم تعيينه بواسطة 1.

$scaleset = Get-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm
$scaleset.Sku.Capacity += 1

Update-AzVmss -ResourceGroupName $scaleset.ResourceGroupName -VMScaleSetName $scaleset.Name -VirtualMachineScaleSet $scaleset

تقوم هذه التعليمة البرمجية بتعيين السعة إلى 6.

# Get the name of the node with
az vmss list-instances -n nt1vm -g sfclustertutorialgroup --query [*].name

# Use the name to scale
az vmss scale -g sfclustertutorialgroup -n nt1vm --new-capacity 6

إزالة الأجهزة الظاهرية يدوياً من نوع العقدة/مجموعة مقياس الجهاز الظاهري

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

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

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

إزالة عقدة Service Fabric

تنطبق خطوات إزالة حالة العقدة يدوياً فقط على أنواع العقدة ذات طبقة القدرة على الصمود من النوع البرونزي. بالنسبة إلى طبقة القدرة على الصمود الفضية والذهبية، تتم هذه الخطوات تلقائياً عبر النظام الأساسي. لمزيد من المعلومات حول القدرة على الصمود، راجع تخطيط سعة نظام مجموعة Service Fabric.

ملاحظة

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

للحفاظ على عقد نظام المجموعة موزعة بالتساوي عبر مجالات الترقية والخطأ، وبالتالي تمكين استخدامها بشكل متساو، يجب إزالة أحدث عقدة تم إنشاؤها أولاً. بمعنى آخر، يجب إزالة العقد بالترتيب العكسي لإنشائها. العقدة التي تم إنشاؤها مؤخراً هي العقدة ذات قيمة الخاصية virtual machine scale set InstanceId الأكبر. تعرض أمثلة التعليمات البرمجية أدناه أحدث عقدة تم إنشاؤها.

Get-ServiceFabricNode | Sort-Object NodeInstanceId -Descending | Select-Object -First 1
sfctl node list --query "sort_by(items[*], &name)[-1]"

يحتاج نظام مجموعة Service Fabric إلى معرفة أنه ستتم إزالة هذه العقدة. هناك ثلاث خطوات يجب اتخاذها:

  1. قم بتعطيل العقدة بحيث لا تكون نسخة متماثلة للبيانات بعد الآن.
    PowerShell: Disable-ServiceFabricNode
    sfctl: sfctl node disable

  2. أوقف العقدة بحيث يتم إيقاف تشغيل وقت تشغيل Service Fabric بشكل نظيف، ويحصل تطبيقك على طلب إنهاء.
    PowerShell: Start-ServiceFabricNodeTransition -Stop
    sfctl: sfctl node transition --node-transition-type Stop

  3. إزالة العقدة من نظام المجموعة.
    PowerShell: Remove-ServiceFabricNodeState
    sfctl: sfctl node remove-state

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

تحصل كتلة التعليمات البرمجية التالية على آخر عقدة تم إنشاؤها، وتقوم بتعطيلها وإيقافها وإزالتها من نظام المجموعة.

#### After you've connected.....
# Get the node that was created last
$node = Get-ServiceFabricNode | Sort-Object { $_.NodeName.Substring($_.NodeName.LastIndexOf('_') + 1) } -Descending | Select-Object -First 1

# Node details for the disable/stop process
$nodename = $node.NodeName
$nodeid = $node.NodeInstanceId

$loopTimeout = 10

# Run disable logic
Disable-ServiceFabricNode -NodeName $nodename -Intent RemoveNode -TimeoutSec 300 -Force

$state = Get-ServiceFabricNode | Where-Object NodeName -eq $nodename | Select-Object -ExpandProperty NodeStatus

while (($state -ne [System.Fabric.Query.NodeStatus]::Disabled) -and ($loopTimeout -ne 0))
{
    Start-Sleep 5
    $loopTimeout -= 1
    $state = Get-ServiceFabricNode | Where-Object NodeName -eq $nodename | Select-Object -ExpandProperty NodeStatus
    Write-Host "Checking state... $state found"
}

# Exit if the node was unable to be disabled
if ($state -ne [System.Fabric.Query.NodeStatus]::Disabled)
{
    Write-Error "Disable failed with state $state"
}
else
{
    # Stop node
    $stopid = New-Guid
    Start-ServiceFabricNodeTransition -Stop -OperationId $stopid -NodeName $nodename -NodeInstanceId $nodeid -StopDurationInSeconds 300

    $state = (Get-ServiceFabricNodeTransitionProgress -OperationId $stopid).State
    $loopTimeout = 10

    # Watch the transaction
    while (($state -eq [System.Fabric.TestCommandProgressState]::Running) -and ($loopTimeout -ne 0))
    {
        Start-Sleep 5
        $state = (Get-ServiceFabricNodeTransitionProgress -OperationId $stopid).State
        Write-Host "Checking state... $state found"
    }

    if ($state -ne [System.Fabric.TestCommandProgressState]::Completed)
    {
        Write-Error "Stop transaction failed with $state"
    }
    else
    {
        # Remove the node from the cluster
        Remove-ServiceFabricNodeState -NodeName $nodename -TimeoutSec 300 -Force
    }
}

في التعليمات البرمجية sfctl أدناه، يتم استخدام الأمر التالي للحصول على قيمة اسم العقدة للعقدة التي تم إنشاؤها مؤخراً: sfctl node list --query "sort_by(items[*], &name)[-1].name"

# Inform the node that it is going to be removed
sfctl node disable --node-name _nt1vm_5 --deactivation-intent 4 -t 300

# Stop the node using a random guid as our operation id
sfctl node transition --node-instance-id 131541348482680775 --node-name _nt1vm_5 --node-transition-type Stop --operation-id c17bb4c5-9f6c-4eef-950f-3d03e1fef6fc --stop-duration-in-seconds 14400 -t 300

# Remove the node from the cluster
sfctl node remove-state --node-name _nt1vm_5

تلميح

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

التحقق من حالة إلغاء التنشيطsfctl node list --query "sort_by(items[*], &name)[-1].nodeDeactivationInfo"

التحقق من حالة الإيقافsfctl node list --query "sort_by(items[*], &name)[-1].isStopped"

تغيير الحجم في مجموعة المقاييس

الآن بعد إزالة عقدة Service Fabric من نظام المجموعة، يمكن تغيير حجم مجموعة مقياس الجهاز الظاهري. في المثال أدناه، يتم تقليل سعة مجموعة المقياس بمقدار 1.

$scaleset = Get-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm
$scaleset.Sku.Capacity -= 1

Update-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm -VirtualMachineScaleSet $scaleset

تقوم هذه التعليمة البرمجية بتعيين السعة إلى 5.

# Get the name of the node with
az vmss list-instances -n nt1vm -g sfclustertutorialgroup --query [*].name

# Use the name to scale
az vmss scale -g sfclustertutorialgroup -n nt1vm --new-capacity 5

السلوكيات التي قد تلاحظها في Service Fabric Explorer

عند توسيع نطاق نظام مجموعة، سيعكس Service Fabric Explorer عدد العقد (مثيلات مجموعة مقياس الجهاز الظاهري) التي تشكل جزءاً من نظام المجموعة. ومع ذلك، عند تقليل حجم نظام مجموعة، سترى مثيل العقدة/الجهاز الظاهري الذي تمت إزالته معروضاً في حالة غير سليمة إلا إذا قمت باستدعاء Remove-ServiceFabricNodeState cmd باسم العقدة المناسب.

فيما يلي تفسير لهذا السلوك.

تشير العقد المدرجة في Service Fabric Explorer إلى انعكاس لما تعرفه خدمات نظام Service Fabric (FM على وجه التحديد) حول عدد العقد التي كان يحتوي عليها نظام المجموعة. عند تقليل مجموعة مقياس الجهاز الظاهري، تم حذف الجهاز الظاهري ولكن خدمة نظام FM لا تزال تعتقد أن العقدة (التي تم تعيينها إلى الجهاز الظاهري الذي تم حذفه) ستعود. لذلك يستمر Service Fabric Explorer في عرض هذه العقدة (على الرغم من أن الحالة الصحية قد تكون خطأ أو غير معروف).

للتأكد من إزالة عقدة عند إزالة جهاز ظاهري، يتوفر لديك خياران:

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

ملاحظة

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

  1. بمجرد تقليل حجم مثيل الجهاز الظاهري، تحتاج إلى استدعاء Remove-ServiceFabricNodeState cmdlet.

ملاحظة

تتطلب أنظمة مجموعات Service Fabric عددًا معينًا من العقد ليتم تشغيلها في جميع الأوقات من أجل الحفاظ على التوافر والحفاظ على الحالة - يُشار إليها باسم "الحفاظ على الحصة". لذلك، من غير الآمن عادةً إيقاف تشغيل جميع الأجهزة الموجودة في نظام المجموعة ما لم تقم أولاً بإجراء نسخ احتياطي كامل لحالتك.

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

اقرأ ما يلي أيضاً للتعرف على تخطيط سعة نظام المجموعة وترقية نظام مجموعة وخدمات التقسيم: