Sdílet prostřednictvím


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 ven a v rámci této série. 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 spuštěné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í prostředků uzlu (vertikální navýšení kapacity)

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

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Pokud chcete začít, přečtěte si 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é aspekty a pokyny

Úlohy aplikací se mění v průběhu času, potřebují vaše stávající služby více (nebo méně) prostředků? Pokud chcete zvýšit nebo snížit prostředky clusteru, přidejte nebo odeberte uzly z typu uzlu .

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

Má vaše aplikace více služeb a některé z nich musí být veřejné nebo internetové? Typické aplikace obsahují front-endovou bránu, 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 různé potřeby infrastruktury, jako je 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í otevřené porty pro internet. Back-endová služba je ale 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 do clusteru přidat 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 možné škálovat nezávisle na sobě.

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

  • Jeden typ nebo škálovací sada uzlů Service Fabric nemůže obsahovat více než 100 uzlů nebo virtuálních počítačů. Pokud chcete škálovat cluster nad 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 mají pět nebo více uzlů.
  • Ne primary node types running stateful production workloads should always have five or more nodes.
  • Ne primary node types running stateless production workloads should always have two or more nodes.
  • Jakýkoli typ uzlu úrovně stálosti gold nebo Silver by měl vždy obsahovat pět nebo více uzlů.
  • Pokud škálování (odebírání uzlů z) primárního typu uzlu, nikdy byste neměli snížit počet instancí na méně, 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ů vyexportujte šablonu Resource Manageru pro skupinu prostředků. Export šablony umožňuje automatizovat budoucí nasazení clusteru a jejích prostředků, protože šablona obsahuje celou infrastrukturu. Další informace o exportu šablon najdete v tématu Správa skupin prostředků Azure Resource Manageru pomocí webu Azure Portal.

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

  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 Možnost Šablona a pak vyberte Stáhnout a šablonu exportujte jako soubor ZIP. Uložte šablonu a parametry do místního počítače.

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

Horizontální navýšení nebo horizontální škálování změní 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 kdykoli škálovat, i když jsou úlohy spuštěné v clusteru.

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é nastaví 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čů ve škálovací sadě přidružených virtuálních počítačů.

Proto 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ů. Ne primary node types running stateful production workloads should always have five or more nodes. Ne primary node types running stateless production workloads should always have two or more nodes.

Pokud škálujete, odeberete uzly z úrovně bronzové odolnosti , musíte stav těchto uzlů odebrat ručně. Pro úroveň stálosti Silver a Gold se tyto kroky provádějí automaticky platformou.

Nasazení aktualizované šablony

Uložte všechny změny 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 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. Skladovou položku operačního systému spuštěnou na každém uzlu clusteru můžete také nezávisle změnit, ale všimněte si, že v ukázkovém clusteru nemůžete mít kombinaci Windows a Linuxu. Jeden typ uzlu nebo škálovací sada nesmí obsahovat více než 100 uzlů. Cluster můžete horizontálně škálovat na více než 100 uzlů přidáním dalších typů uzlů nebo škálovacích sad. Cluster můžete kdykoli škálovat, i když jsou úlohy spuštěné v clusteru.

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

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ň odolnosti 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'))]",

V 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 nové veřejné IP adresy 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 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 kdykoli škálovat, i když jsou úlohy spuštěné v clusteru. Jak se cluster škáluje, vaše aplikace se automaticky škálují i.

Upozorňující

Použití remove-AzServiceFabricNodeType k odebrání typu uzlu z produkčního clusteru se nedoporučuje používat často. Je to 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 úroveň stálosti Silver nebo Gold. Rutina odstraní škálovací sadu přidruženou k typu uzlu a dokončení nějakou dobu trvá. Potom na všech uzlech spusťte rutinu Remove-ServiceFabricNodeState , která odstraní stav uzlu a odebere uzly z clusteru. Pokud jsou na uzlech služby, služby se nejprve přesunou 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í prostředků uzlu

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 jednotkou 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; Při nasazování aplikací do nového clusteru se znovu vytvoří. Pokud jste v clusteru spouštěli jenom bezstavové aplikace, stačí, když nasadíte aplikace do nového clusteru, nemusíte nic obnovovat.

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čů ve druhém typu uzlu je nastavena v parametru vmNodeType1Size . Změňte hodnotu parametru vmNodeType1Size z Standard_D2_V2 na Standard_D3_V2, která zdvojnásobí 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ů je nastavena v parametru vmImageSku . Změna skladové položky virtuálního počítače typu uzlu by měla být opět s opatrností a nedoporučuje se pro primární typ uzlu.

Nasazení aktualizované šablony

Uložte všechny změny 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, jak:

  • 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í prostředků uzlu (vertikální navýšení kapacity)

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