Öğretici: Azure'daki bir Service Fabric kümesini ölçeklendirme

Bu öğretici, bir serinin üçüncü bölümüdür ve mevcut kümenizin ölçeğini genişletmeyi ve daraltmayı gösterir. Tamamladığınızda, kümenizin nasıl ölçekleneceğini ve kalan kaynakların nasıl temizleneceğini öğrenmiş olacaksınız. Azure'da çalışan bir kümeyi ölçeklendirme hakkında daha fazla bilgi için Bkz. Service Fabric kümelerini ölçeklendirme.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Düğüm ekleme ve kaldırma (ölçeği genişletme ve daraltma)
  • Düğüm türleri ekleme ve kaldırma (ölçeği genişletme ve daraltma)
  • Düğüm kaynaklarını artırma (ölçeği artırma)

Bu öğretici dizisinde şunların nasıl yapıldığını öğrenirsiniz:

Not

Azure ile etkileşime geçmek için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

Önkoşullar

Bu öğreticiye başlamadan önce:

Önemli noktalar ve yönergeler

Uygulama iş yükleri zaman içinde değişiyor, mevcut hizmetlerinizin daha fazla (veya daha az) kaynağa ihtiyacı var mı? Küme kaynaklarını artırmak veya azaltmak için düğüm türüne düğüm ekleyin veya kaldırın.

Kümenize 100'den fazla düğüm eklemeniz gerekiyor mu? Tek bir Service Fabric düğüm türü/ölçek kümesi 100'den fazla düğüm/VM içeremez. Kümeyi 100 düğümün ötesine ölçeklendirmek için ek düğüm türleri ekleyin.

Uygulamanızın birden çok hizmeti var mı ve bunlardan herhangi birinin genel veya İnternet'e yönelik olması gerekiyor mu? Tipik uygulamalar, bir istemciden giriş alan bir ön uç ağ geçidi hizmeti ve ön uç hizmetleriyle iletişim kuran bir veya daha fazla arka uç hizmeti içerir. Bu durumda kümeye en az iki düğüm türü eklemenizi öneririz.

Hizmetlerinizin daha fazla RAM veya daha yüksek CPU döngüleri gibi farklı altyapı gereksinimleri var mı? Örneğin, uygulamanız bir ön uç hizmeti ve bir arka uç hizmeti içerir. Ön uç hizmeti, İnternet'e açık bağlantı noktaları olan daha küçük VM'lerde (D2 gibi VM boyutları) çalışabilir. Ancak arka uç hizmeti yoğun işlem gücü kullanır ve İnternet'e yönelik olmayan daha büyük VM'lerde (D4, D6, D15 gibi VM boyutlarıyla) çalıştırılması gerekir. Bu durumda kümenize iki veya daha fazla düğüm türü eklemenizi öneririz. Bu, her düğüm türünün İnternet bağlantısı veya VM boyutu gibi farklı özelliklere sahip olmasını sağlar. VM sayısı bağımsız olarak da ölçeklendirilebilir.

Azure kümesini ölçeklendirirken aşağıdaki yönergeleri göz önünde bulundurun:

  • Tek bir Service Fabric düğüm türü/ölçek kümesi 100'den fazla düğüm/VM içeremez. Kümeyi 100 düğümün ötesine ölçeklendirmek için ek düğüm türleri ekleyin.
  • Üretim iş yüklerini çalıştıran birincil düğüm türlerinin dayanıklılık düzeyi Gold veya Silver olmalıdır ve her zaman beş veya daha fazla düğüm olmalıdır.
  • Durum bilgisi olan üretim iş yüklerini çalıştıran birincil olmayan düğüm türlerinin her zaman beş veya daha fazla düğümü olmalıdır.
  • Durum bilgisi olmayan üretim iş yüklerini çalıştıran birincil olmayan düğüm türlerinin her zaman iki veya daha fazla düğümü olmalıdır.
  • Gold veya Silver'ın herhangi bir düğüm türünde her zaman beş veya daha fazla düğüm olmalıdır.
  • Birincil düğüm türünde ölçeklendirme (düğümleri kaldırma) durumunda, örnek sayısını hiçbir zaman güvenilirlik düzeyinin gerektirdiğinden daha düşük bir değere düşürmemelisiniz.

