توسيع نِطاق نوع العقدة الأساسية لمجموعة Service Fabric

توضح هذه المقالة كيفية توسيع نِطاق نوع العقدة الأساسية لمجموعة Service Fabric مع الحد الأدنى من وقت التوقف. ترقيات SKU الموضعية غير مدعومة على عقد نظام مجموعة Service Fabric، حيث من المحتمل أن تتضمن هذه العمليات فقدان البيانات والتوافر. الطريقة الأكثر أمانا والأكثر موثوقية والموصى بها لتوسيع نِطاق نوع عقدة Service Fabric هي:

  1. أضف نوعا جديدا من العقدة إلى مجموعة Service Fabric الخاصة بك، مدعومة بمجموعة SKU وتكوين مِقياس الجهاز الظاهري التي تمت ترقيتها (أو تعديلها). تتضمن هذه الخطوة أيضا إعداد موازن تحميل جَديد وشبكة فرعية وعنوان IP عام لمجموعة المقياس.

  2. بمُجرد تشغيل كل من مجموعات المقاييس الأصلية والمطورة جنبا إلى جنب، قم بتعطيل مثيلات العقدة الأصلية واحدة تلو الأخرى بحيث يتم ترحيل خدمات النظام (أو النسخ المتماثلة لخدمات الحالة) إلى مجموعة المقياس الجديدة.

  3. تحقق من صحة الكتلة والعقد الجديدة، ثم قم بإزالة مجموعة المقياس الأصلية (والموارد ذات الصلة) وحالة العقدة المحذوفة.

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

  • من حجم VM Standard_D2_V2 إلى D4_V2 القياسية، و
  • من نظام تشغيل الجهاز الظاهري Windows Server 2019 Datacenter إلى Windows Server 2022 Datacenter.

تحذير

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

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

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

إعداد مَجموعة الاختبار

لنقوم بإعداد مجموعة اختبار Service Fabric الأولية. أولا، قم بتنزيل نماذج قوالب Azure Resource Manager التي سوف نستخدمها لإكمال هذا السيناريو.

بعد ذلك، سَجل الدخول إلى حساب Azure الخاص بك.

# Sign in to your Azure account
Login-AzAccount -SubscriptionId "<subscription ID>"

بعد ذلك افتح مَلف parameters.json وقم بتحديث القيمة clusterName إلى شيء فريد (داخل Azure).

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

إنشاء شهادة موقعة ذاتيا وتوزيع المجموعة

أولا، قم بتعيين المتغيرات التي تحتاجها لتوزيع نظام مجموعة Service Fabric. اضبط القيم الخاصة لـresourceGroupNameوcertSubjectNameوparameterFilePathوtemplateFilePath لحسابك وبيئتك المحددين:

# Assign deployment variables
$resourceGroupName = "sftestupgradegroup"
$certOutputFolder = "c:\certificates"
$certPassword = "Password!1" | ConvertTo-SecureString -AsPlainText -Force
$certSubjectName = "sftestupgrade.southcentralus.cloudapp.azure.com"
$parameterFilePath = "C:\parameters.json"
$templateFilePath = "C:\Initial-TestClusterSetup.json"

ملاحظة

certOutputFolder تأكد من وجود الموقع على جهازك المحلي قبل تشغيل الأمر لتوزيع مجموعة Service Fabric جديدة.

ثم قم بتوزيع مجموعة اختبار Service Fabric:

# Deploy the initial test cluster
New-AzServiceFabricCluster `
    -ResourceGroupName $resourceGroupName `
    -CertificateOutputFolder $certOutputFolder `
    -CertificatePassword $certPassword `
    -CertificateSubjectName $certSubjectName `
    -TemplateFile $templateFilePath `
    -ParameterFile $parameterFilePath

بمجرد اكتمال التوزيع، حدد موقع ملف .pfx ($certPfx) على جهازك المحلي واستورده إلى مخزن الشهادات:

cd c:\certificates
$certPfx = ".\sftestupgradegroup20200312121003.pfx"

Import-PfxCertificate `
     -FilePath $certPfx `
     -CertStoreLocation Cert:\CurrentUser\My `
     -Password (ConvertTo-SecureString Password!1 -AsPlainText -Force)

ترجع العملية بصمة إبهام الشهادة، والتي يمكنك استخدامها الآن للاتصال بالمجموعة الجديدة والتحقق من حالتها الصحية. (تخطي القسم التالي، وهو نهج بديل لتوزيع المجموعات.)

استخدام شهادة موجودة لتوزيع المجموعة

بدلا من ذلك، يمكنك استخدام شهادة Azure Key Vault موجودة لتوزيع مجموعة الاختبار. للقيام بذلك، تحتاج إلى الحصول على مراجع إلى بصمة الإبهام Key Vault والشهادة.

# Key Vault variables
$certUrlValue = "https://sftestupgradegroup.vault.azure.net/secrets/sftestupgradegroup20200309235308/dac0e7b7f9d4414984ccaa72bfb2ea39"
$sourceVaultValue = "/subscriptions/########-####-####-####-############/resourceGroups/sftestupgradegroup/providers/Microsoft.KeyVault/vaults/sftestupgradegroup"
$thumb = "BB796AA33BD9767E7DA27FE5182CF8FDEE714A70"

بعد ذلك، قم بتعيين اسم مجموعة موارد للمجموعة وقم بتعيين templateFilePath والمواقع parameterFilePath:

ملاحظة

يجب أن تكون مجموعة الموارد المعينة موجودة بالفعل وأن تكون موجودة في نفس المنطقة التي يوجد بها Key Vault.

$resourceGroupName = "sftestupgradegroup"
$templateFilePath = "C:\Initial-TestClusterSetup.json"
$parameterFilePath = "C:\parameters.json"

وأخيرا، قم بتشغيل الأمر التالي لتوزيع مجموعة الاختبار الأولية:

# Deploy the initial test cluster
New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $templateFilePath `
    -TemplateParameterFile $parameterFilePath `
    -CertificateThumbprint $thumb `
    -CertificateUrlValue $certUrlValue `
    -SourceVaultValue $sourceVaultValue `
    -Verbose

اتصل إلى المجموعة الجديدة وتحقق من الحالة الصحية

اتصل إلى المجموعة وتأكد من أن جميع العقد الخمسة الخاصة بها صحية (استبدل clusterName المتغيرات والمتغيرات thumb بقيمك الخاصة):

# Connect to the cluster
$clusterName = "sftestupgrade.southcentralus.cloudapp.azure.com:19000"
$thumb = "BB796AA33BD9767E7DA27FE5182CF8FDEE714A70"

Connect-ServiceFabricCluster `
    -ConnectionEndpoint $clusterName `
    -KeepAliveIntervalInSec 10 `
    -X509Credential `
    -ServerCertThumbprint $thumb  `
    -FindType FindByThumbprint `
    -FindValue $thumb `
    -StoreLocation CurrentUser `
    -StoreName My

# Check cluster health
Get-ServiceFabricClusterHealth

الآن، نحن مستعدون لبدء إجراء الترقية.

توزيع نوع عقدة أساسي جديد باستخدام مجموعة المقاييس التي تمت ترقيتها

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

تحديث قالب الكتلة باستخدام مَجموعة المقاييس التي تمت ترقيتها

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

تم بالفعل إجراء التغييرات المطلوبة لهذه الخطوة لك في ملف القالب Step1-AddPrimaryNodeType.json، وسيوضح ما يلي هذه التغييرات بالتفصيل. إذا كنت تفضل ذلك، يمكنك تخطي الشرح والاستمرار في الحصول على مراجع Key Vaultوتوزيع القالب المحدث الذي يضيف نوع عقدة أساسية جديدة إلى مجموعتك.

