Kurz: Škálování clusteru Service Fabric v Azure

Tento kurz je třetí částí série a ukazuje, jak škálovat stávající cluster. Po dokončení budete vědět, jak škálovat cluster a jak vyčistit všechny zbylé prostředky. Další informace o škálování clusteru běžícího v Azure najdete v tématu Škálování clusterů Service Fabric.

V tomto kurzu se naučíte:

  • Přidání a odebrání uzlů (horizontální navýšení kapacity a horizontální navýšení kapacity)
  • Přidání a odebrání typů uzlů (horizontální navýšení kapacity a horizontální navýšení kapacity)
  • Zvýšení kapacity prostředků uzlů (vertikální navýšení kapacity)

V této sérii kurzů se naučíte:

Poznámka

K interakci s Azure doporučujeme použít modul Azure Az PowerShell. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Požadavky

Než začnete s tímto kurzem:

Důležité informace a pokyny

Úlohy aplikací se v průběhu času mění, potřebují vaše stávající služby více (nebo méně) prostředků? Přidáním nebo odebráním uzlů z typu uzlu zvýšíte nebo snížíte prostředky clusteru.

Potřebujete do clusteru přidat více než 100 uzlů? Jedna škálovací sada nebo typ uzlu Service Fabric nemůže obsahovat více než 100 uzlů nebo virtuálních počítačů. Pokud chcete škálovat cluster nad rámec 100 uzlů, přidejte další typy uzlů.

Má vaše aplikace více služeb a musí být některé z nich veřejné nebo připojené k internetu? Typické aplikace obsahují službu front-end brány, která přijímá vstup od klienta, a jednu nebo více back-endových služeb, které komunikují s front-endovými službami. V takovém případě doporučujeme do clusteru přidat aspoň dva typy uzlů .

Mají vaše služby jiné požadavky na infrastrukturu, například větší paměť RAM nebo vyšší cykly procesoru? Vaše aplikace například obsahuje front-endovou službu a back-endovou službu. Front-endová služba může běžet na menších virtuálních počítačích (velikosti virtuálních počítačů, jako je D2), které mají porty otevřené pro internet. Back-endová služba je však náročná na výpočty a musí běžet na větších virtuálních počítačích (s velikostmi virtuálních počítačů, jako jsou D4, D6, D15), které nejsou přístupné z internetu. V tomto případě doporučujeme přidat do clusteru dva nebo více typů uzlů . To umožňuje, aby každý typ uzlu měl odlišné vlastnosti, jako je připojení k internetu nebo velikost virtuálního počítače. Počet virtuálních počítačů je také možné škálovat nezávisle.

Při škálování clusteru Azure mějte na paměti následující pokyny:

  • Jedna škálovací sada nebo typ uzlu Service Fabric nemůže obsahovat více než 100 uzlů nebo virtuálních počítačů. Pokud chcete škálovat cluster nad rámec 100 uzlů, přidejte další typy uzlů.
  • Primární typy uzlů, na kterých běží produkční úlohy, by měly mít úroveň stálosti Gold nebo Silver a vždy by měly mít pět nebo více uzlů.
  • Typy neprimárních uzlů, na kterých běží stavové produkční úlohy, by měly mít vždy pět nebo více uzlů.
  • Typy neprimárních uzlů, na kterých běží bezstavové produkční úlohy, by měly mít vždy dva nebo více uzlů.
  • Každý typ uzlu úrovně stálosti gold nebo silver by měl mít vždy pět nebo více uzlů.
  • Pokud škálujete (odeberete uzly z) primárního typu uzlu, nikdy byste neměli snížit počet instancí na menší, než vyžaduje úroveň spolehlivosti .

Další informace najdete v pokynech ke kapacitě clusteru.

Vyexportování šablony pro skupinu prostředků

Po vytvoření zabezpečeného clusteru s Windows a úspěšném nastavení skupiny prostředků exportujte šablonu Resource Manager pro skupinu prostředků. Export šablony umožňuje automatizovat budoucí nasazení clusteru a jeho prostředků, protože šablona obsahuje veškerou kompletní infrastrukturu. Další informace o exportu šablon najdete v tématu Správa skupin prostředků Azure Resource Manager pomocí Azure Portal.

  1. V Azure Portal přejděte do skupiny prostředků obsahující cluster (sfclustertutorialgroup, pokud tento kurz sledujete).

  2. V levém podokně vyberte Nasazení nebo vyberte odkaz v části Nasazení.

  3. V seznamu vyberte nejnovější úspěšné nasazení.

  4. V levém podokně vyberte Šablona a pak vyberte Stáhnout , aby se šablona exportuje jako soubor ZIP. Uložte šablonu a parametry do místního počítače.

