Criar serviços de alta disponibilidade usando discos replicados de forma síncrona


A Alta disponibilidade do hiperdisco equilibrada é uma opção de armazenamento que permite implementar serviços de alta disponibilidade no Compute Engine. A Alta disponibilidade do hiperdisco equilibrada replica os dados de forma síncrona entre duas zonas na mesma região e garante alta disponibilidade para dados de disco de até uma falha zonal.

Como criar serviços de alta disponibilidade com discos replicados

Nesta seção, explicamos como criar serviços de alta disponibilidade com os discos do Alta disponibilidade do hiperdisco equilibrada.

Considerações sobre o design

Antes de começar a projetar um serviço de HA, você precisa entender as características do aplicativo, do sistema de arquivos e do sistema operacional. Elas são a base do design e servem para você determinar as abordagens apropriadas. Por exemplo, se um aplicativo não é compatível com a replicação no nível dele, algumas opções de design correspondentes não serão aplicáveis.

Da mesma forma, se o aplicativo, o sistema de arquivos ou o sistema operacional não estiverem tolerantes a falhas, usar o Alta disponibilidade do hiperdisco equilibrada (pré-lançamento) ou até mesmo snapshots de discos zonais, pode não ser uma opção. A tolerância a falhas é definida como a capacidade de se recuperar após uma interrupção repentina sem perder ou corromper dados que já foram confirmados em um disco antes da falha.

Considere o seguinte ao projetar para alta disponibilidade:

  • O efeito do uso da Alta disponibilidade do hiperdisco equilibrada ou outras soluções
  • Desempenho de gravação do disco
  • O objetivo do tempo de recuperação do serviço, ou seja, a rapidez com que o serviço se recupera de uma interrupção zonal e os requisitos de SLA
  • O custo para criar uma arquitetura de serviço resiliente e confiável

Em termos de custo, use as seguintes opções para replicação de aplicativos síncrona e assíncrona:

  • Usar duas instâncias do banco de dados e da VM. Nesse caso, o custo total é determinado pelos itens a seguir:

    • Custos da instância de VM
    • Persistent Disk ou Custos do hiperdisco
    • Custos de manutenção da replicação de aplicativos
  • Usar uma única VM com discos replicados de forma síncrona. Para alcançar a alta disponibilidade com um disco de alta disponibilidade do hiperdisco equilibrada, use a mesma instância de VM e de disco como a opção anterior, mas também inclua um disco replicado sincronizadamente. discos de alta disponibilidade do hiperdisco equilibrada têm o dobro do custo por byte em comparação com os discos zonais, porque eles são replicados em duas zonas de controle.

    No entanto, usar discos replicados de forma síncrona pode reduzir o custo de manutenção, já que os dados são gravados automaticamente em duas réplicas sem a necessidade de manter a replicação do aplicativo.

  • Não inicie a VM secundária até que o failover seja necessário. É possível reduzir os custos de host ainda mais, iniciando a VM secundária apenas sob demanda durante o failover em vez de manter a VM como uma VM em espera ativa.

Comparar custo, desempenho e resiliência

Veja na tabela a seguir comparações relacionadas ao custo, desempenho e resiliência de diferentes arquiteturas de serviço.

Arquitetura de serviço
de HA
Snapshots de
disco zonal
Replicação síncrona
no nível do aplicativo
Replicação assíncrona
no nível do aplicativo
Discos replicados de forma síncrona
Protege contra falhas no aplicativo, VM e zona1
Mitigação contra corrupção dos aplicativos (por exemplo: intolerância a falhas) 2 2
Custo $ $$

  • Two instances of the database or VM running, application replication setup and maintenance, cross zone networking.
$$

  • Duas instâncias do banco de dados ou da VM em execução, configuração e manutenção de replicação de aplicativos, rede entre zonas.
$1,5x - $$

  • Os custos serão os mesmos da replicação do aplicativo se você usar uma VM em espera ativa. Você pode ter um custo menor ativando uma VM de backup sob demanda durante o failover. Não há cobrança pela rede entre zonas entre réplicas de disco.
Desempenho dos aplicativos

  • Nenhum efeito


  • Compensação no desempenho dos aplicativos com replicação síncrona


  • Nenhum efeito


  • Nenhum efeito na maioria dos aplicativos
Adequado para aplicativos com poucos requisitos de RPO (tolerância muito baixa para perda de dados)

  • Perda de dados dependendo de quando o snapshot foi criado


  • Sem perda de dados3


  • Perda de dados porque a replicação é assíncrona


  • Sem perda de dados
Tempo de recuperação de desastres do armazenamento4
  • O (minutos)
  • O (segundos)
  • O (segundos)
  • 0 segundo: para forçar a anexação do disco a uma instância de VM em espera

1 Usar discos replicados ou instantâneos não é suficiente para proteger e mitigar falhas e corrupções. O aplicativo, o sistema de arquivos e, possivelmente, outros componentes de software precisam ser consistentes nas falhas ou usar algum tipo de encerramento.

2 A replicação de alguns aplicativos fornece mitigação contra algumas corrupções de aplicativos. Por exemplo, a corrupção principal do aplicativo MySQL não faz com que as instâncias da VM de réplica também sejam corrompidas. Consulte a documentação do seu aplicativo para mais detalhes.

3 A perda de dados é a perda irreversível de dados confirmados no armazenamento permanente. Todos os dados não confirmados ainda serão perdidos.

4 O desempenho do failover não inclui a verificação do sistema de arquivos e a recuperação e o carregamento do aplicativo após o failover.

Como criar serviços de banco de dados de alta disponibilidade usando discos replicados de forma síncrona