ملاحظة

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

إنشاء شبكة فَرعية جديدة في الشبكة الظاهرية الحالية

{
    "name": "[variables('subnet1Name')]",
    "properties": {
        "addressPrefix": "[variables('subnet1Prefix')]"
    }
}

إنشاء عنوان IP عام جديد باستخدام اسم نِطاق فريد

{
    "apiVersion": "[variables('publicIPApiVersion')]",
    "type": "Microsoft.Network/publicIPAddresses",
    "name": "[concat(variables('lbIPName'),'-',variables('vmNodeType1Name'))]",
    "location": "[variables('computeLocation')]",
    "properties": {
        "dnsSettings": {
            "domainNameLabel": "[concat(variables('dnsName'),'-','nt1')]"
        },
        "publicIPAllocationMethod": "Dynamic"
    },
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    }
}

إنشاء موازن تحميل جَديد لعنوان IP العام

"dependsOn": [
    "[concat('Microsoft.Network/publicIPAddresses/',concat(variables('lbIPName'),'-',variables('vmNodeType1Name')))]"
]

إنشاء مجموعة جديدة من مقاييس الجهاز الظاهري (عن طريق وحدات SKU للجهاز الظاهري ونظام التشغيل التي تمت ترقيتها)

مرجع نوع العقدة

"nodeTypeRef": "[variables('vmNodeType1Name')]"

VM SKU

"sku": {
    "name": "[parameters('vmNodeType1Size')]",
    "capacity": "[parameters('nt1InstanceCount')]",
    "tier": "Standard"
}

رمز SKU لنِظام التشغيل

"imageReference": {
    "publisher": "[parameters('vmImagePublisher1')]",
    "offer": "[parameters('vmImageOffer1')]",
    "sku": "[parameters('vmImageSku1')]",
    "version": "[parameters('vmImageVersion1')]"
}

إذا كنت تقوم بتغيير نظام التشغيل SKU في نظام مجموعة Linux

في نظام مجموعة Windows، قيمة الخاصية vmImage هي "Windows" بينما قيمة نفس الخاصية لنظام مجموعة Linux هي اسم صورة نظام التشغيل المستخدمة. على سبيل المثال - Ubuntu20_04 (استخدم أحدث اسم صورة لجهاز ظاهري).

لذلك، إذا كنت تقوم بتغيير صورة الجهاز الظاهري (OS SKU) في نظام مجموعة Linux، فقم بتحديث إعداد vmImage على مورد نظام مجموعة Service Fabric أيضا.

#Update the property vmImage with the required OS name in your ARM template
{
    "vmImage": "[parameter(newVmImageName]”
}

ملاحظة: مثال على newVmImageName: Ubuntu20_04

يمكنك أيضا تحديث مورد نظام المجموعة باستخدام أمر PowerShell التالي:

# Update cluster vmImage to target OS. This registers the SF runtime package type that is supplied for upgrades.
Update-AzServiceFabricVmImage -ResourceGroupName $resourceGroup -ClusterName $clusterName -VmImage Ubuntu20_04

تأكد أيضا من تضمين أي إضافات إضافية مطلوبة لحمل العمل الخاص بك.

إضافة نوع عقدة أساسي جديد إلى المَجموعة

الآن بعد أن أصبح لنوع العقدة الجديد (vmNodeType1Name) اسمه الخاص والشبكة الفرعية وعنوان IP وموازن التحميل ومجموعة المقاييس، يمكنه إعادة استخدام جميع المتغيرات الأخرى من نوع العقدة الأصلي (مثل nt0applicationEndPortو nt0applicationStartPortو nt0fabricTcpGatewayPort):

