Sdílet prostřednictvím


Plánování kapacity a škálování pro Azure Service Fabric

Než vytvoříte cluster Azure Service Fabric nebo škálujete výpočetní prostředky hostující váš cluster, je důležité naplánovat kapacitu. Další informace o plánování kapacity najdete v tématu Plánování kapacity clusteru Service Fabric. Další osvědčené postupy pro škálovatelnost clusteru najdete v tématu Aspekty škálovatelnosti Service Fabric.

Kromě zvažování typů uzlů a charakteristik clusteru byste měli očekávat, že dokončení operací škálování pro produkční prostředí trvá déle než hodinu. To platí bez ohledu na počet virtuálních počítačů, které přidáváte.

Automatické škálování

Operace škálování byste měli provádět prostřednictvím šablon Azure Resource Manageru, protože je osvědčeným postupem zacházet s konfiguracemi prostředků jako s kódem.

Díky automatickému škálování prostřednictvím škálovacích sad virtuálních počítačů bude šablona Resource Manageru s verzí přesně definovat počty instancí pro škálovací sady virtuálních počítačů. Nepřesná definice zvyšuje riziko, že budoucí nasazení způsobí nezamýšlené operace škálování. Obecně byste měli použít automatické škálování, pokud:

  • Nasazení šablon Resource Manageru s příslušnou kapacitou deklarovanou nepodporuje váš případ použití.

    Kromě ručního škálování můžete nakonfigurovat kanál kontinuální integrace a doručování ve službě Azure DevOps Services pomocí projektů nasazení skupiny prostředků Azure. Tento kanál se běžně aktivuje aplikací logiky, která používá metriky výkonu virtuálního počítače dotazované z rozhraní REST API služby Azure Monitor. Kanál efektivně automaticky škáluje na základě požadovaných metrik a současně optimalizuje šablony Resource Manageru.

  • Najednou potřebujete horizontálně škálovat pouze jeden uzel škálovací sady virtuálních počítačů.

    Pokud chcete kapacitu škálovat o tři nebo více uzlů najednou, měli byste škálovat cluster Service Fabric přidáním škálovací sady virtuálních počítačů. Škálovací sady virtuálních počítačů můžete horizontálně škálovat na jeden uzel.

  • Pro cluster Service Fabric máte úroveň spolehlivosti silver nebo vyšší a v libovolném měřítku, ve kterém nakonfigurujete pravidla automatického škálování, stálost stříbra nebo vyšší.

    Minimální kapacita pravidel automatického škálování musí být rovna nebo větší než pět instancí virtuálních počítačů. Musí být také roven nebo větší než minimální úroveň spolehlivosti pro váš primární typ uzlu.

Poznámka:

Stavová služba Service Fabric Service Fabric:/System/InfrastructureService/<NODE_TYPE_NAME> běží na každém typu uzlu, který má silver nebo vyšší odolnost. Je to jediná systémová služba, která se podporuje pro spouštění v Azure na libovolném typu uzlů clusterů.

Důležité

Automatické škálování Service Fabric podporuje Default a NewestVM konfigurace škálování škálovací sady virtuálních počítačů.

Důležité informace o vertikálním škálování

Vertikální škálování typu uzlu v Azure Service Fabric vyžaduje řadu kroků a aspektů. Příklad:

  • Cluster musí být před škálováním v pořádku. V opačném případě cluster dále stabilizujete.
  • Úroveň odolnosti stříbra nebo vyšší je vyžadována pro všechny typy uzlů clusteru Service Fabric, které hostují stavové služby.

Poznámka:

Primární typ uzlu, který je hostitelem stavových systémových služeb Service Fabric, musí být úroveň silver durability nebo vyšší. Po povolení silver durability budou operace clusteru, jako jsou upgrady, přidávání nebo odebírání uzlů, pomalejší, protože systém optimalizuje bezpečnost dat při rychlosti provozu.

Vertikální škálování škálovací sady virtuálních počítačů jednoduše změnou skladové položky prostředku je destruktivní operace, protože znovu nabitové kopie hostitelů odebere veškerý místně trvalý stav. Místo toho budete chtít horizontálně škálovat cluster přidáním nové škálovací sady s požadovanou skladovou jednotkou a následnou migrací služeb do nové škálovací sady pro dokončení bezpečné vertikální operace škálování.

Váš cluster používá vlastnosti uzlu Service Fabric a omezení umístění k rozhodnutí, kde se mají hostovat služby vaší aplikace. Při vertikálním škálování primárního typu uzlu nasadíte druhý primární typ uzlu a pak nastavíte ("isPrimary": false) na původní primární typ uzlu a budete pokračovat v zakázání jeho uzlů a odebrání škálovací sady a souvisejících prostředků. Podrobnosti najdete v tématu Vertikální navýšení kapacity primárního typu uzlu clusteru Service Fabric.

Poznámka:

Před pokusem o změny v produkčním prostředí vždy ověřte operace v testovacích prostředích. Ve výchozím nastavení mají systémové služby clusteru Service Fabric omezení umístění pouze na cílový primární typ uzlu.

