Vertikální navýšení kapacity clusteru Service Fabric, který není primárním typem uzlu
Tento článek popisuje, jak vertikálně navýšit kapacitu clusteru Service Fabric bez primárního typu uzlu s minimálními výpadky. Místní upgrady skladové položky nejsou podporované na uzlech clusteru Service Fabric, například takové operace mohou zahrnovat ztrátu dat a dostupnosti. Nejbezpečnější, nejspolehlivější a nejspolehlivější metodou vertikálního navýšení kapacity typu uzlu Service Fabric je:
Přidejte do clusteru Service Fabric nový typ uzlu, který je zajištěný upgradovanou (nebo upravenou) skladovou jednotkou a konfigurací škálovací sady virtuálních počítačů. Tento krok také zahrnuje nastavení nového nástroje pro vyrovnávání zatížení, podsítě a veřejné IP adresy pro škálovací sadu.
Jakmile jsou původní i upgradované škálovací sady spuštěné vedle sebe, migrujte úlohu nastavením omezení umístění pro aplikace na nový typ uzlu.
Ověřte, že je cluster v pořádku, odeberte původní škálovací sadu (a související prostředky) a stav uzlu odstraněných uzlů.
Následující postup vás provede procesem aktualizace velikosti virtuálního počítače a operačního systému virtuálních počítačů bez primárního typu uzlu ukázkového clusteru se stříbrnou odolností zálohovanou jednou škálovací sadou s pěti uzly používanými jako sekundární typ uzlu. Primární typ uzlu se systémovými službami Service Fabric zůstane nedotčený. Upgradujeme typ neprimárního uzlu:
- Z velikosti virtuálního počítače Standard_D2_V2 až po D4_V2 Standard a
- Z operačního systému virtuálního počítače s Windows Serverem 2019 Datacenter až po Windows Server 2022 Datacenter.
Upozorňující
Před pokusem o provedení tohoto postupu v produkčním clusteru doporučujeme prozkoumat ukázkové šablony a ověřit proces na testovacím clusteru.
Nepokoušejte se o vertikální navýšení kapacity jiného typu než primárního uzlu, pokud stav clusteru není v pořádku, protože tím se cluster dál neruší. Použijeme podrobné šablony nasazení Azure použité v průvodci vertikálním navýšením kapacity primárního typu uzlu clusteru Service Fabric. Upravíme je ale tak, aby byly specifické pro primární typy uzlů. Šablony jsou k dispozici na GitHubu.
Nastavení testovacího clusteru
Pojďme nastavit počáteční testovací cluster Service Fabric. Nejprve si stáhněte ukázkové šablony Azure Resource Manageru, které použijeme k dokončení tohoto scénáře.
Pak se přihlaste ke svému účtu Azure.
# Sign in to your Azure account
Login-AzAccount -SubscriptionId "<subscription ID>"
Potom otevřete soubor parameters.json a aktualizujte hodnotu clusterName
na něco jedinečného (v rámci Azure).
Následující příkazy vás provedou generováním nového certifikátu podepsaného svým držitelem a nasazením testovacího clusteru. Pokud už máte certifikát, který chcete použít, přeskočte na Použití existujícího certifikátu k nasazení clusteru.
Vygenerování certifikátu podepsaného svým držitelem a nasazení clusteru
Nejprve přiřaďte proměnné, které budete potřebovat pro nasazení clusteru Service Fabric. Upravte hodnoty pro resourceGroupName
, certSubjectName
, parameterFilePath
a templateFilePath
pro konkrétní účet a prostředí:
# 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"
Poznámka:
Před spuštěním příkazu pro nasazení nového clusteru Service Fabric se ujistěte, že certOutputFolder
umístění existuje na místním počítači.
Pak nasaďte testovací cluster Service Fabric:
# Deploy the initial test cluster
New-AzServiceFabricCluster `
-ResourceGroupName $resourceGroupName `
-CertificateOutputFolder $certOutputFolder `
-CertificatePassword $certPassword `
-CertificateSubjectName $certSubjectName `
-TemplateFile $templateFilePath `
-ParameterFile $parameterFilePath
Po dokončení nasazení vyhledejte soubor .pfx ($certPfx
) na místním počítači a naimportujte ho do úložiště certifikátů:
cd c:\certificates
$certPfx = ".\sftestupgradegroup20200312121003.pfx"
Import-PfxCertificate `
-FilePath $certPfx `
-CertStoreLocation Cert:\CurrentUser\My `
-Password (ConvertTo-SecureString Password!1 -AsPlainText -Force)
Operace vrátí kryptografický otisk certifikátu, který teď můžete použít k připojení k novému clusteru a zkontrolovat jeho stav. (Přeskočte následující část, což je alternativní přístup k nasazení clusteru.)
Nasazení clusteru pomocí existujícího certifikátu
Případně můžete k nasazení testovacího clusteru použít existující certifikát služby Azure Key Vault. K tomu budete muset získat odkazy na službu Key Vault a kryptografický otisk certifikátu.
# Key Vault variables
$certUrlValue = "https://sftestupgradegroup.vault.azure.net/secrets/sftestupgradegroup20200309235308/dac0e7b7f9d4414984ccaa72bfb2ea39"
$sourceVaultValue = "/subscriptions/########-####-####-####-############/resourceGroups/sftestupgradegroup/providers/Microsoft.KeyVault/vaults/sftestupgradegroup"
$thumb = "BB796AA33BD9767E7DA27FE5182CF8FDEE714A70"
Dále určete název skupiny prostředků pro cluster a nastavte umístěnítemplateFilePath
:parameterFilePath
Poznámka:
Určená skupina prostředků už musí existovat a být umístěná ve stejné oblasti jako vaše služba Key Vault.
$resourceGroupName = "sftestupgradegroup"
$templateFilePath = "C:\Initial-TestClusterSetup.json"
$parameterFilePath = "C:\parameters.json"
Nakonec spuštěním následujícího příkazu nasaďte počáteční testovací cluster:
# Deploy the initial test cluster
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-TemplateFile $templateFilePath `
-TemplateParameterFile $parameterFilePath `
-CertificateThumbprint $thumb `
-CertificateUrlValue $certUrlValue `
-SourceVaultValue $sourceVaultValue `
-Verbose
Připojení k novému clusteru a kontrola stavu
Připojte se ke clusteru a ujistěte se, že je všech pět uzlů v pořádku (nahraďte clusterName
thumb
je vlastními hodnotami):
# 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
S tím jsme připraveni zahájit postup upgradu.
Nasazení nového neprimárního typu uzlu s upgradovanou škálovací sadou
Aby bylo možné upgradovat (vertikálně škálovat) typ uzlu, musíme nejprve nasadit nový typ uzlu, který je založený na nové škálovací sadě a podpůrných prostředcích. Nová škálovací sada se označí jako neprimární (isPrimary: false
), stejně jako původní škálovací sada. Pokud chcete vertikálně navýšit kapacitu primárního typu uzlu, přečtěte si téma Vertikální navýšení kapacity primárního typu uzlu clusteru Service Fabric. Prostředky vytvořené v následující části se nakonec stanou novým typem uzlu v clusteru a původní prostředky typu uzlu budou odstraněny.
Aktualizace šablony clusteru pomocí upgradované škálovací sady
Tady jsou úpravy oddílů původní šablony nasazení clusteru pro přidání nového typu uzlu a podpůrných prostředků.
Většina požadovaných změn pro tento krok už byla provedena v souboru šablony Step1-AddPrimaryNodeType.json. Je však nutné provést další změnu, aby soubor šablony fungoval pro jiné než primární typy uzlů. V následujících částech jsou tyto změny podrobně vysvětleny a popisky budou provedeny, když je nutné provést změnu.
Poznámka:
Ujistěte se, že používáte názvy, které jsou jedinečné z původního typu uzlu, škálovací sady, nástroje pro vyrovnávání zatížení, veřejné IP adresy a podsítě původního neprimárního typu uzlu, protože tyto prostředky budou v pozdějším kroku procesu odstraněny.
Vytvoření nové podsítě v existující virtuální síti
{
"name": "[variables('subnet1Name')]",
"properties": {
"addressPrefix": "[variables('subnet1Prefix')]"
}
}
Vytvoření nové veřejné IP adresy s jedinečným názvem 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')]"
}
}
Vytvoření nového nástroje pro vyrovnávání zatížení pro veřejnou IP adresu
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/',concat(variables('lbIPName'),'-',variables('vmNodeType1Name')))]"
]
Vytvoření nové škálovací sady virtuálních počítačů (s upgradovanými skladovými jednotkami virtuálního počítače a SKU operačního systému)
Odkaz typu uzlu
"nodeTypeRef": "[variables('vmNodeType1Name')]"
Skladová položka virtuálního počítače
"sku": {
"name": "[parameters('vmNodeType1Size')]",
"capacity": "[parameters('nt1InstanceCount')]",
"tier": "Standard"
}
Skladová položka operačního systému
"imageReference": {
"publisher": "[parameters('vmImagePublisher1')]",
"offer": "[parameters('vmImageOffer1')]",
"sku": "[parameters('vmImageSku1')]",
"version": "[parameters('vmImageVersion1')]"
}
Také se ujistěte, že zahrnete všechna další rozšíření, která jsou potřebná pro vaši úlohu.
Přidání nového neprimárního typu uzlu do clusteru
Teď, když má nový typ uzlu (vmNodeType1Name) vlastní název, podsíť, IP adresu, nástroj pro vyrovnávání zatížení a škálovací sadu, může znovu použít všechny ostatní proměnné z původního typu uzlu (například nt0applicationEndPort
, nt0applicationStartPort
a nt0fabricTcpGatewayPort
).
V existujícím souboru isPrimary
šablony je parametr nastavený na true
průvodce vertikálním navýšením kapacity primárního typu uzlu clusteru Service Fabric. Změňte isPrimary
typ false
neprimárního uzlu:
"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": false,
"reverseProxyEndpointPort": "[variables('nt0reverseProxyEndpointPort')]",
"vmInstanceCount": "[parameters('nt1InstanceCount')]"
Po implementaci všech změn v šabloně a souborech parametrů přejděte k další části a získejte odkazy na key Vault a nasaďte aktualizace do clusteru.
Získání odkazů na službu Key Vault
Pokud chcete nasadit aktualizovanou konfiguraci, budete potřebovat několik odkazů na certifikát clusteru uložený ve službě Key Vault. Nejjednodušší způsob, jak tyto hodnoty najít, je prostřednictvím webu Azure Portal. Budete potřebovat:
Adresa URL služby Key Vault vašeho certifikátu clusteru. Ve službě Key Vault na webu Azure Portal vyberte Certifikáty>, u které jste zvolili identifikátor tajného klíče požadovaného certifikátu:>
$certUrlValue="https://sftestupgradegroup.vault.azure.net/secrets/sftestupgradegroup20200309235308/dac0e7b7f9d4414984ccaa72bfb2ea39"
Kryptografický otisk certifikátu clusteru. (Pravděpodobně už to máte, pokud jste se připojili k počátečnímu clusteru a zkontrolovali jeho stav.) Ve stejném okně certifikátu (certifikáty>, které jste si přáli) na webu Azure Portal zkopírujte kryptografický otisk X.509 SHA-1 (v šestnáctkovém formátu):
$thumb = "BB796AA33BD9767E7DA27FE5182CF8FDEE714A70"
ID prostředku služby Key Vault. Ve službě Key Vault na webu Azure Portal vyberte ID prostředku Vlastnosti>:
$sourceVaultValue = "/subscriptions/########-####-####-####-############/resourceGroups/sftestupgradegroup/providers/Microsoft.KeyVault/vaults/sftestupgradegroup"
Nasazení aktualizované šablony
templateFilePath
Podle potřeby upravte a spusťte následující příkaz:
# 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
Po dokončení nasazení znovu zkontrolujte stav clusteru a ujistěte se, že jsou všechny uzly v obou typech uzlů v pořádku.
Get-ServiceFabricClusterHealth
Migrace úloh na nový typ uzlu
Počkejte, až se všechny aplikace přesunou na nový typ uzlu a budou v pořádku.
Zakázání uzlů ve škálovací sadě původního typu uzlu
Po migraci všech počátečních uzlů do nové škálovací sady můžete zakázat uzly původní škálovací sady.
# 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
}
}
Pomocí Service Fabric Exploreru můžete monitorovat průběh uzlů v původní škálovací sadě z zakázání na zakázaný stav. Počkejte, až se všechny uzly dostanou do zakázaného stavu.
Zastavení dat na zakázaných uzlech
Teď můžete zastavit data na zakázaných uzlech.
# 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
}
}
Odebrání původního typu uzlu a vyčištění prostředků
Jsme připraveni odebrat původní typ uzlu a jeho přidružené prostředky k závěru postupu vertikálního škálování.
Odebrání původní škálovací sady
Nejprve odeberte backingovou škálovací sadu typu uzlu.
$scaleSetName = "nt0vm"
$scaleSetResourceType = "Microsoft.Compute/virtualMachineScaleSets"
Remove-AzResource -ResourceName $scaleSetName -ResourceType $scaleSetResourceType -ResourceGroupName $resourceGroupName -Force
Odstranění původní IP adresy a prostředků nástroje pro vyrovnávání zatížení
Teď můžete odstranit původní IP adresu a prostředky nástroje pro vyrovnávání zatížení. V tomto kroku také aktualizujete název DNS.
Poznámka:
Tento krok je volitelný, pokud už používáte veřejnou IP adresu skladové položky Standard a nástroj pro vyrovnávání zatížení. V takovém případě můžete mít ve stejném nástroji pro vyrovnávání zatížení více typů škálovacích sad nebo uzlů.
Spusťte následující příkazy a upravte $lbname
hodnotu podle potřeby.
# 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"
$oldPublicIP = Get-AzPublicIpAddress -Name $oldPublicIpName -ResourceGroupName $resourceGroupName
$nonPrimaryDNSName = $oldNonPrimaryPublicIP.DnsSettings.DomainNameLabel
$nonPrimaryDNSFqdn = $oldNonPrimaryPublicIP.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 = $nonPrimaryDNSName
$PublicIP.DnsSettings.Fqdn = $nonPrimaryDNSFqdn
Set-AzPublicIpAddress -PublicIpAddress $PublicIP
Odebrání stavu uzlu z původního typu uzlu
U uzlů typu původního uzlu se teď zobrazí chyba pro jejich stav. Odeberte stav uzlu z clusteru.
# 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 by teď měl odrážet pouze pět uzlů nového typu uzlu (nt1vm), a to vše s hodnotami stavu OK. Tento postup opravíme tak, že šablonu aktualizujeme tak, aby odrážela nejnovější změny a opětovné nasazení.
Aktualizace šablony nasazení tak, aby odrážela nově škálovaný typ neprimárního uzlu
Většina požadovaných změn pro tento krok už byla provedena v souboru šablony Step3-CleanupOriginalPrimaryNodeType.json. Je však nutné provést další změnu, aby soubor šablony fungoval pro jiné než primární typy uzlů. V následujících částech jsou tyto změny podrobně vysvětleny a popisky budou provedeny, když je nutné provést změnu.
Aktualizace koncového bodu správy clusteru
Aktualizujte cluster managementEndpoint
v šabloně nasazení tak, aby odkaz na novou IP adresu (aktualizací vmNodeType0Name pomocí vmNodeType1Name).
"managementEndpoint": "[concat('https://',reference(concat(variables('lbIPName'),'-',variables('vmNodeType1Name'))).dnsSettings.fqdn,':',variables('nt0fabricHttpGatewayPort'))]",
Odebrání odkazu na původní typ uzlu
Odeberte původní odkaz na typ uzlu z prostředku Service Fabric v šabloně nasazení.
V existujícím souboru isPrimary
šablony je parametr nastavený na true
průvodce vertikálním navýšením kapacity primárního typu uzlu clusteru Service Fabric. Změňte isPrimary
typ false
neprimárního uzlu:
"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": false,
"reverseProxyEndpointPort": "[variables('nt0reverseProxyEndpointPort')]",
"vmInstanceCount": "[parameters('nt0InstanceCount')]"
Konfigurace zásad stavu pro ignorování existujících chyb
Pouze pro clustery se stříbrnou a vyšší odolností aktualizujte prostředek clusteru v šabloně a nakonfigurujte zásady stavu tak, aby ignorovaly fabric:/System
stav aplikace přidáním applicationDeltaHealthPolicies do vlastností prostředků clusteru, jak je uvedeno níže. Následující zásada bude ignorovat existující chyby, ale nepovolí nové chyby stavu.
"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
}
}
}
}
}
Odebrání podpůrných prostředků pro původní typ uzlu
Odeberte všechny ostatní prostředky související s původním typem uzlu ze šablony ARM a souboru parametrů. Odstraňte následující:
"vmImagePublisher": {
"value": "MicrosoftWindowsServer"
},
"vmImageOffer": {
"value": "WindowsServer"
},
"vmImageSku": {
"value": "2019-Datacenter"
},
"vmImageVersion": {
"value": "latest"
},
Nasazení finalizované šablony
Nakonec nasaďte upravenou šablonu Azure Resource Manageru.
# Deploy the updated template file
$templateFilePath = "C:\Step3-CleanupOriginalPrimaryNodeType"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-TemplateFile $templateFilePath `
-TemplateParameterFile $parameterFilePath `
-CertificateThumbprint $thumb `
-CertificateUrlValue $certUrlValue `
-SourceVaultValue $sourceVaultValue `
-Verbose
Poznámka:
Tento krok bude chvíli trvat, obvykle až dvě hodiny.
Upgrade změní nastavení služby InfrastructureService, proto je potřeba restartovat uzel. V tomto případě se forceRestart ignoruje. upgradeReplicaSetCheckTimeout
Parametr určuje maximální dobu, po kterou Service Fabric čeká na to, aby oddíl byl v bezpečném stavu, pokud ještě není v bezpečném stavu. Jakmile bezpečnostní kontroly projdou všechny oddíly na uzlu, Service Fabric pokračuje upgradem na daném uzlu. Hodnotu parametru upgradeTimeout
lze snížit na 6 hodin, ale pro maximální bezpečnost je třeba použít 12 hodin.
Po dokončení nasazení ověřte na webu Azure Portal, že je stav prostředku Service Fabric připravený. Ověřte, že se můžete připojit k novému koncovému bodu Service Fabric Exploreru, stav clusteru je v pořádku a všechny nasazené aplikace fungují správně.
Díky tomu jste vertikálně škálovali cluster, který není primárním typem uzlu.
Další kroky
- Zjistěte, jak přidat typ uzlu do clusteru.
- Seznamte se se škálovatelností aplikací.
- Horizontální navýšení nebo snížení kapacity clusteru Azure
- Škálování clusteru Azure prostřednictvím kódu programu pomocí fluent azure compute SDK
- Horizontální navýšení nebo snížení kapacity samostatného clusteru