

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Failover rápido de capacidade insuficiente do cluster Slurm
<a name="slurm-short-capacity-fail-mode-v3"></a>

A partir da AWS ParallelCluster versão 3.2.0, os clusters são executados com o modo de failover rápido de capacidade insuficiente ativado por padrão. Isso minimiza o tempo gasto tentando enfileirar um trabalho quando erros de capacidade insuficiente do Amazon EC2 são detectados. Isso é particularmente eficaz quando você configura sua fila com vários recursos computacionais que usam tipos de instância diferentes.

**O Amazon EC2 detectou falhas de capacidade insuficiente:**
+ `InsufficientInstanceCapacity`
+ `InsufficientHostCapacity`
+ `InsufficientReservedInstanceCapacity`
+ `MaxSpotInstanceCountExceeded`
+ `SpotMaxPriceTooLow`: ativado se o seu preço de solicitação spot é inferior ao preço mínimo de atendimento de solicitação spot exigido.
+ `Unsupported`: ativado com o uso de um tipo de instância que não é compatível com uma instância específica Região da AWS.

No modo rápido de failure-over de capacidade insuficiente, se um erro de capacidade insuficiente for detectado quando uma tarefa for atribuída a [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`compute resource`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources), AWS ParallelCluster faça o seguinte:

1. Ele define o recurso de computação para um estado desativado (`DOWN`) por um período de tempo predefinido.

1. Ele usa `POWER_DOWN_FORCE` para cancelar as tarefas do nó com falha do recurso de computação e para suspender o nó com falha. Ele define o nó com falha para o estado `IDLE` e `POWER_DOWN (!)` e, em seguida, para `POWERING_DOWN (%)`.

1. Ele enfileira o trabalho em outro recurso de computação.

Os nós estáticos e ativados do recurso de computação desativado não são afetados. Os trabalhos podem ser concluídos nesses nós.

Esse ciclo se repete até que o trabalho seja atribuído com êxito a um ou mais nós de recursos de computação. Para mais informações sobre os estados dos nós, consulte [Guia do Slurm para o modo de várias filas](multiple-queue-mode-slurm-user-guide-v3.md).

Se nenhum recurso de computação for encontrado para executar o trabalho, o trabalho será definido no estado `PENDING` até que o período de tempo predefinido termine. Nesse caso, você pode modificar o período de tempo predefinido conforme descrito na seção a seguir.

## Parâmetro de tempo limite de capacidade insuficiente
<a name="slurm-short-capacity-fail-mode-parameter-v3"></a>

**`insufficient_capacity_timeout`**

`insufficient_capacity_timeout` especifica o período de tempo (em segundos) em que o recurso de computação é mantido no estado desativado (`down`) quando um erro de capacidade insuficiente é detectado.

Por padrão, `insufficient_capacity_timeout` é habilitado.

O `insufficient_capacity_timeout` padrão é 600 segundos (10 minutos).

Se o valor `insufficient_capacity_timeout` for menor ou igual a zero, o modo de failover rápido de capacidade insuficiente será desativado.

Você pode alterar o valor de `insufficient_capacity_timeout` adicionando o parâmetro no arquivo de configuração `clustermgtd` localizado em `/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf` no `HeadNode`.

O parâmetro pode ser atualizado a qualquer momento, sem interromper a frota de computação.

Por exemplo:
+ `insufficient_capacity_timeout=600`:

  Se um erro de capacidade insuficiente for detectado, o recurso de computação será definido como desativado (`DOWN`). Após 10 minutos, seu nó com falha é definido para o estado `idle~` (`POWER_SAVING`).
+ `insufficient_capacity_timeout=60`:

  Se um erro de capacidade insuficiente for detectado, o recurso de computação será definido como desativado (`DOWN`). Após 1 minuto, seu nó com falha é definido para o estado `idle~`.
+ `insufficient_capacity_timeout=0`:

  O modo de failover rápido de capacidade insuficiente é desativado. O recurso de computação não é desativado.

**nota**  
Pode haver um atraso de até um minuto entre o momento em que os nós falham com erros de capacidade insuficientes e o momento em que o daemon de gerenciamento de cluster detecta as falhas do nó. Isso ocorre porque o daemon de gerenciamento de cluster verifica falhas de capacidade insuficiente do nó e define os recursos de computação para o `down` estado em intervalos de um minuto.

## Status do modo de failover rápido de capacidade insuficiente
<a name="slurm-short-capacity-fail-mode-status-v3"></a>

Quando um cluster está no modo de failover rápido e de capacidade insuficiente, você pode verificar seu status e os estados dos nós.

### Estados do nó
<a name="slurm-short-capacity-fail-mode-nodes-v3"></a>

Quando uma tarefa é enviada a um nó dinâmico de recursos de computação e um erro de capacidade insuficiente é detectado, o nó é colocado nesse estado `down#` com razão.

```
(Code:InsufficientInstanceCapacity)Failure when resuming nodes.
```