Esta seção aborda conceitos de alto nível para a criação de soluções de alta disponibilidade para serviços de banco de dados com estado (MySQL, Postgres etc.) usando o Compute Engine com discos de Alta disponibilidade do hiperdisco equilibrada (pré-lançamento).

Se houver grandes interrupções no Google Cloud, por exemplo, se uma região inteira ficar indisponível, o aplicativo poderá ficar indisponível. Dependendo das suas necessidades, considere técnicas de replicação entre regiões para ter uma disponibilidade ainda maior.

Geralmente, as configurações de HA do banco de dados têm pelo menos duas instâncias de VM. De preferência, essas instâncias de VM fazem parte de um ou mais grupos gerenciados de instâncias:

  • Uma instância de VM principal na zona primária
  • Uma instância de VM em espera em uma zona secundária

Uma instância de VM primária tem pelo menos dois discos: um de inicialização e um disco replicado. O disco replicado contém dados do banco de dados e quaisquer outros dados mutáveis que devem ser preservados em outra zona em caso de interrupção.

Uma instância de VM em espera requer um disco de inicialização separado para poder se recuperar de interrupções relacionadas à configuração. Por exemplo, como resultado de um upgrade do sistema operacional. Além disso, não é possível forçar a anexação de um disco de inicialização a outro durante um failover.

As instâncias de VM principal e em espera são configuradas para usar um balanceador de carga com o tráfego direcionado à VM primária, com base nos sinais da verificação de integridade. Em "Cenário de recuperação de desastres para dados", há uma descrição de outras configurações de failover que podem ser mais apropriadas para seu caso.

Desafios da replicação do banco de dados

A tabela a seguir lista alguns desafios comuns de configurar e gerenciar a replicação síncrona ou semissíncrona do aplicativo (como MySQL) e como elas se comparam com a replicação síncrona de disco com o discos de Alta disponibilidade do hiperdisco equilibrada (pré-lançamento).

Desafios Replicação síncrona
ou semissíncrona do aplicativo
Replicação síncrona do disco
Manter a estabilidade entre a réplica primária e de failover. Muitas coisas podem dar errado e fazer uma instância de VM sair do modo de HA:
  1. Configuração incorreta dos parâmetros de replicação, como incompatibilidade do certificado SSL ou falta de ACL no lado principal.
  2. Carga pesada na instância de VM principal que a réplica de failover não consegue acompanhar.
  3. Bugs que causam problemas de replicação, como erros no aplicativo, configuração incorreta do SO ou falha no Docker.
  4. Falhas na infraestrutura, como contenção da CPU, VM congelada ou interrupção de rede intermediária.

As falhas de armazenamento são resolvidas pelo discos de Alta disponibilidade do hiperdisco equilibrada. Isso acontece com transparência no aplicativo, exceto se ocorrer uma possível flutuação no desempenho do disco.

É necessário ter verificações de integridade definidas pelo usuário para revelar problemas no aplicativo ou na VM e acionar o failover.

O tempo total do failover é maior do que o esperado. O tempo necessário para a operação de failover não tem um limite superior. Aguardar a repetição de todas as transações (etapa 2 acima) pode demorar bastante dependendo do esquema e da carga no banco de dados.

discos de Alta disponibilidade do hiperdisco equilibrada fornecem replicação síncrona, de modo que o tempo de failover seja limitado pela soma das seguintes latências:

  1. Criação de uma VM secundária, a menos que você já tenha uma instância de VM de espera ativa disponível.
  2. Forçar a anexação de um disco replicado.
  3. Inicialização do aplicativo
Dupla personalidade Para evitar dupla personalidade (em inglês), as duas abordagens requerem ações para garantir que haja apenas um primário por vez.

Sequência de operações de leitura e gravação em discos

Para determinar as sequências de leitura e gravação ou a ordem em que os dados são lidos e gravados no disco, a maior parte do trabalho é feita pelo driver de disco da VM. Como usuário, você não precisa lidar com a semântica de replicação e pode interagir com o sistema de arquivos normalmente. O driver subjacente processa a sequência de leitura e gravação.

Por padrão, uma VM do Compute Engine com o Alta disponibilidade do hiperdisco equilibrada (pré-lançamento) opera no modo de replicação completa, em que as solicitações para ler ou gravar no disco são enviadas a ambas as réplicas.

No modo de replicação completa, ocorre o seguinte:

  • Durante a gravação, uma solicitação de gravação tenta fazer a gravação nas duas réplicas e confirma quando isso é feito com êxito.
  • Durante a leitura, a VM envia uma solicitação de leitura às duas réplicas e apresenta os resultados daquela que foi bem sucedida. Se a solicitação de leitura expirar, outra solicitação de leitura será enviada.

Se uma réplica ficar para trás ou não reconhecer que as solicitações de leitura ou gravação foram concluídas, o status da réplica será atualizado.

Verificações de integridade

As verificações de integridade usadas pelo balanceador de carga são implementadas pelo agente. O agente de verificação de integridade tem estas duas finalidades:

  1. O agente de verificação de integridade está localizado nas VMs primária e secundária. Ele monitora as instâncias de VM e se comunica com o balanceador de carga para direcionar o tráfego. Isso funciona melhor quando configurado com grupos de instâncias.
  2. O agente de verificação de integridade é sincronizado com o plano de controle regional específico do aplicativo. Ele toma decisões de failover com base no comportamento desse plano de controle, que precisa estar em uma zona diferente da instância de VM que está tendo a integridade verificada.

O próprio agente de verificação de integridade precisa ser tolerante a falhas. Por exemplo, veja na imagem a seguir que o plano de controle está separado da instância de VM primária. Essa instância está na zona us-central1-a, enquanto a VM em espera está na zona us-central1-f.

Papel do agente de verificação de integridade na VM.

O papel do agente de verificação de integridade nas instâncias de VM primária e em espera.

A seguir