S deklarovanými vlastnostmi uzlu a omezeními umístění proveďte následující kroky jednu instanci virtuálního počítače najednou. To umožňuje řádné vypnutí systémových služeb (a stavových služeb) na instanci virtuálního počítače, kterou odebíráte, protože se vytvářejí nové repliky jinde.

  1. V PowerShellu spusťte Disable-ServiceFabricNode záměr RemoveNode zakázat uzel, který chcete odebrat. Odeberte typ uzlu, který má nejvyšší číslo. Pokud máte například cluster se šesti uzly, odeberte instanci virtuálního počítače MyNodeType_5.
  2. Spusťte, Get-ServiceFabricNode abyste se ujistili, že uzel přešel na zakázaný. Pokud ne, počkejte, až bude uzel zakázaný. U každého uzlu to může trvat několik hodin. Nepokračujte, dokud uzel nepřešel na zakázaný.
  3. Snižte počet virtuálních počítačů o jeden v daném typu uzlu. Nejvyšší instance virtuálního počítače se teď odebere.
  4. Podle potřeby opakujte kroky 1 až 3, ale nikdy neškulujte v počtu instancí v primárních typech uzlů méně, než jaká úroveň spolehlivosti zaručuje. Seznam doporučených instancí najdete v tématu Plánování kapacity clusteru Service Fabric.
  5. Po vyřazení všech virtuálních počítačů (reprezentovaných jako Down) se v prostředcích infrastruktury:/System/InfrastructureService/[název uzlu] zobrazí stav chyby. Potom můžete prostředek clusteru aktualizovat tak, aby odebral typ uzlu. Můžete použít nasazení šablony ARM nebo upravit prostředek clusteru prostřednictvím Azure Resource Manageru. Tím se spustí upgrade clusteru, který odebere službu fabric:/System/InfrastructureService/[typ uzlu], která je ve stavu chyby.
  6. Potom můžete volitelně odstranit sadu VMScaleSet, ale uzly uvidíte jako "Down" ze zobrazení Service Fabric Exploreru. Posledním krokem by bylo vyčištění pomocí Remove-ServiceFabricNodeState příkazu.

Horizontální škálování

Horizontální škálování můžete provádět ručně nebo programově.

Poznámka:

Pokud škálujete typ uzlu, který má odolnost Silver nebo Gold, škálování bude pomalé.

Horizontální navýšení kapacity

Navyšte kapacitu clusteru Service Fabric zvýšením počtu instancí pro konkrétní škálovací sadu virtuálních počítačů. Kapacitu můžete škálovat programově pomocí AzureClient ID požadované škálovací sady a zvýšit kapacitu.

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);
var newCapacity = (int)Math.Min(MaximumNodeCount, scaleSet.Capacity + 1);
scaleSet.Update().WithCapacity(newCapacity).Apply(); 

Pokud chcete kapacitu škálovat ručně, aktualizujte kapacitu ve vlastnosti skladové položky požadovaného prostředku škálovací sady virtuálních počítačů.

"sku": {
    "name": "[parameters('vmNodeType0Size')]",
    "capacity": "[parameters('nt0InstanceCount')]",
    "tier": "Standard"
}

Škálování v

Škálování vyžaduje větší pozornost než horizontální navýšení kapacity. Například:

  • Systémové služby Service Fabric běží v primárním typu uzlu v clusteru. Nikdy nevypínávejte nebo škálujte počet instancí pro daný typ uzlu, abyste měli méně instancí, než jaká úroveň spolehlivosti zaručuje.
  • Pro stavovou službu potřebujete určitý počet uzlů, které jsou vždy v provozu, a zachovat stav vaší služby. Minimálně potřebujete počet uzlů, které se rovnají počtu cílových replik v oddílu nebo službě.

Pokud chcete provést ruční škálování, postupujte takto:

  1. V PowerShellu spusťte Disable-ServiceFabricNode záměr RemoveNode zakázat uzel, který chcete odebrat. Odeberte typ uzlu, který má nejvyšší číslo. Pokud máte například cluster se šesti uzly, odeberte instanci virtuálního počítače MyNodeType_5.
  2. Spusťte, Get-ServiceFabricNode abyste se ujistili, že uzel přešel na zakázaný. Pokud ne, počkejte, až bude uzel zakázaný. U každého uzlu to může trvat několik hodin. Nepokračujte, dokud uzel nepřešel na zakázaný.
  3. Snižte počet virtuálních počítačů o jeden v daném typu uzlu. Nejvyšší instance virtuálního počítače se teď odebere.
  4. Opakujte kroky 1 až 3 podle potřeby, dokud nezřídíte požadovanou kapacitu. Neškulujte škálovat v počtu instancí v primárních typech uzlů na méně, než jaká úroveň spolehlivosti zaručuje. Seznam doporučených instancí najdete v tématu Plánování kapacity clusteru Service Fabric.

Pokud chcete kapacitu škálovat ručně, aktualizujte kapacitu ve vlastnosti skladové položky požadovaného prostředku škálovací sady virtuálních počítačů.