Přidání uzlů do nebo odebrání uzlů z typu uzlu

Horizontálním navýšením nebo horizontálním navýšením kapacity změníte počet uzlů v clusteru. Při horizontálním navýšení nebo snížení kapacity přidáte do škálovací sady další instance virtuálních počítačů. Tyto instance se stanou uzly, které bude Service Fabric používat. Service Fabric to pozná, když se do škálovací sady přidají další instance (díky horizontálnímu navýšení kapacity), a automaticky zareaguje. Cluster můžete škálovat kdykoli, i když jsou v clusteru spuštěné úlohy.

Aktualizace šablony

Exportujte šablonu a soubor parametrů ze skupiny prostředků pro nejnovější nasazení. Otevřete soubor parameters.json . Pokud jste cluster nasadili pomocí ukázkové šablony v tomto kurzu, existují tři typy uzlů v clusteru a tři parametry, které nastavují počet uzlů pro každý typ uzlu: nt0InstanceCount, nt1InstanceCount a nt2InstanceCount. Parametr nt1InstanceCount například nastaví počet instancí pro druhý typ uzlu a nastaví počet virtuálních počítačů v přidružené škálovací sadě virtuálních počítačů.

Takže aktualizací hodnoty nt1InstanceCount změníte počet uzlů v druhém typu uzlu. Nezapomeňte, že typ uzlu nemůžete škálovat na více než 100 uzlů. Typy neprimárních uzlů, na kterých běží stavové produkční úlohy, by měly mít vždy pět nebo více uzlů. Typy neprimárních uzlů, na kterých běží bezstavové produkční úlohy, by měly mít vždy dva nebo více uzlů.

Pokud škálujete a odebíráte uzly z, typ uzlu s úrovní odolnosti Bronzová, musíte ručně odebrat stav těchto uzlů. U úrovní odolnosti Silver a Gold provádí tyto kroky automaticky platforma.

Nasazení aktualizované šablony

Uložte všechny změny do souborů template.json a parameters.json . Pokud chcete nasadit aktualizovanou šablonu, spusťte následující příkaz:

New-AzResourceGroupDeployment -ResourceGroupName sfclustertutorialgroup -TemplateFile c:\temp\template.json -TemplateParameterFile c:\temp\parameters.json -Name "ChangingInstanceCount"

Nebo následující příkaz Azure CLI:

az deployment group create --resource-group sfclustertutorialgroup --template-file c:\temp\template.json --parameters c:\temp\parameters.json

Přidání typu uzlu do clusteru

Každý typ uzlu, který je definovaný v clusteru Service Fabric spuštěném v Azure, je nastavený jako samostatná škálovací sada virtuálních počítačů. Každý typ uzlu je pak možné spravovat samostatně. Každý typ uzlu můžete nezávisle škálovat nahoru nebo dolů, mít otevřené různé sady portů a používat různé metriky kapacity. Můžete také nezávisle změnit skladovou položku operačního systému spuštěnou na každém uzlu clusteru, ale v ukázkovém clusteru nemůžete mít spuštěnou kombinaci Windows a Linuxu. Jeden typ uzlu nebo škálovací sada nesmí obsahovat více než 100 uzlů. Přidáním dalších typů uzlů nebo škálovacích sad můžete cluster horizontálně škálovat na více než 100 uzlů. Cluster můžete škálovat kdykoli, i když jsou v clusteru spuštěné úlohy.

Aktualizace šablony

Exportujte šablonu a soubor parametrů ze skupiny prostředků pro nejnovější nasazení. Otevřete soubor parameters.json . Pokud jste cluster nasadili pomocí ukázkové šablony v tomto kurzu, existují v clusteru tři typy uzlů. V této části přidáte čtvrtý typ uzlu aktualizací a nasazením šablony Resource Manager.

Kromě nového typu uzlu přidáte také přidruženou škálovací sadu virtuálních počítačů (která běží v samostatné podsíti virtuální sítě) a skupinu zabezpečení sítě. Pro novou škálovací sadu můžete přidat novou nebo existující veřejnou IP adresu a prostředky nástroje pro vyrovnávání zatížení Azure. Nový typ uzlu má úroveň stálosti Silver a velikost "Standard_D2_V2".

Do souboru template.json přidejte následující nové parametry:

