Sdílet prostřednictvím


Chyby poolu a uzlu v Azure Batch

Některé operace vytváření a správy fondů Azure Batch probíhají okamžitě. Detekce selhání těchto operací je jednoduchá, protože chyby se obvykle vrací okamžitě z rozhraní API, příkazového řádku nebo uživatelského rozhraní. Některé operace jsou ale asynchronní, běží na pozadí a dokončení trvá několik minut. Tento článek popisuje způsoby, jak detekovat a vyhnout se selháním, ke kterým může dojít v operacích na pozadí pro fondy a uzly.

Nezapomeňte nastavit aplikace tak, aby implementovaly komplexní kontrolu chyb, zejména pro asynchronní operace. Komplexní kontrola chyb vám může pomoct rychle identifikovat a diagnostikovat problémy.

Chyby bazénu

Chyby fondu můžou souviset s vypršením časového limitu nebo selháním změny velikosti, selháním automatického škálování nebo selháním odstranění fondu. Díky zahrnutí podrobnějších chybových zpráv je diagnostika a řešení těchto problémů jednodušší.

Podrobnosti o chybě poskytovatele služby Relay

Chyby poskytovatele přenosů se přímo předávají od základních poskytovatelů prostředků Azure, jako je škálovací sada virtuálních počítačů Azure (VMSS), a nabízejí hlubší přehled o tom, proč operace fondu selhala. K těmto chybám obvykle dochází, pokud problém služby nižší vrstvy ovlivňuje vytvoření fondu, změnu jeho velikosti nebo odstranění.

Struktura chyby poskytovatele přenosu

Tyto chyby jsou uvedeny ve strukturovaném formátu JSON obsahujícím následující klíčové komponenty:

  • Kód chyby: Typ chyby, ke které došlo (např. AllocationFailed, BadRequest atd.).
  • Chybová zpráva: Stručný popis chyby
  • Json chyby poskytovatele: Podrobná chybová zpráva vygenerovaná podkladovou službou Azure (např. VMSS).
  • Chyba zprostředkovatele zkrácena: Booleovská hodnota označující, zda byla chybová zpráva zprostředkovatele zkrácena kvůli omezením velikosti.

Příklady chyb zprostředkovatele přenosu

Příklad 1

Kód chyby:AllocationFailed
Chybová zpráva: Požadovaný počet vyhrazených uzlů nelze přidělit
Json chyby zprostředkovatele:

{
  "error": {
    "code": "BadRequest",
    "message": "The selected VM size 'STANDARD_A1_V2' cannot boot Hypervisor Generation '2'. If this was a Create operation, please ensure that the Hypervisor Generation of the Image matches the Hypervisor Generation of the selected VM Size. If this was an Update operation, please choose a Hypervisor Generation '2' VM Size."
  }
}

Chyba poskytovatele JSON zkrácena: False

Tato chyba značí neshodu mezi velikostí virtuálního počítače a generováním hypervisoru. Chybová zpráva navrhuje vybrat kompatibilní velikost virtuálního počítače, aby se problém vyřešil.

Příklad 2

Kód chyby:AllocationFailed
Chybová zpráva: Při změně velikosti fondu došlo k vnitřní chybě.
Provider Error JSON: Chyba poskytovatele JSON:

{
  "error": {
    "code": "ScopeLocked",
    "message": "The scope '/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Compute/VirtualMachineScaleSets/<guid>-azurebatch-VMSS-D' cannot perform write operation because the following scope(s) are locked: '/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Compute/VirtualMachineScaleSets/<guid>-azurebatch-VMSS-D'. Please remove the lock and try again."
  }
}

Chyba zprostředkovatele JSON zkrácena: False

Tato chyba značí, že operace změny velikosti fondu selhala, protože obor byl uzamčen, což brání operaci zápisu; pokud zámek odstraníte, problém se může vyřešit.

Chyby poskytovatele služby Relay nabízejí hlubší vhled do selhání operací skupiny, což usnadňuje přímou diagnostiku a řešení problémů ve službách Azure.

Časový limit nebo selhání při změně velikosti

Když vytvoříte nový fond nebo změníte velikost existujícího fondu, zadáte cílový počet uzlů. Operace vytvoření nebo změna velikosti se dokončí okamžitě, ale skutečné přidělení nových uzlů nebo odebrání existujících uzlů může trvat několik minut. V rozhraních API Pool - Add nebo Pool - Resize můžete zadat časový limit změny velikosti. Pokud služba Batch během časového limitu pro změnu velikosti nedokáže přidělit požadovaný počet uzlů, fond přejde do stabilního stavu a nahlásí chyby související se změnou velikosti.

Vlastnost resizeError obsahuje chyby, ke kterým došlo při posledním vyhodnocení.