"sku": {
    "name": "[parameters('vmNodeType0Size')]",
    "capacity": "[parameters('nt0InstanceCount')]",
    "tier": "Standard"
}

Uzel je nutné připravit na vypínání, aby se škálování škáluje prostřednictvím kódu programu. Vyhledejte uzel, který se má odebrat (uzel nejvyšší instance). Příklad:

using (var client = new FabricClient())
{
    var mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync())
        .Where(n => n.NodeType.Equals(NodeTypeToScale, StringComparison.OrdinalIgnoreCase))
        .Where(n => n.NodeStatus == System.Fabric.Query.NodeStatus.Up)
        .OrderByDescending(n =>
        {
            var instanceIdIndex = n.NodeName.LastIndexOf("_");
            var instanceIdString = n.NodeName.Substring(instanceIdIndex + 1);
            return int.Parse(instanceIdString);
        })
        .FirstOrDefault();

Deaktivujte a odeberte uzel pomocí stejné FabricClient instance (client v tomto případě) a instance uzlu (instanceIdString v tomto případě), které jste použili v předchozím kódu:

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);

// Remove the node from the Service Fabric cluster
ServiceEventSource.Current.ServiceMessage(Context, $"Disabling node {mostRecentLiveNode.NodeName}");
await client.ClusterManager.DeactivateNodeAsync(mostRecentLiveNode.NodeName, NodeDeactivationIntent.RemoveNode);

// Wait (up to a timeout) for the node to gracefully shut down
var timeout = TimeSpan.FromMinutes(5);
var waitStart = DateTime.Now;
while ((mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Up || mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Disabling) &&
        DateTime.Now - waitStart < timeout)
{
    mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync()).FirstOrDefault(n => n.NodeName == mostRecentLiveNode.NodeName);
    await Task.Delay(10 * 1000);
}

// Decrement virtual machine scale set capacity
var newCapacity = (int)Math.Max(MinimumNodeCount, scaleSet.Capacity - 1); // Check min count 

scaleSet.Update().WithCapacity(newCapacity).Apply();

Poznámka:

Při škálování v clusteru se v Service Fabric Exploreru zobrazí odebraná instance uzlu nebo virtuálního počítače v špatném stavu. Vysvětlení tohoto chování najdete v tématu Chování, které můžete pozorovat v Service Fabric Exploreru. Můžete provádět následující akce:

  • Zavolejte příkaz Remove-ServiceFabricNodeState s odpovídajícím názvem uzlu.
  • Nasaďte do clusteru pomocnou aplikaci automatického škálování Service Fabric. Tato aplikace zajišťuje, že se uzly se škálováním na více instancí se vymažou z Service Fabric Exploreru.

Úrovně spolehlivosti

Úroveň spolehlivosti je vlastností vašeho prostředku clusteru Service Fabric. Pro jednotlivé typy uzlů se nedá nakonfigurovat jinak. Řídí faktor replikace systémových služeb pro cluster a je nastavením na úrovni prostředků clusteru.

Úroveň spolehlivosti určí minimální počet uzlů, které musí mít váš primární typ uzlu. Úroveň spolehlivosti může mít následující hodnoty:

  • Platinum: Spouští systémové služby s cílovou sadou replik se sedmi a devíti počátečními uzly.
  • Gold: Spouští systémové služby s počtem cílových replik se sedmi a sedmi počátečními uzly.
  • Silver: Spouští systémové služby s počtem cílových replik s počtem pěti a pěti počátečních uzlů.
  • Bronzová: Spouští systémové služby s počtem cílových replik se třemi a třemi počátečními uzly.

Minimální doporučená úroveň spolehlivosti je Silver.

Úroveň spolehlivosti je nastavena v části vlastností prostředku Microsoft.ServiceFabric/clusters, například takto:

"properties":{
    "reliabilityLevel": "Silver"
}

Úrovně stálosti

Upozorňující

Typy uzlů spuštěné s bronzovou odolností získají žádná oprávnění. Úlohy infrastruktury, které ovlivňují bezstavové úlohy, nebudou zastaveny ani zpožděny, což může mít vliv na vaše úlohy.

Používejte bronzovou odolnost pouze pro typy uzlů, které spouštějí bezstavové úlohy. Pro produkční úlohy spusťte Silver nebo vyšší, abyste zajistili konzistenci stavu. Na základě pokynů v dokumentaci k plánování kapacity zvolte správnou spolehlivost.

Úroveň stálosti musí být nastavena ve dvou prostředcích. Jedním z nich je profil rozšíření prostředku škálovací sady virtuálních počítačů:

"extensionProfile": {
    "extensions":          {
        "name": "[concat('ServiceFabricNodeVmExt','_vmNodeType0Name')]",
        "properties": {
            "settings": {
                "durabilityLevel": "Bronze"
            }
        }
    }
}

Druhý prostředek je v nodeTypesprostředku Microsoft.ServiceFabric/clusters:

"nodeTypes": [
    {
        "name": "[variables('vmNodeType0Name')]",
        "durabilityLevel": "Bronze"
    }
]

Další kroky