Daha fazla bilgi için küme kapasitesi kılavuzlarını okuyun.

Kaynak grubu için şablonu dışarı aktarma

Güvenli bir Windows kümesi oluşturduktan ve kaynak grubunuzu başarıyla ayarladıktan sonra, kaynak grubu için Resource Manager şablonunu dışarı aktarın. Şablonu dışarı aktarmak, kümenin ve kaynaklarının gelecekteki dağıtımlarını otomatikleştirmenize olanak tanır çünkü şablon tüm altyapıyı içerir. Şablonları dışarı aktarma hakkında daha fazla bilgi için bkz. Azure portal kullanarak Azure Resource Manager kaynak gruplarını yönetme.

  1. Azure portal kümeyi içeren kaynak grubuna gidin (bu öğreticiyi takip ediyorsanız sfclustertutorialgroup).

  2. Sol bölmede Dağıtımlar'ı seçin veya Dağıtımlar'ın altındaki bağlantıyı seçin.

  3. Listeden en son başarılı dağıtımı seçin.

  4. Sol bölmede Şablon'a tıklayın ve ardından İndir'i seçerek şablonu ZIP dosyası olarak dışarı aktarın. Şablonu ve parametreleri yerel bilgisayarınıza kaydedin.

Düğüm türüne düğüm ekleme veya düğüm türünden düğüm kaldırma

Ölçeği daraltma ve genişletme veya yatay ölçeklendirme, kümedeki düğüm sayısını değiştirir. Ölçeği daralttığınızda veya genişlettiğinizde, ölçek kümesine daha fazla sanal makine örneği eklersiniz. Bu örnekler, Service Fabric tarafından kullanılan düğümler haline gelir. Service Fabric, ölçek kümesine ne zaman daha fazla örnek eklendiğini bilir (ölçek genişletilerek) ve otomatik olarak tepki verir. küme üzerinde iş yükleri çalışırken bile kümeyi istediğiniz zaman ölçeklendikleyebilirsiniz.

Şablonu güncelleştirme

En son dağıtım için kaynak grubundan bir şablon ve parametre dosyasını dışarı aktarın. parameters.json dosyasını açın. Bu öğreticideki örnek şablonu kullanarak kümeyi dağıttıysanız, kümede üç düğüm türü ve her düğüm türü için düğüm sayısını ayarlayan üç parametre vardır: nt0InstanceCount, nt1InstanceCount ve nt2InstanceCount. Örneğin nt1InstanceCount parametresi, ikinci düğüm türü için örnek sayısını ayarlar ve ilişkili sanal makine ölçek kümesindeki VM sayısını ayarlar.

Bu nedenle , nt1InstanceCount değerini güncelleştirerek ikinci düğüm türündeki düğüm sayısını değiştirirsiniz. Bir düğüm türünü 100'den fazla düğüme ölçeklendiremeyeceğinizi unutmayın. Durum bilgisi olan üretim iş yüklerini çalıştıran birincil olmayan düğüm türlerinin her zaman beş veya daha fazla düğümü olmalıdır. Durum bilgisi olmayan üretim iş yüklerini çalıştıran birincil olmayan düğüm türlerinin her zaman iki veya daha fazla düğümü olmalıdır.

Ölçeği daraltıyorsanız ve düğümleri kaldırıyorsanız, Bronz dayanıklılık düzeyine sahip bir düğüm türü , bu düğümlerin durumunu el ile kaldırmanız gerekir. Silver ve Gold dayanıklılık katmanı için bu adımlar platform tarafından otomatik olarak gerçekleştirilir.

Güncelleştirilmiş şablonu dağıtma