"nt3InstanceCount": {
    "defaultValue": 5,
    "type": "Int",
    "metadata": {
        "description": "Instance count for node type"
    }
},
"vmNodeType3Size": {
    "defaultValue": "Standard_D2_V2",
    "type": "String"
},

Do souboru template.json přidejte následující nové proměnné:

"lbID3": "[resourceId('Microsoft.Network/loadBalancers',concat('LB','-', parameters('clusterName'),'-',variables('vmNodeType3Name')))]",
"lbIPConfig3": "[concat(variables('lbID3'),'/frontendIPConfigurations/LoadBalancerIPConfig')]",
"lbPoolID3": "[concat(variables('lbID3'),'/backendAddressPools/LoadBalancerBEAddressPool')]",
"lbProbeID3": "[concat(variables('lbID3'),'/probes/FabricGatewayProbe')]",
"lbHttpProbeID3": "[concat(variables('lbID3'),'/probes/FabricHttpGatewayProbe')]",
"lbNatPoolID3": "[concat(variables('lbID3'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]",
"vmNodeType3Name": "[toLower(concat('NT4', variables('vmName')))]",
"vmStorageAccountName3": "[toLower(concat(uniqueString(resourceGroup().id), '1', '3' ))]",
"nt3applicationStartPort": "20000",
"nt3applicationEndPort": "30000",
"nt3ephemeralStartPort": "49152",
"nt3ephemeralEndPort": "65534",
"nt3fabricTcpGatewayPort": "19000",
"nt3fabricHttpGatewayPort": "19080",
"nt3reverseProxyEndpointPort": "19081",
"subnet3Name": "Subnet-3",
"subnet3Prefix": "10.0.3.0/24",
"subnet3Ref": "[concat(variables('vnetID'),'/subnets/',variables('subnet3Name'))]",

Do souboru template.json přidejte do prostředku virtuální sítě novou podsíť:

{
    "type": "Microsoft.Network/virtualNetworks",
    "name": "[variables('virtualNetworkName')]",
    "apiVersion": "2018-08-01",
    "location": "[variables('computeLocation')]",
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    },
    "properties": {
        "addressSpace": {
            "addressPrefixes": [
                "[variables('addressPrefix')]"
            ]
        },
        "subnets": [
            ...
            {
                "name": "[variables('subnet3Name')]",
                "properties": {
                    "addressPrefix": "[variables('subnet3Prefix')]",
                    "networkSecurityGroup": {
                        "id": "[resourceId('Microsoft.Network/networkSecurityGroups', concat('nsg', variables('subnet3Name')))]"
                    }
                }
            }
        ]
    },
    "dependsOn": [
        ...
        "[concat('Microsoft.Network/networkSecurityGroups/', concat('nsg', variables('subnet3Name')))]"
    ]
},

Do souboru template.json přidejte novou veřejnou IP adresu a prostředky nástroje pro vyrovnávání zatížení:

{
    "type": "Microsoft.Network/publicIPAddresses",
    "name": "[concat(variables('lbIPName'),'-',variables('vmNodeType3Name'))]",
    "apiVersion": "2018-08-01",
    "location": "[variables('computeLocation')]",
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    },
    "properties": {
        "dnsSettings": {
            "domainNameLabel": "[concat(variables('dnsName'),'-','nt4')]"
        },
        "publicIPAllocationMethod": "Dynamic"
    }
},
        {
    "type": "Microsoft.Network/loadBalancers",
    "name": "[concat('LB','-', parameters('clusterName'),'-',variables('vmNodeType3Name'))]",
    "apiVersion": "2018-08-01",
    "location": "[variables('computeLocation')]",
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    },
    "properties": {
        "frontendIPConfigurations": [
            {
                "name": "LoadBalancerIPConfig",
                "properties": {
                    "publicIPAddress": {
                        "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(variables('lbIPName'),'-',variables('vmNodeType3Name')))]"
                    }
                }
            }
        ],
        "backendAddressPools": [
            {
                "name": "LoadBalancerBEAddressPool",
                "properties": {}
            }
        ],
        "loadBalancingRules": [
            {
                "name": "LBRule",
                "properties": {
                    "backendAddressPool": {
                        "id": "[variables('lbPoolID3')]"
                    },
                    "backendPort": "[variables('nt3fabricTcpGatewayPort')]",
                    "enableFloatingIP": "false",
                    "frontendIPConfiguration": {
                        "id": "[variables('lbIPConfig3')]"
                    },
                    "frontendPort": "[variables('nt3fabricTcpGatewayPort')]",
                    "idleTimeoutInMinutes": "5",
                    "probe": {
                        "id": "[variables('lbProbeID3')]"
                    },
                    "protocol": "tcp"
                }
            },
            {
                "name": "LBHttpRule",
                "properties": {
                    "backendAddressPool": {
                        "id": "[variables('lbPoolID3')]"
                    },
                    "backendPort": "[variables('nt3fabricHttpGatewayPort')]",
                    "enableFloatingIP": "false",
                    "frontendIPConfiguration": {
                        "id": "[variables('lbIPConfig3')]"
                    },
                    "frontendPort": "[variables('nt3fabricHttpGatewayPort')]",
                    "idleTimeoutInMinutes": "5",
                    "probe": {
                        "id": "[variables('lbHttpProbeID3')]"
                    },
                    "protocol": "tcp"
                }
            },
            {
                "name": "AppPortLBRule1",
                "properties": {
                    "backendAddressPool": {
                        "id": "[variables('lbPoolID3')]"
                    },
                    "backendPort": "[parameters('loadBalancedAppPort1')]",
                    "enableFloatingIP": "false",
                    "frontendIPConfiguration": {
                        "id": "[variables('lbIPConfig3')]"
                    },
                    "frontendPort": "[parameters('loadBalancedAppPort1')]",
                    "idleTimeoutInMinutes": "5",
                    "probe": {
                        "id": "[concat(variables('lbID3'),'/probes/AppPortProbe1')]"
                    },
                    "protocol": "tcp"
                }
            },
            {
                "name": "AppPortLBRule2",
                "properties": {
                    "backendAddressPool": {
                        "id": "[variables('lbPoolID3')]"
                    },
                    "backendPort": "[parameters('loadBalancedAppPort2')]",
                    "enableFloatingIP": "false",
                    "frontendIPConfiguration": {
                        "id": "[variables('lbIPConfig3')]"
                    },
                    "frontendPort": "[parameters('loadBalancedAppPort2')]",
                    "idleTimeoutInMinutes": "5",
                    "probe": {
                        "id": "[concat(variables('lbID3'),'/probes/AppPortProbe2')]"
                    },
                    "protocol": "tcp"
                }
            }
        ],
        "probes": [
            {
                "name": "FabricGatewayProbe",
                "properties": {
                    "intervalInSeconds": 5,
                    "numberOfProbes": 2,
                    "port": "[variables('nt3fabricTcpGatewayPort')]",
                    "protocol": "tcp"
                }
            },
            {
                "name": "FabricHttpGatewayProbe",
                "properties": {
                    "intervalInSeconds": 5,
                    "numberOfProbes": 2,
                    "port": "[variables('nt3fabricHttpGatewayPort')]",
                    "protocol": "tcp"
                }
            },
            {
                "name": "AppPortProbe1",
                "properties": {
                    "intervalInSeconds": 5,
                    "numberOfProbes": 2,
                    "port": "[parameters('loadBalancedAppPort1')]",
                    "protocol": "tcp"
                }
            },
            {
                "name": "AppPortProbe2",
                "properties": {
                    "intervalInSeconds": 5,
                    "numberOfProbes": 2,
                    "port": "[parameters('loadBalancedAppPort2')]",
                    "protocol": "tcp"
                }
            }
        ],
        "inboundNatPools": [
            {
                "name": "LoadBalancerBEAddressNatPool",
                "properties": {
                    "backendPort": "3389",
                    "frontendIPConfiguration": {
                        "id": "[variables('lbIPConfig3')]"
                    },
                    "frontendPortRangeEnd": "4500",
                    "frontendPortRangeStart": "3389",
                    "protocol": "tcp"
                }
            }
        ]
    },
    "dependsOn": [
        "[concat('Microsoft.Network/publicIPAddresses/',concat(variables('lbIPName'),'-',variables('vmNodeType3Name')))]"
    ]
},

Do souboru template.json přidejte novou skupinu zabezpečení sítě a prostředky škálovací sady virtuálních počítačů. Vlastnost NodeTypeRef ve vlastnostech rozšíření Service Fabric škálovací sady virtuálních počítačů mapuje zadaný typ uzlu na škálovací sadu.

