Teste do Amazon Aurora PostgreSQL usando consultas de injeção de falhas - Amazon Aurora

Teste do Amazon Aurora PostgreSQL usando consultas de injeção de falhas

Você pode testar a tolerância a falhas do cluster de banco de dados Aurora PostgreSQL usando consultas de injeção de falha. Consultas de injeção de falhas são emitidas como comandos SQL para uma instância do Amazon Aurora. As consultas de injeção de falhas permitem que você trave a instância para que consiga testar o failover e a recuperação. Você também pode simular uma falha da réplica do Aurora, uma falha do disco e um congestionamento do disco. As consultas de injeção de falhas são compatíveis com todas as versões disponíveis do Aurora PostgreSQL, conforme mostrado a seguir.

  • Aurora PostgreSQL versões 12, 13, 14 e posteriores

  • Aurora PostgreSQL versão 11.7 e posteriores

  • Aurora PostgreSQL versão 10.11 e posteriores

Quando uma consulta de injeção de falha especifica uma falha, ela força uma falha da instância de bancos de dados Aurora PostgreSQL. As outras consultas de injeção de falha resultam em simulações de eventos de falha, mas não desencadeiam o evento. Ao enviar uma consulta de injeção de falha, especifique também um período para a simulação do evento de falha.

Você pode enviar uma consulta de injeção de falha a uma das instâncias da réplica do Aurora conectando-se ao endpoint da réplica do Aurora. Para obter mais informações, consulte Conexões de endpoints do Amazon Aurora.

Teste de pane da instância

Você pode forçar uma pane em uma instância do Aurora PostgreSQL usando a função de consulta de injeção de falha aurora_inject_crash().

No que tange a essa consulta de injeção de falha, não ocorre um failover. Se desejar testar um failover, você poderá escolher a ação de instância Failover para o cluster de banco de dados no console do RDS ou usar o comando daAWS CLI failover-db-cluster ou a operação da API do RDS FailoverDBCluster.

Sintaxe

SELECT aurora_inject_crash ('instance' | 'dispatcher' | 'node');
Opções

Esta consulta de injeção de falha considera um dos seguintes tipos de pane. O tipo de falha não diferencia maiúsculas de minúsculas:

'instance'

uma pane é simulada no banco de dados compatível com PostgreSQL para a instância do Amazon Aurora.

'dispatcher'

uma falha no dispatcher é simulada na instância primária do cluster de banco de dados de Aurora. O dispatcher grava atualizações no volume do cluster para um cluster de banco de dados do Amazon Aurora.

'node'

uma pane é simulada no banco de dados compatível com PostgreSQL e no dispatcher para a instância do Amazon Aurora.

Teste de falha em uma réplica do Aurora

Você pode simular a falha de uma réplica do Aurora usando a função de consulta de injeção de falha aurora_inject_replica_failure().

Uma falha de réplica do Aurora bloqueia a replicação para a réplica do Aurora ou todas as réplicas do Aurora no cluster de banco de dados pela porcentagem especificada para o intervalo de tempo especificado. Quando o intervalo de tempo acabar, as réplicas afetadas do Aurora são automaticamente sincronizadas com a instância primária.

Sintaxe

SELECT aurora_inject_replica_failure( percentage_of_failure, time_interval, 'replica_name' );
Opções

Esta consulta de injeção de falha considera os seguintes parâmetros:

percentage_of_failure

A porcentagem de replicação para bloquear durante o evento de falha. Esse valor pode ser um duplo entre 0 e 100. Se você especificar 0, nenhuma replicação será bloqueada. Se você especificar 100, toda replicação será bloqueada.

time_interval

O tempo necessário para simular a falha da réplica do Aurora. O intervalo é em segundos. Por exemplo, se o valor é 20, a simulação é executada por 20 segundos.

nota

Especifique o intervalo de tempo do evento de falha da réplica do Aurora; com cautela. Se você especificar um intervalo muito longo e sua instância registrar uma grande quantidade de dados durante o evento de falha, seu cluster de banco de dados Aurora poderá presumir que sua réplica do Aurora entrou em pane e substituí-la.

replica_name