Template.json ve parameters.json dosyalarındaki değişiklikleri kaydedin. Güncelleştirilmiş şablonu dağıtmak için aşağıdaki komutu çalıştırın:

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

Veya aşağıdaki Azure CLI komutu:

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

Kümeye düğüm türü ekleme

Azure'da çalışan bir Service Fabric kümesinde tanımlanan her düğüm türü ayrı bir sanal makine ölçek kümesi olarak ayarlanır. Ardından her düğüm türü ayrı ayrı yönetilebilir. Her düğüm türünün ölçeğini bağımsız olarak artırıp azaltabilir, farklı bağlantı noktası kümelerini açabilir ve farklı kapasite ölçümleri kullanabilirsiniz. Ayrıca, her küme düğümünde çalışan işletim sistemi SKU'sunu bağımsız olarak değiştirebilirsiniz, ancak örnek kümede çalışan bir Windows ve Linux karışımına sahip olamazsınız. Tek bir düğüm türü/ölçek kümesi 100'den fazla düğüm içeremez. Ek düğüm türleri/ölçek kümeleri ekleyerek kümeyi yatay olarak 100'den fazla düğüme ölçeklendikleyebilirsiniz. küme üzerinde iş yükleri çalışırken bile kümeyi istediğiniz zaman ölçeklendikleyebilirsiniz.

Şablonu güncelleştirme

En son dağıtım için kaynak grubundan bir şablon ve parametre dosyasını dışarı aktarın. parameters.json dosyasını açın. Bu öğreticideki örnek şablonu kullanarak kümeyi dağıttıysanız kümede üç düğüm türü vardır. Bu bölümde, bir Resource Manager şablonunu güncelleştirip dağıtarak dördüncü bir düğüm türü eklersiniz.

Yeni düğüm türüne ek olarak, ilişkili sanal makine ölçek kümesini (sanal ağın ayrı bir alt ağında çalışır) ve ağ güvenlik grubunu da eklersiniz. Yeni ölçek kümesi için yeni veya mevcut genel IP adresi ve Azure yük dengeleyici kaynakları eklemeyi seçebilirsiniz. Yeni düğüm türü silver dayanıklılık düzeyine ve "Standard_D2_V2" boyutuna sahiptir.

template.json dosyasına aşağıdaki yeni parametreleri ekleyin:

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

template.json dosyasına aşağıdaki yeni değişkenleri ekleyin:

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

template.json dosyasında, sanal ağ kaynağına yeni bir alt ağ ekleyin:

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

template.json dosyasına yeni genel IP adresi ve yük dengeleyici kaynakları ekleyin:

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

template.json dosyasına yeni ağ güvenlik grubu ve sanal makine ölçek kümesi kaynakları ekleyin. Sanal makine ölçek kümesinin Service Fabric uzantısı özelliklerindeki NodeTypeRef özelliği, belirtilen düğüm türünü ölçek kümesine eşler.

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

template.json dosyasında küme kaynağını güncelleştirin ve yeni bir düğüm türü ekleyin:

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

parameters.json dosyasına aşağıdaki yeni parametreleri ve değerleri ekleyin:

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

Güncelleştirilmiş şablonu dağıtma

Template.json ve parameters.json dosyalarındaki değişiklikleri kaydedin. Güncelleştirilmiş şablonu dağıtmak için aşağıdaki komutu çalıştırın:

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

Veya aşağıdaki Azure CLI komutu:

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

Kümeden düğüm türünü kaldırma

Service Fabric kümesi oluşturduktan sonra, bir düğüm türünü (sanal makine ölçek kümesi) ve tüm düğümlerini kaldırarak kümeyi yatay olarak ölçeklendikleyebilirsiniz. kümede iş yükleri çalışırken bile kümeyi istediğiniz zaman ölçeklendikleyebilirsiniz. Küme ölçeklendirildikçe, uygulamalarınız da otomatik olarak ölçeklendirilir.

Uyarı