{
    "type": "Microsoft.Network/networkSecurityGroups",
    "name": "[concat('nsg', variables('subnet3Name'))]",
    "apiVersion": "2018-08-01",
    "location": "[resourceGroup().location]",
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    },
    "properties": {
        "securityRules": [
            {
                "name": "allowSvcFabSMB",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "445",
                    "direction": "Inbound",
                    "priority": 3950,
                    "protocol": "*",
                    "sourceAddressPrefix": "VirtualNetwork",
                    "sourcePortRange": "*",
                    "description": "allow SMB traffic within the net, used by fabric to move packages around"
                }
            },
            {
                "name": "allowSvcFabCluser",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "1025-1027",
                    "direction": "Inbound",
                    "priority": 3920,
                    "protocol": "*",
                    "sourceAddressPrefix": "VirtualNetwork",
                    "sourcePortRange": "*",
                    "description": "allow ports within vnet that are used by the fabric to talk between nodes"
                }
            },
            {
                "name": "allowSvcFabEphemeral",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "[concat(variables('nt3ephemeralStartPort'), '-', variables('nt3ephemeralEndPort'))]",
                    "direction": "Inbound",
                    "priority": 3930,
                    "protocol": "*",
                    "sourceAddressPrefix": "VirtualNetwork",
                    "sourcePortRange": "*",
                    "description": "allow fabric ephemeral ports within the vnet"
                }
            },
            {
                "name": "allowSvcFabPortal",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "[variables('nt3fabricHttpGatewayPort')]",
                    "direction": "Inbound",
                    "priority": 3900,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "allow port used to access the fabric cluster web portal"
                }
            },
            {
                "name": "allowSvcFabClient",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "[variables('nt3fabricTcpGatewayPort')]",
                    "direction": "Inbound",
                    "priority": 3910,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "allow port used by the fabric client (includes powershell)"
                }
            },
            {
                "name": "allowSvcFabApplication",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "[concat(variables('nt3applicationStartPort'), '-', variables('nt3applicationEndPort'))]",
                    "direction": "Inbound",
                    "priority": 3940,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "allow fabric application ports within the vnet"
                }
            },
            {
                "name": "blockAll",
                "properties": {
                    "access": "Deny",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "*",
                    "direction": "Inbound",
                    "priority": 4095,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "block all traffic except what we've explicitly allowed"
                }
            },
            {
                "name": "allowVNetRDP",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "3389",
                    "direction": "Inbound",
                    "priority": 3960,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "allow RDP within the net"
                }
            },
            {
                "name": "allowSvcFabReverseProxy",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "[variables('nt3reverseProxyEndpointPort')]",
                    "direction": "Inbound",
                    "priority": 3980,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "allow port used to access the fabric cluster using reverse proxy"
                }
            },
            {
                "name": "allowAppPort1",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "[parameters('loadBalancedAppPort1')]",
                    "direction": "Inbound",
                    "priority": 2001,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "allow public application port 1"
                }
            },
            {
                "name": "allowAppPort2",
                "properties": {
                    "access": "Allow",
                    "destinationAddressPrefix": "*",
                    "destinationPortRange": "[parameters('loadBalancedAppPort2')]",
                    "direction": "Inbound",
                    "priority": 2002,
                    "protocol": "*",
                    "sourceAddressPrefix": "*",
                    "sourcePortRange": "*",
                    "description": "allow public application port 2"
                }
            }
        ]
    }
},
{
    "type": "Microsoft.Compute/virtualMachineScaleSets",
    "sku": {
        "name": "[parameters('vmNodeType3Size')]",
        "capacity": "[parameters('nt3InstanceCount')]",
        "tier": "Standard"
    },
    "name": "[variables('vmNodeType3Name')]",
    "apiVersion": "2018-10-01",
    "location": "[variables('computeLocation')]",
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    },
    "properties": {
        "overprovision": "[variables('overProvision')]",
        "upgradePolicy": {
            "mode": "Automatic"
        },
        "virtualMachineProfile": {
            "extensionProfile": {
                "extensions": [
                    {
                        "name": "[concat(variables('vmNodeType3Name'),'OMS')]",
                        "properties": {
                            "publisher": "Microsoft.EnterpriseCloud.Monitoring",
                            "type": "MicrosoftMonitoringAgent",
                            "typeHandlerVersion": "1.0",
                            "autoUpgradeMinorVersion": true,
                            "settings": {
                                "workspaceId": "[reference(resourceId('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename')), '2015-11-01-preview').customerId]"
                            },
                            "protectedSettings": {
                                "workspaceKey": "[listKeys(resourceId('Microsoft.OperationalInsights/workspaces/', parameters('omsWorkspacename')),'2015-11-01-preview').primarySharedKey]"
                            }
                        }
                    },
                    {
                        "name": "[concat('ServiceFabricNodeVmExt','_vmNodeType3Name')]",
                        "properties": {
                            "type": "ServiceFabricNode",
                            "autoUpgradeMinorVersion": true,
                            "protectedSettings": {
                                "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
                                "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
                            },
                            "publisher": "Microsoft.Azure.ServiceFabric",
                            "settings": {
                                "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
                                "nodeTypeRef": "[variables('vmNodeType3Name')]",
                                "dataPath": "D:\\SvcFab",
                                "durabilityLevel": "Silver",
                                "enableParallelJobs": true,
                                "nicPrefixOverride": "[variables('subnet3Prefix')]",
                                "certificate": {
                                    "thumbprint": "[parameters('certificateThumbprint')]",
                                    "x509StoreName": "[parameters('certificateStoreValue')]"
                                }
                            },
                            "typeHandlerVersion": "1.0"
                        }
                    },
                    {
                        "name": "[concat('VMDiagnosticsVmExt','_vmNodeType3Name')]",
                        "properties": {
                            "type": "IaaSDiagnostics",
                            "autoUpgradeMinorVersion": true,
                            "protectedSettings": {
                                "storageAccountName": "[variables('applicationDiagnosticsStorageAccountName')]",
                                "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
                                "storageAccountEndPoint": "https://core.windows.net/"
                            },
                            "publisher": "Microsoft.Azure.Diagnostics",
                            "settings": {
                                "WadCfg": {
                                    "DiagnosticMonitorConfiguration": {
                                        "overallQuotaInMB": "50000",
                                        "EtwProviders": {
                                            "EtwEventSourceProviderConfiguration": [
                                                {
                                                    "provider": "Microsoft-ServiceFabric-Actors",
                                                    "scheduledTransferKeywordFilter": "1",
                                                    "scheduledTransferPeriod": "PT5M",
                                                    "DefaultEvents": {
                                                        "eventDestination": "ServiceFabricReliableActorEventTable"
                                                    }
                                                },
                                                {
                                                    "provider": "Microsoft-ServiceFabric-Services",
                                                    "scheduledTransferPeriod": "PT5M",
                                                    "DefaultEvents": {
                                                        "eventDestination": "ServiceFabricReliableServiceEventTable"
                                                    }
                                                }
                                            ],
                                            "EtwManifestProviderConfiguration": [
                                                {
                                                    "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                                                    "scheduledTransferLogLevelFilter": "Information",
                                                    "scheduledTransferKeywordFilter": "4611686018427387904",
                                                    "scheduledTransferPeriod": "PT5M",
                                                    "DefaultEvents": {
                                                        "eventDestination": "ServiceFabricSystemEventTable"
                                                    }
                                                }
                                            ]
                                        }
                                    }
                                },
                                "StorageAccount": "[variables('applicationDiagnosticsStorageAccountName')]"
                            },
                            "typeHandlerVersion": "1.5"
                        }
                    },
                    {
                        "name": "[concat('VMIaaSAntimalware','_vmNodeType3Name')]",
                        "properties": {
                            "publisher": "Microsoft.Azure.Security",
                            "type": "IaaSAntimalware",
                            "typeHandlerVersion": "1.5",
                            "settings": {
                                "AntimalwareEnabled": "true",
                                "Exclusions": {
                                    "Paths": "D:\\SvcFab;D:\\SvcFab\\Log;C:\\Program Files\\Microsoft Service Fabric",
                                    "Processes": "Fabric.exe;FabricHost.exe;FabricInstallerService.exe;FabricSetup.exe;FabricDeployer.exe;ImageBuilder.exe;FabricGateway.exe;FabricDCA.exe;FabricFAS.exe;FabricUOS.exe;FabricRM.exe;FileStoreService.exe"
                                },
                                "RealtimeProtectionEnabled": "true",
                                "ScheduledScanSettings": {
                                    "isEnabled": "true",
                                    "scanType": "Quick",
                                    "day": "7",
                                    "time": "120"
                                }
                            },
                            "protectedSettings": null
                        }
                    }
                ]
            },
            "networkProfile": {
                "networkInterfaceConfigurations": [
                    {
                        "name": "[concat(variables('nicName'), '-2')]",
                        "properties": {
                            "ipConfigurations": [
                                {
                                    "name": "[concat(variables('nicName'),'-',2)]",
                                    "properties": {
                                        "loadBalancerBackendAddressPools": [
                                            {
                                                "id": "[variables('lbPoolID3')]"
                                            }
                                        ],
                                        "loadBalancerInboundNatPools": [
                                            {
                                                "id": "[variables('lbNatPoolID3')]"
                                            }
                                        ],
                                        "subnet": {
                                            "id": "[variables('subnet3Ref')]"
                                        }
                                    }
                                }
                            ],
                            "primary": true
                        }
                    }
                ]
            },
            "osProfile": {
                "adminPassword": "[parameters('adminPassword')]",
                "adminUsername": "[parameters('adminUsername')]",
                "computernamePrefix": "[variables('vmNodeType3Name')]",
                "secrets": [
                    {
                        "sourceVault": {
                            "id": "[parameters('sourceVaultValue')]"
                        },
                        "vaultCertificates": [
                            {
                                "certificateStore": "[parameters('certificateStoreValue')]",
                                "certificateUrl": "[parameters('certificateUrlValue')]"
                            }
                        ]
                    }
                ]
            },
            "storageProfile": {
                "imageReference": {
                    "publisher": "[parameters('vmImagePublisher')]",
                    "offer": "[parameters('vmImageOffer')]",
                    "sku": "[parameters('vmImageSku')]",
                    "version": "[parameters('vmImageVersion')]"
                },
                "osDisk": {
                    "caching": "ReadOnly",
                    "createOption": "FromImage",
                    "managedDisk": {
                        "storageAccountType": "[parameters('storageAccountType')]"
                    }
                }
            }
        }
    },
    "dependsOn": [
        "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]",
        "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',variables('vmNodeType3Name')))]",
        "[concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName'))]",
        "[concat('Microsoft.Storage/storageAccounts/', variables('applicationDiagnosticsStorageAccountName'))]"
    ]
},