Mezi běžné příčiny chyb změny velikosti patří:

  • Změna časového limitu je příliš krátká. Výchozí časový limit 15 minut je obvykle dostatečně dlouhý, aby se přidělily nebo odebraly uzly fondu. Pokud přidělujete velký počet uzlů, například více než 1 000 uzlů z image Azure Marketplace nebo více než 300 uzlů z image vlastního virtuálního počítače, můžete nastavit časový limit změny velikosti na 30 minut.

  • Nedostatečná kvóta jader. Účet Batch má omezený počet jader, které může přidělit ve všech fondech, a přestane přidělovat uzly, jakmile dosáhne této kvóty. Kvótu jader můžete zvýšit, aby služba Batch přidělila více uzlů. Další informace najdete v tématu Kvóty a omezení služby Batch.

  • Nedostatečné IP adresy podsítě, když je pool ve virtuální síti. Podsíť virtuální sítě musí mít dostatek IP adres pro přidělení každému požadovanému uzlu fondu. Jinak uzly nebude možné vytvořit. Další informace najdete v tématu Vytvoření fondu Služby Azure Batch ve virtuální síti.

  • Nedostatek prostředků, pokud je fond ve virtuální síti. Při vytváření fondu ve virtuální síti můžete vytvořit prostředky, jako jsou nástroje pro vyrovnávání zatížení, veřejné IP adresy a skupiny zabezpečení sítě (NSG) ve stejném předplatném jako účet Batch. Ujistěte se, že kvóty předplatného jsou dostatečné pro tyto zdroje.

  • Velké pooly s vlastními obrazy virtuálních počítačů Přidělení velkých fondů, které používají vlastní image virtuálních počítačů, může trvat déle a může dojít k překročení časového limitu při změně velikosti. Doporučení týkající se limitů a konfigurace najdete v tématu Vytvoření fondu pomocí Galerie výpočetních prostředků Azure.

Automatické selhání škálování

Službu Azure Batch můžete nastavit tak, aby automaticky škáluje počet uzlů ve fondu a definujete parametry pro vzorec automatického škálování fondu. Služba Batch pak pomocí vzorce pravidelně vyhodnocuje počet uzlů ve fondu a nastaví nová cílová čísla. Další informace najdete v tématu Vytvoření automatického vzorce pro škálování výpočetních uzlů ve fondu Batch.

K následujícím problémům může dojít při použití automatického škálování:

  • Vyhodnocení automatického škálování selže.
  • Operace změny velikosti nakonec selže a vyprší časový limit.
  • Problém se vzorcem automatického škálování vede k nesprávným cílovým hodnotám uzlu. Změna velikosti buď funguje, nebo vyprší časový limit.

Pokud chcete získat informace o posledním vyhodnocení automatického škálování, použijte vlastnost autoScaleRun . Tato vlastnost hlásí čas vyhodnocení, hodnoty a výsledek a případné chyby výkonu.

Událost dokončení změny velikosti fondu zaznamenává všechny informace o vyhodnoceních.

Selhání odstranění poolu

Pokud chcete odstranit fond obsahující uzly, služba Batch nejprve odstraní uzly, což může trvat několik minut. Batch pak odstraní samotný objekt fondu.

Služba Batch nastaví stav fondu na deleting během procesu odstranění. Volající aplikace může pomocí vlastností state a stateTransitionTime zjistit, jestli odstranění fondu trvá příliš dlouho.

Pokud odstranění fondu trvá déle, než se čekalo, služba Batch se opakovaně pokouší, dokud fond nebude úspěšně odstraněn. V některých případech je zpoždění způsobené výpadkem služby Azure nebo jinými dočasnými problémy. Další faktory, které brání úspěšnému smazání fondu, mohou vyžadovat, abyste podnikli kroky k vyřešení problému. Mezi tyto faktory můžou patřit následující problémy:

  • Zámky prostředků můžou být umístěny do prostředků vytvořených službou Batch nebo do síťových prostředků, které služba Batch používá.

  • Prostředky, které jste vytvořili, můžou záviset na prostředku vytvořeném službou Batch. Pokud například vytvoříte fond ve virtuální síti, služba Batch vytvoří skupinu zabezpečení sítě, veřejnou IP adresu a nástroj pro vyrovnávání zatížení. Pokud tyto prostředky používáte mimo fond, nemůžete fond odstranit.

  • Poskytovatel prostředků Microsoft.Batch může být odregistrován z předplatného, které obsahuje váš fond.

  • U účtů Microsoft Azure Batch Batch v režimu předplatného uživatele už nemusí mít roli Přispěvatel nebo Vlastník předplatného, které obsahuje váš fond. Další informace najdete v tématu Povolení přístupu k předplatnému službou Batch.

Chyby uzlů