Bir düğüm türünü üretim kümesinden kaldırmak için Remove-AzServiceFabricNodeType kullanılması sık sık kullanılması önerilmez. Düğüm türünün arkasındaki sanal makine ölçek kümesi kaynağını sildiğinden tehlikeli bir komut olur.

Düğüm türünü kaldırmak için Remove-AzServiceFabricNodeType cmdlet'ini çalıştırın. Düğüm türü Silver veya Gold dayanıklılık düzeyi olmalıdır Cmdlet, düğüm türüyle ilişkili ölçek kümesini siler ve tamamlanması biraz zaman alır. Ardından kaldırılacak düğümlerin her birinde Remove-ServiceFabricNodeState cmdlet'ini çalıştırın. Bu cmdlet düğüm durumunu siler ve düğümleri kümeden kaldırır. Düğümlerde hizmetler varsa, hizmetler önce başka bir düğüme taşınır. Küme yöneticisi çoğaltma/hizmet için bir düğüm bulamazsa işlem geciktirilir/engellenir.

$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 
}

Düğüm kaynaklarını artırma

Service Fabric kümesi oluşturduktan sonra, bir küme düğümü türünü dikey olarak ölçeklendirebilir (düğümlerin kaynaklarını değiştirebilir) veya özgün düğüm türünü yeni bir düğüm türüyle (güncelleştirilmiş VM SKU'su veya işletim sistemi görüntüsüyle) değiştirerek düğüm türü VM'lerin işletim sistemini yükseltebilirsiniz. Diğer ayrıntılar için bkz. Azure Service Fabric düğüm türünün ölçeğini artırma.

Önemli

Tehlikeli bir işlem olan ve desteklenmeyen VM SKU'su veya işletim sistemi görüntüsünde hiçbir zaman yerinde değişiklik denemeyin.

Bu mümkün değilse, yeni bir küme oluşturabilir ve uygulama durumunu (varsa) eski kümenizden geri yükleyebilirsiniz . Herhangi bir sistem hizmeti durumunu geri yüklemeniz gerekmez; uygulamalarınızı yeni kümenize dağıttığınızda yeniden oluşturulur. Kümenizde yalnızca durum bilgisi olmayan uygulamalar çalıştırıyorsanız, tek yapmanız gereken uygulamalarınızı yeni kümeye dağıtmaktır; geri yüklemeniz gereken bir şey yoktur.

Şablonu güncelleştirme

En son dağıtım için kaynak grubundan bir şablon ve parametre dosyası dışarı aktarın. parameters.json dosyasını açın. Bu öğreticideki örnek şablonu kullanarak kümeyi dağıttıysanız kümede üç düğüm türü vardır.

İkinci düğüm türündeki VM'lerin boyutu vmNodeType1Size parametresinde ayarlanır. vmNodeType1Size parametre değerini Standard_D2_V2 olan Standard_D3_V2 olarak değiştirin; bu, her VM örneğinin kaynaklarını iki katına çıkartır.

Üç düğüm türünün tümü için VM SKU'su vmImageSku parametresinde ayarlanır. Bir kez daha, bir düğüm türünün VM SKU'sunun değiştirilmesine dikkatle yaklaşılmalıdır ve birincil düğüm türü için önerilmez.

Güncelleştirilmiş şablonu dağıtma

Template.json ve parameters.json dosyalarındaki değişiklikleri kaydedin. Güncelleştirilmiş şablonu dağıtmak için aşağıdaki komutu çalıştırın:

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

Veya aşağıdaki Azure CLI komutu:

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

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  • Düğüm ekleme ve kaldırma (ölçeği genişletme ve daraltma)
  • Düğüm türleri ekleme ve kaldırma (ölçeği genişletme ve daraltma)
  • Düğüm kaynaklarını artırma (ölçeği artırma)

Ardından, kümenin çalışma zamanının nasıl yükseltileceğini öğrenmek için aşağıdaki öğreticiye geçin.