"name": "[variables('vmNodeType1Name')]",
"applicationPorts": {
    "endPort": "[variables('nt0applicationEndPort')]",
    "startPort": "[variables('nt0applicationStartPort')]"
},
"clientConnectionEndpointPort": "[variables('nt0fabricTcpGatewayPort')]",
"durabilityLevel": "Bronze",
"ephemeralPorts": {
    "endPort": "[variables('nt0ephemeralEndPort')]",
    "startPort": "[variables('nt0ephemeralStartPort')]"
},
"httpGatewayEndpointPort": "[variables('nt0fabricHttpGatewayPort')]",
"isPrimary": true,
"reverseProxyEndpointPort": "[variables('nt0reverseProxyEndpointPort')]",
"vmInstanceCount": "[parameters('nt1InstanceCount')]"

بمجرد تنفيذ جميع التغييرات في ملفات القوالب والمعلمات، انتقل إلى القسم التالي للحصول على مراجع Key Vault وتوزيع التحديثات على مجموعتك.

احصل على مراجع Key Vault الخاصة بك

لنشر التكوين المحدث، تحتاج إلى عدة مراجع إلى شهادة نظام المجموعة المخزنة في Key Vault. أسهل طريقة للعثور على هذه القيم هي من خلال مدخل Microsoft Azure. تحتاج إلى:

  • عنوان URL Key Vault لشهادة نظام المَجموعة. من Key Vault في مدخل Microsoft Azure، حدد الشهادات>الشهادة المطلوبة>المعرف السري:

    $certUrlValue="https://sftestupgradegroup.vault.azure.net/secrets/sftestupgradegroup20200309235308/dac0e7b7f9d4414984ccaa72bfb2ea39"
    
  • بصمة الإبهام لشهادة المجموعة الخاصة بك. (ربما لديك بالفعل الشهادة إذا كنت متصلا بالمجموعة الأولية للتحقق من حالتها الصحية.) من نفس شفرة الشهادة (الشهادات الشهادة>المطلوبة) في مدخل Microsoft Azure، انسخ X.509 SHA-1 Thumbprint (في سداسي عشري):

    $thumb = "BB796AA33BD9767E7DA27FE5182CF8FDEE714A70"
    
  • معرّف المورد الخاص بـ Key Vault. من Key Vault في مدخل Microsoft Azure، حدد Properties >Resource ID:

    $sourceVaultValue = "/subscriptions/########-####-####-####-############/resourceGroups/sftestupgradegroup/providers/Microsoft.KeyVault/vaults/sftestupgradegroup"
    

نشر القالب المحدّث

اضبط templateFilePath الأمر حَسب الحاجة وقم بتشغيل الأمر التالي:

# Deploy the new node type and its resources
$templateFilePath = "C:\Step1-AddPrimaryNodeType.json"

New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $templateFilePath `
    -TemplateParameterFile $parameterFilePath `
    -CertificateThumbprint $thumb `
    -CertificateUrlValue $certUrlValue `
    -SourceVaultValue $sourceVaultValue `
    -Verbose

عند اكتمال التوزيع، تحقق من سلامة نظام المجموعة مرة أخرى وتأكد من أن جميع العقد الموجودة على كلا النوعين من العقد سليمة.

Get-ServiceFabricClusterHealth

رحل عقد البذور إلى نوع العقدة الجديد

نحن الآن على استعداد لتَحديث نوع العقدة الأصلي على أنه غير أساسي والبدء في تعطيل العقد الخاصة به. عِند تعطيل العقد، يتم ترحيل خدمات نظام المجموعة وعقد البذور إلى مجموعة المقاييس الجديدة.

أزل العلامة على نوع العقدة الأصلي كأساسي

أزل التسمية أولاisPrimary في القالب من نوع العقدة الأصلي.

{
    "isPrimary": false,
}

ثم وزع القالب مع التحديث. يبدأ هذا التوزيع ترحيل العقد الأولية إلى مجموعة المقياس الجديدة.

$templateFilePath = "C:\Step2-UnmarkOriginalPrimaryNodeType.json"

New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $templateFilePath `
    -TemplateParameterFile $parameterFilePath `
    -CertificateThumbprint $thumb `
    -CertificateUrlValue $certUrlValue `
    -SourceVaultValue $sourceVaultValue `
    -Verbose