I když služba Batch úspěšně přiděluje uzly ve fondu, můžou různé problémy způsobit, že některé uzly nejsou v pořádku a nemůžou spouštět úlohy. Za tyto uzly se stále účtují poplatky, takže je důležité zjistit problémy, abyste se vyhnuli placení za uzly, které nemůžete použít. Znalost běžných chyb uzlů a znalost aktuálního stavu úlohy je užitečná při řešení potíží.

Selhání spuštění úkolu

Pro fond můžete zadat volitelný startTask. Stejně jako u každého úkolu používá spouštěcí úkol příkazový řádek a může stahovat soubory prostředků z úložiště. Spouštěcí úloha se spustí pro každý uzel při spuštění uzlu. Vlastnost waitForSuccess určuje, zda Služba Batch čeká, dokud se spouštěcí úkol úspěšně nedokončí, než naplánuje všechny úkoly do uzlu. Pokud nakonfigurujete uzel tak, aby počkala na úspěšné dokončení počátečního úkolu, ale počáteční úkol selže, uzel není použitelný, ale stále vznikají náklady.

Selhání spouštěcích úloh můžete zjistit pomocí vlastností taskExecutionResult a taskFailureInformation v rámci uzlové vlastnosti startTaskInformation nejvyšší úrovně.

Neúspěšná spouštěcí úloha také způsobí, že batch nastaví computeNodeState na starttaskfailed, pokud waitForSuccess byl nastaven na true.

Stejně jako u každého úkolu může dojít k mnoha příčinám selhání spouštěcího úkolu. Pro řešení potíží zkontrolujte soubor stdout, soubor stderr, a ostatní logy specifické pro úlohu.

Spouštěcí úkoly musí být znovu zahájeny, protože spouštěcí úkol může běžet vícekrát na stejném uzlu, například při obnovení nebo restartování uzlu. Ve výjimečných případech, když se po události, která způsobí restart uzlu, spustí spouštěcí úloha, dojde ke znovu nasazení jednoho operačního systému (OS) nebo dočasného disku, zatímco druhý se nezmění. Vzhledem k tomu, že úkoly spouštěcí služby Batch a všechny úlohy služby Batch běží z dočasného disku, není tato situace obvykle problém. V případech, kdy spouštěcí úloha nainstaluje aplikaci na disk s operačním systémem a udržuje další data na dočasném disku, ale může dojít k problémům se synchronizací. Pokud používáte oba disky, aplikaci odpovídajícím způsobem chraňte.

Selhání stahování balíčku aplikace

Můžete zadat jeden nebo více balíčků aplikací pro fond. Když se uzel spustí, služba Batch stáhne zadané soubory balíčku do každého uzlu a před naplánováním úkolů je rozbalí. Běžně se používá příkaz spouštěcí úlohy s balíčky aplikací, například ke kopírování souborů do jiného umístění nebo ke spuštění instalace.

Pokud se balíčku aplikace nepodaří stáhnout a dekomprimovat, vlastnost computeNodeError hlásí selhání a nastaví stav uzlu na unusable.

Selhání stahování kontejneru

Můžete zadat jeden nebo více odkazů na kontejnery ve fondu. Služba Batch stáhne zadané kontejnery do každého uzlu. Pokud se kontejneru nepodaří stáhnout, vlastnost computeNodeError hlásí selhání a nastaví stav uzlu na unusable.

Aktualizace operačního systému uzlu

Ve fondech Windows je hodnota enableAutomaticUpdates ve výchozím nastavení nastavena na true. I když se doporučuje povolit automatické aktualizace, mohou aktualizace přerušit průběh úkolu, zejména pokud jsou úkoly dlouho trvající. Tuto hodnotu můžete nastavit na false, pokud potřebujete zajistit, aby aktualizace operačního systému neproběhla neočekávaně.

Uzel v nepoužitelném stavu

Služba Batch může z mnoha důvodů nastavit computeNodeState na unusable. Na uzel unusable nemůžete plánovat úkoly, ale i tak za něj se účtují poplatky.

Pokud služba Batch dokáže zjistit příčinu, vlastnost computeNodeError ji hlásí. Pokud je uzel ve stavu unusable, ale nemá žádnou chybu computeNodeError, znamená to, že služba Batch nemůže komunikovat s virtuálním počítačem. V tomto případě se služba Batch vždy pokusí obnovit virtuální počítač. Služba Batch se však automaticky nepokouší obnovit virtuální počítače, kterým se nepodařilo nainstalovat balíčky aplikací nebo kontejnery, i když je jejich stav unusable.