V souboru template.json aktualizujte prostředek clusteru a přidejte nový typ uzlu:

{
    "type": "Microsoft.ServiceFabric/clusters",
    "name": "[parameters('clusterName')]",
    "apiVersion": "2018-02-01",
    "location": "[parameters('clusterLocation')]",
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    },
    "properties": {
        "nodeTypes": [
            ...
            {
                "name": "[variables('vmNodeType3Name')]",
                "applicationPorts": {
                    "endPort": "[variables('nt3applicationEndPort')]",
                    "startPort": "[variables('nt3applicationStartPort')]"
                },
                "clientConnectionEndpointPort": "[variables('nt3fabricTcpGatewayPort')]",
                "durabilityLevel": "Silver",
                "ephemeralPorts": {
                    "endPort": "[variables('nt3ephemeralEndPort')]",
                    "startPort": "[variables('nt3ephemeralStartPort')]"
                },
                "httpGatewayEndpointPort": "[variables('nt3fabricHttpGatewayPort')]",
                "isPrimary": false,
                "reverseProxyEndpointPort": "[variables('nt3reverseProxyEndpointPort')]",
                "vmInstanceCount": "[parameters('nt3InstanceCount')]"
            }
        ],    
    }
}                

Do souboru parameters.json přidejte následující nové parametry a hodnoty:

"nt3InstanceCount": {
    "Value": 5    
},
"vmNodeType3Size": {
    "Value": "Standard_D2_V2"
},

Nasazení aktualizované šablony

Uložte všechny změny do souborů template.json a parameters.json . Pokud chcete nasadit aktualizovanou šablonu, spusťte následující příkaz:

New-AzResourceGroupDeployment -ResourceGroupName sfclustertutorialgroup -TemplateFile c:\temp\template.json -TemplateParameterFile c:\temp\parameters.json -Name "AddingNodeType"

Nebo následující příkaz Azure CLI:

az deployment group create --resource-group sfclustertutorialgroup --template-file c:\temp\template.json --parameters c:\temp\parameters.json

Odebrání typu uzlu z clusteru

Po vytvoření clusteru Service Fabric můžete cluster horizontálně škálovat odebráním typu uzlu (škálovací sady virtuálních počítačů) a všech jeho uzlů. Cluster můžete škálovat kdykoli, i když jsou v clusteru spuštěné úlohy. S tím, jak se cluster škáluje, se automaticky škálují i vaše aplikace.

Upozornění

Použití Remove-AzServiceFabricNodeType k odebrání typu uzlu z produkčního clusteru se nedoporučuje používat často. Jedná se o nebezpečný příkaz, protože odstraňuje prostředek škálovací sady virtuálních počítačů za typem uzlu.