ملاحظة

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

استخدم Service Fabric Explorer لكي تراقب ترحيل عقد البذور إلى مجموعة المقاييس الجديدة. يجب أن تكون جميع عقد نوع العقدة الأصلية (nt0vm) خاطئة في العمود Is Seed Node ، ويجب أن تكون عقد نوع العقدة الجديدة (nt1vm) صحيحة.

تعطيل العقد في مَجموعة مقياس نوع العقدة الأصلية

بمُجرد ترحيل جميع عقد البذور إلى مجموعة المقاييس الجديدة، يمكنك تعطيل عقد مجموعة المقياس الأصلية.

# Disable the nodes in the original scale set.
$nodeType = "nt0vm"
$nodes = Get-ServiceFabricNode

Write-Host "Disabling nodes..."
foreach($node in $nodes)
{
  if ($node.NodeType -eq $nodeType)
  {
    $node.NodeName

    Disable-ServiceFabricNode -Intent RemoveNode -NodeName $node.NodeName -Force
  }
}

استخدم Service Fabric Explorer لمراقبة تقدم العقد في مجموعة المقياس الأصلية من حالة تعطيل إلى حالةمعطل.

يعرض Service Fabric Explorer حالة العقد المعطلة

بالنسبة لمتانة الفضة والذهب، سوف تدخل بعض العقد في حالة التعطيل، بينما قد تظل العقد الأخرى في حالة تعطيل. في Service Fabric Explorer، تحقق من أن علامة التبويب Details للعقد في حالة تعطيل. إذا أظهروا فحص الأمان المعلق من النوع EnsurePartitionQuorem (ضمان الحصة لأقسام خدمة البنية الأساسية)، فمن الآمن المتابعة.

يمكنك متابعة إيقاف البيانات وإزالة العقد العالقة في حالة

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

أوقف البيانات على العقد المعطلة

الآن يُمكنك إيقاف البيانات الموجودة على العقد المعطلة.

# Stop data on the disabled nodes.
foreach($node in $nodes)
{
  if ($node.NodeType -eq $nodeType)
  {
    $node.NodeName

    Start-ServiceFabricNodeTransition -Stop -OperationId (New-Guid) -NodeInstanceId $node.NodeInstanceId -NodeName $node.NodeName -StopDurationInSeconds 10000
  }
}

أزل نوع العقدة الأصلي ونظف موارده

نحن على استعداد لإزالة نوع العقدة الأصلي والموارد المُرتبطة به لإنهاء إجراء القياس الرأسي.

إزالة مَجموعة المقاييس الأصلية

قم أولا بإزالة مَجموعة المقاييس الداعمة لنوع العقدة.

$scaleSetName = "nt0vm"
$scaleSetResourceType = "Microsoft.Compute/virtualMachineScaleSets"

Remove-AzResource -ResourceName $scaleSetName -ResourceType $scaleSetResourceType -ResourceGroupName $resourceGroupName -Force

حذف موارد IP الأصلية وموازن التَحميل

يُمكنك الآن حذف عنوان IP الأصلي وتحميل موارد الموازن. في هذه الخطوة، ستقوم أيضا بتحديث اسم DNS.

ملاحظة

هذه الخطوة اختيارية إذا كنت تَستخدم بالفعل عنوان IP عاما قياسيا لوحدة SKU وموازن التحميل. في هذه الحالة، يمكن أن يكون لديك مجموعات / أنواع عقدة متعددة تحت نفس موازن التحميل.

قم بتشغيل الأوامر التالية، وتعديل $lbname القيمة حسب الحاجة.

# Delete the original IP and load balancer resources
$lbName = "LB-sftestupgrade-nt0vm"
$lbResourceType = "Microsoft.Network/loadBalancers"
$ipResourceType = "Microsoft.Network/publicIPAddresses"
$oldPublicIpName = "PublicIP-LB-FE-nt0vm"
$newPublicIpName = "PublicIP-LB-FE-nt1vm"