Depois os nós desligados (nós no estado `idle~`) são configurados para `down~` com razão.

```
(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity.
```

O trabalho é enfileirado para outros recursos de computação na fila.

Os nós estáticos do recurso de computação e os nós que são `UP` não são afetados pelo modo de failover rápido de capacidade insuficiente.

Considere os estados dos nós mostrados no exemplo a seguir.

```
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
queue1*   up    infinite    30  idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15]
queue2    up    infinite    30  idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]
```

Enviamos um trabalho para a queue1, que requer um nó.

```
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
queue1*   up   infinite  1   down# queue1-dy-c-1-1
queue1*   up   infinite  15  idle~ queue1-dy-c-2-[1-15]
queue1*   up   infinite  14  down~ queue1-dy-c-1-[2-15]
queue2    up   infinite  30  idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]
```

O nó `queue1-dy-c-1-1` é iniciado para executar o trabalho. No entanto, a instância falhou ao ser iniciada devido a um erro de capacidade insuficiente. O nó `queue1-dy-c-1-1` está definido como `down`. O nó dinâmico desligado dentro do recurso de computação (`queue2-dy-c-1`) está definido como `down`.

Você pode verificar a razão do nó com `scontrol show nodes`.

```
$ scontrol show nodes queue1-dy-c-1-1
NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 
CPUAlloc=0 CPUTot=96 CPULoad=0.00
...
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
Reason=(Code:InsufficientInstanceCapacity)Failure when resuming nodes [root@2022-03-10T22:17:50]
   
$ scontrol show nodes queue1-dy-c-1-2
NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 
CPUAlloc=0 CPUTot=96 CPULoad=0.00
...
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
Reason=(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity [root@2022-03-10T22:17:50]
```

O trabalho é enfileirado em outro tipo de instância dentro dos recursos de computação da fila.

Depois de decorrido o `insufficient_capacity_timeout`, os nós no recurso de computação são redefinidos para o estado `idle~`.

```
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
queue1*   up    infinite    30  idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15]
queue2    up    infinite    30  idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]
```

Depois de decorrido o `insufficient_capacity_timeout` e os nós no recurso de computação são redefinidos para o estado `idle~`, o programador Slurm atribui prioridade menor aos nós. O programador continua selecionando nós de outros recursos de computação da fila com pesos maiores, a menos que ocorra uma das seguintes situações:
+ Os requisitos de envio de um trabalho correspondem ao recurso de computação recuperado.
+ Nenhum outro recurso de computação está disponível porque eles estão lotados.
+ `slurmctld` é reiniciado.
+ A frota de AWS ParallelCluster computação é interrompida e começa a desligar e ligar todos os nós.

### Logs relacionados
<a name="slurm-protected-mode-logs-v3"></a>

Os logs relacionados a erros de capacidade insuficiente e ao modo rápido de failover de capacidade insuficiente podem ser encontrados no log `resume` do Slurm e no log `clustermgtd` no nó principal.

**Slurm `resume` (`/var/log/parallelcluster/slurm_resume.log`)**  
Mensagens de erro quando um nó falha na inicialização devido à capacidade insuficiente.  

```
[slurm_plugin.instance_manager:_launch_ec2_instances] - ERROR - Failed RunInstances request: dcd0c252-90d4-44a7-9c79-ef740f7ecd87
[slurm_plugin.instance_manager:add_instances_for_nodes] - ERROR - Encountered exception when launching instances for nodes (x1) ['queue1-dy-c-1-1']: An error occurred 
(InsufficientInstanceCapacity) when calling the RunInstances operation (reached max retries: 1): We currently do not have sufficient p4d.24xlarge capacity in the 
Availability Zone you requested (us-west-2b). Our system will be working on provisioning additional capacity. You can currently get p4d.24xlarge capacity by not 
specifying an Availability Zone in your request or choosing us-west-2a, us-west-2c.
```

**Slurm `clustermgtd` (`/var/log/parallelcluster/clustermgtd`)**  
O recurso de computação c-1 em queue1 está desativado devido à capacidade insuficiente.  

```
[slurm_plugin.clustermgtd:_reset_timeout_expired_compute_resources] - INFO - The following compute resources are in down state 
due to insufficient capacity: {'queue1': {'c-1': ComputeResourceFailureEvent(timestamp=datetime.datetime(2022, 4, 14, 23, 0, 4, 769380, tzinfo=datetime.timezone.utc), 
error_code='InsufficientInstanceCapacity')}}, compute resources are reset after insufficient capacity timeout (600 seconds) expired
```
Depois que o tempo limite de capacidade insuficiente expirar, o recurso de computação é redefinido e os nós dentro dos recursos de computação são definidos como `idle~`.  

```
[root:_reset_insufficient_capacity_timeout_expired_nodes] - INFO - Reset the following compute resources because insufficient capacity 
timeout expired: {'queue1': ['c-1']}
```