Pokud chcete odebrat typ uzlu, spusťte rutinu Remove-AzServiceFabricNodeType . Typ uzlu musí být na úrovni životnosti Silver nebo Gold. Rutina odstraní škálovací sadu přidruženou k typu uzlu a dokončení nějakou dobu trvá. Potom spusťte rutinu Remove-ServiceFabricNodeState na všech uzlech, které chcete odebrat, která odstraní stav uzlu a odebere uzly z clusteru. Pokud jsou na uzlech služby, jsou nejprve přesunuty do jiného uzlu. Pokud správce clusteru nemůže najít uzel pro repliku nebo službu, operace se zpozdí nebo zablokuje.

$groupname = "sfclustertutorialgroup"
$nodetype = "nt4vm"
$clustername = "mysfcluster123"

Remove-AzServiceFabricNodeType -Name $clustername  -NodeType $nodetype -ResourceGroupName $groupname

Connect-ServiceFabricCluster -ConnectionEndpoint mysfcluster123.eastus.cloudapp.azure.com:19000 `
          -KeepAliveIntervalInSec 10 `
          -X509Credential -ServerCertThumbprint <thumbprint> `
          -FindType FindByThumbprint -FindValue <thumbprint> `
          -StoreLocation CurrentUser -StoreName My

$nodes = Get-ServiceFabricNode | Where-Object {$_.NodeType -eq $nodetype} | Sort-Object { $_.NodeName.Substring($_.NodeName.LastIndexOf('_') + 1) } -Descending

Foreach($node in $nodes)
{
    Remove-ServiceFabricNodeState -NodeName $node.NodeName -TimeoutSec 300 -Force 
}

Zvýšení počtu prostředků uzlů

Po vytvoření clusteru Service Fabric můžete vertikálně škálovat typ uzlu clusteru (změnit prostředky uzlů) nebo upgradovat operační systém virtuálních počítačů typu uzlu nahrazením původního typu uzlu novým typem uzlu (s aktualizovanou skladovou položkou virtuálního počítače nebo imagí operačního systému). Další podrobnosti najdete v tématu Vertikální navýšení kapacity typu uzlu Azure Service Fabric.

Důležité

Nikdy se nepokoušejte o místní změnu skladové položky virtuálního počítače nebo image operačního systému, což je nebezpečná operace a nepodporovaná.

Pokud to není možné, můžete vytvořit nový cluster a obnovit stav aplikace (pokud je k dispozici) ze starého clusteru. Není nutné obnovit žádný stav systémové služby. znovu se vytvoří, když nasadíte aplikace do nového clusteru. Pokud jste v clusteru jenom spouštěli bezstavové aplikace, pak stačí aplikace nasadit do nového clusteru a nemáte nic k obnovení.

Aktualizace šablony

Exportujte šablonu a soubor parametrů ze skupiny prostředků pro nejnovější nasazení. Otevřete soubor parameters.json . Pokud jste cluster nasadili pomocí ukázkové šablony v tomto kurzu, existují v clusteru tři typy uzlů.

Velikost virtuálních počítačů v druhém typu uzlu se nastavuje v parametru vmNodeType1Size . Změňte hodnotu parametru vmNodeType1Size z Standard_D2_V2 na Standard_D3_V2, čímž zdvojnásobíte prostředky každé instance virtuálního počítače.

Skladová položka virtuálního počítače pro všechny tři typy uzlů se nastavuje v parametru vmImageSku . Opět platí, že ke změně skladové položky virtuálního počítače typu uzlu byste měli přistupovat opatrně a nedoporučuje se pro primární typ uzlu.

Nasazení aktualizované šablony

Uložte všechny změny do souborů template.json a parameters.json . Pokud chcete nasadit aktualizovanou šablonu, spusťte následující příkaz:

New-AzResourceGroupDeployment -ResourceGroupName sfclustertutorialgroup -TemplateFile c:\temp\template.json -TemplateParameterFile c:\temp\parameters.json -Name "ScaleUpNodeType"

Nebo následující příkaz Azure CLI:

az deployment group create --resource-group sfclustertutorialgroup --template-file c:\temp\template.json --parameters c:\temp\parameters.json

Další kroky

V tomto kurzu jste se naučili:

  • Přidání a odebrání uzlů (horizontální navýšení kapacity a horizontální navýšení kapacity)
  • Přidání a odebrání typů uzlů (horizontální navýšení kapacity a horizontální navýšení kapacity)
  • Zvýšení kapacity prostředků uzlů (vertikální navýšení kapacity)

Dále se v následujícím kurzu dozvíte, jak upgradovat modul runtime clusteru.