$oldPrimaryPublicIP = Get-AzPublicIpAddress -Name $oldPublicIpName  -ResourceGroupName $resourceGroupName
$primaryDNSName = $oldPrimaryPublicIP.DnsSettings.DomainNameLabel
$primaryDNSFqdn = $oldPrimaryPublicIP.DnsSettings.Fqdn

Remove-AzResource -ResourceName $lbName -ResourceType $lbResourceType -ResourceGroupName $resourceGroupName -Force
Remove-AzResource -ResourceName $oldPublicIpName -ResourceType $ipResourceType -ResourceGroupName $resourceGroupName -Force

$PublicIP = Get-AzPublicIpAddress -Name $newPublicIpName  -ResourceGroupName $resourceGroupName
$PublicIP.DnsSettings.DomainNameLabel = $primaryDNSName
$PublicIP.DnsSettings.Fqdn = $primaryDNSFqdn
Set-AzPublicIpAddress -PublicIpAddress $PublicIP

إزالة حالة العقدة مِن نوع العقدة الأصلي

ستُظهر عُقد نوع العقدة الأصلية الآن خطأ لـ حالتها الصحية . إزالة حالة العقدة الخاصة بهم من المَجموعة.

# Remove state of the obsolete nodes from the cluster
$nodeType = "nt0vm"
$nodes = Get-ServiceFabricNode

Write-Host "Removing node state..."
foreach($node in $nodes)
{
  if ($node.NodeType -eq $nodeType)
  {
    $node.NodeName

    Remove-ServiceFabricNodeState -NodeName $node.NodeName -Force
  }
}

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

تحديث قالب التوزيع ليعكس نوع العقدة الأساسية الذي تم توسيعه حديثا

تم بالفعل إجراء التغييرات المطلوبة لهذه الخطوة لك في ملف القالب Step3-CleanupOriginalPrimaryNodeType.json، وسوف تشرح الأقسام التالية تغييرات القالب هذه بالتفصيل. إذا كنت تفضل ذلك، يمكنك تخطي الشرح والاستمرار في توزيع القالب المحدث وإكمال البرنامج التعليمي.

تحديث نقطة نهاية إدارة نظام المَجموعة

تحديث الكتلة managementEndpoint على قالب التوزيع للإشارة IP الجديد (عن طريق تحديث vmNodeType0Name مع vmNodeType1Name).

  "managementEndpoint": "[concat('https://',reference(concat(variables('lbIPName'),'-',variables('vmNodeType1Name'))).dnsSettings.fqdn,':',variables('nt0fabricHttpGatewayPort'))]",

إزالة مَرجع نوع العقدة الأصلي

إزالة مرجع نوع العقدة الأصلي من مورد Service Fabric في قالب التوزيع:

"name": "[variables('vmNodeType0Name')]",
"applicationPorts": {
    "endPort": "[variables('nt0applicationEndPort')]",
    "startPort": "[variables('nt0applicationStartPort')]"
},
"clientConnectionEndpointPort": "[variables('nt0fabricTcpGatewayPort')]",
"durabilityLevel": "Bronze",
"ephemeralPorts": {
    "endPort": "[variables('nt0ephemeralEndPort')]",
    "startPort": "[variables('nt0ephemeralStartPort')]"
},
"httpGatewayEndpointPort": "[variables('nt0fabricHttpGatewayPort')]",
"isPrimary": true,
"reverseProxyEndpointPort": "[variables('nt0reverseProxyEndpointPort')]",
"vmInstanceCount": "[parameters('nt0InstanceCount')]"

تكوين النهج الصَحية لتجاهل الأخطاء الموجودة

