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

Před vytvořením jakéhokoli clusteru Azure Service Fabric nebo škálováním výpočetních prostředků, které hostují 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ě zohlednění typu uzlu a charakteristik clusteru byste měli očekávat, že dokončení operací škálování v produkčním prostředí bude trvat 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 Manager, protože osvědčeným postupem je zacházet s konfiguracemi prostředků jako s kódem.

Použití automatického škálování prostřednictvím škálovacích sad virtuálních počítačů způsobí, že šablona Resource Manager s verzemi bude 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ě platí, že automatické škálování byste měli použít v následujících případech:

  • Nasazení šablon Resource Manager s deklarovanou odpovídající kapacitou nepodporuje váš případ použití.

    Kromě ručního škálování můžete v Azure DevOps Services nakonfigurovat kanál kontinuální integrace a průběžného doručování pomocí projektů nasazení skupiny prostředků Azure. Tento kanál běžně aktivuje aplikace logiky, která používá metriky výkonu virtuálních počítačů 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 Resource Manager šablony.

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

    Pokud chcete š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čů. Je nejbezpečnější horizontálně škálovat škálovací sady virtuálních počítačů po jednom uzlu.

  • U clusteru Service Fabric je k dispozici spolehlivost úrovně Silver nebo vyšší a u libovolného měřítka, ve kterém konfigurujete pravidla automatického škálování, máte spolehlivost Úrovně Silver nebo vyšší.

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

Poznámka

Stavová služba Service Fabric:/System/InfastructureService/<NODE_TYPE_NAME> běží na každém typu uzlu, který má stříbrnou nebo vyšší odolnost. Je to jediná systémová služba, která je podporovaná pro spuštění v Azure na libovolném typu uzlů clusterů.

Důležité

Service Fabric podporuje Default automatické škálování a NewestVM konfigurace š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.
  • Stříbrná nebo vyšší úroveň odolnosti se vyžaduje 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 na úrovni odolnosti Silver nebo vyšší. Po povolení stříbrné odolnosti budou operace clusteru, jako jsou upgrady, přidávání nebo odebírání uzlů atd., pomalejší, protože systém optimalizuje bezpečnost dat nad rychlostí operací.

Vertikální škálování škálovací sady virtuálních počítačů jednoduše změnou její skladové položky prostředku je destruktivní operace, protože přenastavuje image hostitelů, a tím odebere všechny místně trvalé stavy. Místo toho budete chtít horizontálně škálovat cluster přidáním nové škálovací sady s požadovanou skladovou položkou a následnou migrací služeb do nové škálovací sady dokončit bezpečnou operaci vertikálního škálování.

Váš cluster používá vlastnosti uzlu Service Fabric a omezení umístění k rozhodnutí, kde se mají služby vaší aplikace hostovat. 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) u původního primárního typu uzlu a budete pokračovat zakázáním jeho uzlů a odebráním jeho š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í služby systému 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 po jedné instanci virtuálního počítače. To umožňuje řádné vypnutí systémových služeb (a vašich stavových služeb) na instanci virtuálního počítače, kterou odebíráte, protože nové repliky se vytvářejí jinde.

  1. V PowerShellu spusťte příkaz Disable-ServiceFabricNode s úmyslem 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 MyNodeType_5 virtuálního počítače.
  2. Spusťte příkaz Get-ServiceFabricNode , abyste se ujistili, že uzel přešel do zakázaného stavu. Pokud ne, počkejte na zakázání uzlu. U každého uzlu to může trvat několik hodin. Nepokračujte, dokud uzel nepřejdou na zakázaný.
  3. Snižte počet virtuálních počítačů v daném typu uzlu o jeden. Nejvyšší instance virtuálního počítače se teď odebere.
  4. Opakujte kroky 1 až 3 podle potřeby, ale nikdy nešlechte na méně instancí v primárních typech uzlů, než vyžaduje úroveň spolehlivosti. 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 mimo provoz) se v prostředcích infrastruktury:/System/InfrastructureService/[název uzlu] zobrazí chybový stav. Potom můžete aktualizovat prostředek clusteru a odebrat typ uzlu. Můžete použít buď 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 v chybovém stavu.
  6. Potom můžete volitelně odstranit sadu VMScaleSet, ale uzly se vám budou dál zobrazovat jako mimo Service Fabric Explorer zobrazení. Posledním krokem je 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 se stříbrnou nebo zlatou odolností, bude škálování pomalé.

Horizontální navýšení kapacity

Škálování clusteru Service Fabric na více instancí zvýšením počtu instancí pro konkrétní škálovací sadu virtuálních počítačů Kapacitu můžete navýšit programově pomocí AzureClient a 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"
}

Horizontální snížení kapacity

Horizontální snížení kapacity vyžaduje větší pozornost než horizontální navýšení kapacity. Příklad:

  • Systémové služby Service Fabric běží v primárním typu uzlu ve vašem clusteru. Nikdy nevypínejte ani nešupujte počet instancí pro daný typ uzlu, abyste měli méně instancí, než vyžaduje úroveň spolehlivosti.
  • Pro stavovou službu potřebujete určitý počet uzlů, které jsou vždy v provozu, aby se zachovala dostupnost a zachoval stav vaší služby. Potřebujete minimálně počet uzlů, který se rovná počtu cílových replik v oddílu nebo službě.

Pokud chcete vertikálně navýšit kapacitu ručně, postupujte takto:

  1. V PowerShellu spusťte příkaz Disable-ServiceFabricNode s úmyslem 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 MyNodeType_5 virtuálního počítače.
  2. Spusťte příkaz Get-ServiceFabricNode , abyste se ujistili, že uzel přešel do zakázaného stavu. Pokud ne, počkejte na zakázání uzlu. U každého uzlu to může trvat několik hodin. Nepokračujte, dokud uzel nepřejdou na zakázaný.
  3. Snižte počet virtuálních počítačů v daném typu uzlu o jeden. Nejvyšší instance virtuálního počítače se teď odebere.
  4. Opakujte kroky 1 až 3 podle potřeby, dokud zřídíte požadovanou kapacitu. Počet instancí v primárních typech uzlů nešlechtujte na menší úroveň, než vyžaduje úroveň spolehlivosti. Seznam doporučených instancí najdete v tématu Plánování kapacity clusteru Service Fabric .

Pokud chcete š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 musíte připravit na vypnutí, aby bylo škálování na více instancí prostřednictvím kódu programu. Najděte 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 uvidíte odebraný uzel nebo instanci virtuálního počítače v Service Fabric Explorer ve stavu Není v pořádku. Vysvětlení tohoto chování najdete v tématu Chování, která můžete pozorovat v Service Fabric Explorer. Můžete:

Úrovně spolehlivosti

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

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

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

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

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

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

Úrovně odolnosti

Upozornění

Typy uzlů spuštěné s bronzovou odolností nezískají žádná oprávnění. Úlohy infrastruktury, které ovlivňují bezstavové úlohy, se nezastaví ani nezpozdí, což může mít vliv na vaše úlohy.

Bronzovou odolnost používejte pouze pro typy uzlů, které spouštějí bezstavové úlohy. V případě produkčních úloh spusťte silver nebo vyšší, abyste zajistili konzistenci stavu. Zvolte správnou spolehlivost na základě pokynů v dokumentaci k plánování kapacity.

Úroveň stálosti musí být nastavená 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 rámci nodeTypesprostředku Microsoft.ServiceFabric/clusters:

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

Další kroky