A réplica do Aurora na qual a simulação de falha será injetada. Especifique o nome de uma réplica do Aurora para simular uma falha de uma única réplica do Aurora. Especifique uma string vazia para simular falhas para todas as réplicas do Aurora no cluster de banco de dados.

Para identificar nomes de réplica, consulte a coluna server_id na função aurora_replica_status(). Por exemplo:

postgres=> SELECT server_id FROM aurora_replica_status();

Teste de uma falha de disco

Você pode simular a falha de um disco para um cluster de bancos de dados Aurora PostgreSQL usando a função de consulta de injeção de falha aurora_inject_disk_failure().

Durante uma simulação de falha de disco, o cluster de bancos de dados Aurora PostgreSQL marca aleatoriamente segmentos do disco como falhos. As solicitações feitas a esses segmentos são bloqueadas durante a simulação.

Sintaxe

SELECT aurora_inject_disk_failure( percentage_of_failure, index, is_disk, time_interval );
Opções

Esta consulta de injeção de falha considera os seguintes parâmetros:

percentage_of_failure

a porcentagem do disco para marcar como falha durante o evento de falha. Esse valor pode ser um duplo entre 0 e 100. Se você especificar 0, nenhum dos discos será marcado como falhos. Se você especificar 100, o disco todo será marcado como falho.

índice

Um bloco de dados lógico específico para simular o evento de falha. Se você exceder o intervalo de blocos lógicos ou nós de armazenamento de dados disponíveis, receberá um erro informando o valor máximo do índice pode ser especificado. Para evitar esse erro, consulte Exibir o status do volume para um cluster de bancos de dados Aurora PostgreSQL.

is_disk

Indica se a falha de injeção é para um bloco lógico ou para um nó de armazenamento. Especificar como true significa que as falhas de injeção são para um bloco lógico. Especificar como false significa que as falhas de injeção são para um nó de armazenamento.

time_interval

A quantidade de tempo para simular a falha do disco. O intervalo é em segundos. Por exemplo, se o valor é 20, a simulação é executada por 20 segundos.

Teste de congestionamento de disco

Você pode simular o congestionamento de um disco para um cluster de bancos de dados Aurora PostgreSQL usando a função de consulta de injeção de falha aurora_inject_disk_congestion().

Durante uma simulação de congestionamento de disco, o cluster de bancos de dados Aurora PostgreSQL marca aleatoriamente segmentos do disco como congestionados. As solicitações feitas a esses segmentos serão atrasadas entre o tempo de atraso mínimo e máximo especificado enquanto durar a simulação.

Sintaxe

SELECT aurora_inject_disk_congestion( percentage_of_failure, index, is_disk, time_interval, minimum, maximum );
Opções

Esta consulta de injeção de falha considera os seguintes parâmetros:

percentage_of_failure

A porcentagem do disco para marcar como congestionada durante o evento de falha. Este é um valor duplo entre 0 e 100. Se você especificar 0, nenhum dos discos será marcado como congestionados. Se você especificar 100, o disco todo será marcado como congestionado.

índice

Um bloco lógico específico de dados ou nó de armazenamento usado para simular o evento de falha.

Se você exceder o intervalo de blocos lógicos ou nós de armazenamento de dados disponíveis, receberá um erro informando o valor máximo do índice que você pode especificar. Para evitar esse erro, consulte Exibir o status do volume para um cluster de bancos de dados Aurora PostgreSQL.

is_disk

Indica se a falha de injeção é para um bloco lógico ou para um nó de armazenamento. Especificar como true significa que as falhas de injeção são para um bloco lógico. Especificar como false significa que as falhas de injeção são para um nó de armazenamento.

time_interval

A quantidade de tempo para simular o congestionamento de disco. O intervalo é em segundos. Por exemplo, se o valor é 20, a simulação é executada por 20 segundos.

mínimo, máximo

A quantidade mínima e máxima de atraso de congestionamento em milissegundos. Os valores válidos variam de 0,0 a 100,0 milissegundos. Os segmentos de disco marcados como congestionados serão atrasados durante um período aleatório de tempo dentro do intervalo mínimo e máximo enquanto durar a simulação. O valor máximo deve ser maior que o valor mínimo.