فقط بالنسبة للمجموعات الفضية ومجموعات المتانة الأعلى، قم بتحديث مورد المَجموعة في القالب وقم بتكوين نهج الحماية لتجاهل fabric:/System حماية التطبيق عن طريق إضافة التطبيق Delta Health Policies ضمن خصائص مورد المجموعة كما هو موضح أدناه. سوف يتجاهل النهج أدناه الأخطاء الموجودة ولكنه لن يسمح بالأخطاء الصحية الجديدة.

"upgradeDescription":  
{ 
 "forceRestart": false, 
 "upgradeReplicaSetCheckTimeout": "10675199.02:48:05.4775807", 
 "healthCheckWaitDuration": "00:05:00", 
 "healthCheckStableDuration": "00:05:00", 
 "healthCheckRetryTimeout": "00:45:00", 
 "upgradeTimeout": "12:00:00", 
 "upgradeDomainTimeout": "02:00:00", 
 "healthPolicy": { 
   "maxPercentUnhealthyNodes": 100, 
   "maxPercentUnhealthyApplications": 100 
 }, 
 "deltaHealthPolicy":  
 { 
   "maxPercentDeltaUnhealthyNodes": 0, 
   "maxPercentUpgradeDomainDeltaUnhealthyNodes": 0, 
   "maxPercentDeltaUnhealthyApplications": 0, 
   "applicationDeltaHealthPolicies":  
   { 
       "fabric:/System":  
       { 
           "defaultServiceTypeDeltaHealthPolicy":  
           { 
                   "maxPercentDeltaUnhealthyServices": 0 
           } 
       } 
   } 
 } 
}

إزالة الموارد الداعمة لـنوع العقدة الأصلي

إزالة كافة الموارد الأخرى المتعلقة بنوع العقدة الأصلي من قالب ARM ومَلف المعلمات. احذف مَا يلي:

    "vmImagePublisher": {
      "value": "MicrosoftWindowsServer"
    },
    "vmImageOffer": {
      "value": "WindowsServer"
    },
    "vmImageSku": {
      "value": "2019-Datacenter"
    },
    "vmImageVersion": {
      "value": "latest"
    },

توزيع القالب النهائي

وأخيرا، قم بتوزيع قالب Azure Resource Manager المعدل.

# Deploy the updated template file
$templateFilePath = "C:\Step3-CleanupOriginalPrimaryNodeType"

New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $templateFilePath `
    -TemplateParameterFile $parameterFilePath `
    -CertificateThumbprint $thumb `
    -CertificateUrlValue $certUrlValue `
    -SourceVaultValue $sourceVaultValue `
    -Verbose

ملاحظة

سوف تستغرق هذه الخطوة بعض الوقت، وعادة ما تصل إلى ساعتين.

سوف تقوم الترقية بتغيير الإعدادات إلى InfrastructureService; لذلك، هناك حاجة إلى إعادة تشغيل العقدة. في هذه الحالة، يتم تجاهل forceRestart. تحدد المعلمةupgradeReplicaSetCheckTimeout الحد الأقصى للوقت الذي ينتظر Service Fabric القسم ليكون في حالة آمنة، إن لم يكن بالفعل في حالة آمنة. بمجرد تمرير الفحوصات الخاصة بالسلامة لجميع الأقسام الموجودة على العقدة، يتابع Service Fabric الترقية على تلك العقدة. يمكن تخفيض قيمة المعلمة upgradeTimeout إلى 6 ساعات، ولكن لتحقيق أقصى قدر من السلامة يجب استخدام 12 ساعة.

بمجرد اكتمال التوزيع، تحقق في مدخل Microsoft Azure من أن حالة مورد Service Fabric جاهزة. تحقق من أنه يمكنك الوصول إلى نقطة نهاية Service Fabric Explorer الجديدة، وأن حالة حماية الكتلةتكونOK، وأن أي تطبيقات تم توزيعها تعمل بشكل صَحيح.

الآن، قمت بتحجيم نوع عقدة نظام المجموعة الأساسي عموديا!

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