Mezi další důvody uzlů unusable patří následující příčiny:

  • Vlastní image virtuálního počítače je neplatná. Například obrázek není správně připravený.
  • Virtuální počítač se přesune kvůli selhání infrastruktury nebo upgradu na nízké úrovni. Služba Batch obnoví uzel.
  • Image virtuálního počítače byla nasazena na hardware, který ji nepodporuje.
  • Virtuální počítače jsou ve virtuální síti Azure a provoz se zablokoval na klíčové porty.
  • Virtuální počítače jsou ve virtuální síti, ale odchozí provoz do Služby Azure Storage je blokovaný.
  • Virtuální počítače jsou ve virtuální síti s vlastní konfigurací DNS a server DNS nemůže rozpoznat úložiště Azure.

Soubory protokolů agenta uzlu

Proces agenta Batch, který běží na jednotlivých uzlech fondu, poskytuje soubory protokolu, které můžou pomoct, pokud potřebujete kontaktovat podporu týkající se problému s uzlem fondu. Soubory protokolů pro uzel můžete nahrát prostřednictvím Azure portálu, Batch Exploreru nebo rozhraní API Compute Node - Upload Batch Service Logs služby Batch. Po nahrání a uložení souborů protokolu můžete odstranit uzel nebo fond, abyste ušetřili náklady na provoz uzlů.

Plný disk uzlu

Služba Batch používá dočasnou jednotku na virtuálním počítači fondu uzlů k ukládání souborů, jako jsou například následující soubory úloh, soubory úkolů a sdílené soubory:

  • Soubory balíčků aplikací
  • Soubory prostředků úkolu
  • Soubory specifické pro aplikaci stažené do jedné ze složek služby Batch
  • Soubory Stdout a stderr pro každé spuštění aplikace úloh
  • Výstupní soubory specifické pro aplikaci

Soubory, jako jsou balíčky aplikací nebo soubory prostředků úvodních úkolů, se zapisují pouze jednou, když služba Batch vytvoří uzel fondu. I když zapisují jenom jednou, pokud jsou tyto soubory příliš velké, mohly by zaplnit dočasný disk.

Další soubory, například stdout a stderr, se zapisují pro každou úlohu, kterou uzel spouští. Pokud na stejném uzlu běží velký počet úloh nebo jsou soubory úkolů příliš velké, mohly by vyplnit dočasný disk.

Uzel také potřebuje malé množství místa na disku s operačním systémem, aby po spuštění vytvořil uživatele.

Velikost dočasné jednotky závisí na velikosti virtuálního počítače. Jedním z aspektů při výběru velikosti virtuálního počítače je zajistit, aby dočasná jednotka měla dostatek místa pro plánovanou úlohu.

Když na webu Azure Portal přidáte fond, můžete zobrazit úplný seznam velikostí virtuálních počítačů, včetně sloupce Velikost disku prostředku. Články popisované velikosti virtuálních počítačů obsahují tabulky se sloupcem Dočasné úložiště . Další informace najdete v tématu Velikosti virtuálních počítačů optimalizované pro výpočty. Příklad tabulky velikostí najdete v tématu Fsv2-series.

Pro soubory zapsané jednotlivými úlohami můžete zadat dobu uchovávání informací. Doba uchovávání určuje, jak dlouho mají být soubory úloh zachovány, než je automaticky vyčistíte. Dobu uchovávání můžete zkrátit, aby se snížily požadavky na úložiště.

Pokud na dočasném disku nebo disku s operačním systémem dochází místo, uzel se přesune na unusablecomputeNoteState a chyba uzlu uvádí, že je disk plný.

Pokud si nejste jistí, co zabírá místo na uzlu, zkuste se vzdáleně připojit k uzlu a prošetřit ho ručně. Také můžete použít rozhraní API File - List From Compute Node k prozkoumání souborů, například výstupů úkolů, ve složkách spravovaných službou Batch. Toto rozhraní API uvádí pouze soubory ve spravovaných adresářích služby Batch. Pokud vaše úkoly vytvořily soubory jinde, toto rozhraní API je nezobrazuje.

Jakmile z uzlu načtete všechna potřebná data nebo je nahrajete do odolného úložiště, můžete data podle potřeby odstranit, abyste uvolnili místo.

Můžete odstranit staré dokončené úlohy nebo úkoly, jejichž data úloh jsou stále na uzlech. recentTasks Vyhledejte kolekci v taskInformation na uzlu, nebo použijte File - List From Compute Node API. Odstranění úlohy odstraní všechny úkoly v úloze. Odstranění úkolů v úloze aktivuje odstranění dat v adresářích úkolů na uzlech a uvolní místo. Jakmile uvolníte dostatek místa, restartujte uzel. Uzel by se měl přesunout ze stavu unusable a znovu do stavu idle.

Pokud chcete obnovit nepoužitelný uzel ve fondech VirtualMachineConfiguration, můžete uzel z fondu odebrat pomocí rozhraní Pool - Remove Nodes API. Potom můžete fond znovu zvětšit, abyste nahradili chybný uzel novým uzlem.

Důležité

V současné době není reimage podporován pro fondy VirtualMachineConfiguration.

Další kroky