Sdílet prostřednictvím


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:

  1. 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.

  2. 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.

  3. 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, parameterFilePatha 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, nt0applicationStartPorta 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