مشاركة عبر


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

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

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

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

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

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

  • من حجم الجهاز الظاهري 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و certSubjectNameparameterFilePathو و 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 = "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"

بعد ذلك، قم بتعيين اسم مجموعة موارد للمجموعة وتعيين 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 = "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"

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 عام جديد باستخدام domainNameLabel فريد

{
    "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')))]"
]

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

Ref نوع العقدة

"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، حدد Certificates>Your desired certificate>Secret Identifier:

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

    $thumb = "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
    
  • معرف المورد ل 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 لمراقبة تقدم العقد في مجموعة المقياس الأصلية من Disabling إلى Disabled status.

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

بالنسبة إلى المتانة الفضية والذهبية، ستنتقل بعض العقد إلى حالة معطل، بينما قد يبقى البعض الآخر في حالة تعطيل . في Service Fabric Explorer، تحقق من علامة التبويب Details للعقد في حالة التعطيل. إذا أظهرت Pending Safety Check of Kind 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)، وكلها بقيم الحالة الصحية OK. ستظل حالة صحة نظام المجموعة تظهر الخطأ. سنقوم بتنقيح ذلك بعد ذلك عن طريق تحديث القالب ليعكس أحدث التغييرات وإعادة التوزيع.

تحديث قالب النشر ليعكس نوع العقدة الأساسية المتدرجة حديثا

تم إجراء التغييرات المطلوبة لهذه الخطوة بالفعل في ملف القالب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')]"

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

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

"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 الجديدة، وحالة صحة نظام المجموعةعلى ما يرام، وأي تطبيقات تم نشرها تعمل بشكل صحيح.

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

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